Objects may be either direct (embedded in another object) or indirect. Indirect objects are numbered with an object number and a generation number and defined between the obj and endobj keywords. An index table, also called the cross-reference table and marked with the xref keyword, follows the main body and gives the byte offset of each indirect object from the start of the file.[16] This design allows for efficient random access to the objects in the file, and also allows for small changes to be made without rewriting the entire file (incremental update).