Relays MAY cache Objects, but are not required to.
A caching relay saves Objects to its cache identified by the Object's Full Track Name, Group ID and Object ID. If multiple objects are received with the same Full Track Name, Group ID and Object ID, Relays MAY ignore subsequently received Objects or MAY use them to update certain cached fields. Implementations that update the cache need to protect against cache poisoning. Only Object Properties can be added, removed or updated, subject to the constraints of the specific property.
An endpoint that receives a duplicate Object with a different Delivery Mode, Subgroup ID, Priority or Payload MUST treat the track as Malformed.
For ranges of objects that do not exist, relays MAY change the representation of a missing range to a semantically equivalent one. For instance, a relay may change an End-of-Group="Y" Subgroup Header to an equivalent object with an End of Group status, or a Prior Group ID Gap property could be removed in FETCH, where it's redundant.
A relay MAY cache that a range of Objects is Gone (see Section 2.1.2). If it later receives one of those Objects, it can cache and forward the Object. A relay does not cache Unknown or timed out ranges.
A cache MUST store all fields of an Object defined in Section 2.1.1, with the exception of any Object Properties (Section 11.1.2) that specify otherwise.