Large object-oriented systems have at least four characteristics that complicate object communication: the system is distributed, it contains large numbers of objects, objects need to be reallocated at run-time, and objects can be replaced by other objects in order to adapt to the dynamic changes in the system. Traditional object communication is based on sending a message to a receiver object known to the sender of the message. At linking or instantiation time, an object establishes its acquaintances through name/class-based binding and uses these objects throughout its lifetime. If this is too rigid, the software engineer has to implement the binding of objects manually using pointers. We found the traditional acquaintance communication semantics to be too limited, and we identified several problems related to the reusability of objects and selection mechanisms, understandability and expressiveness. It is important to separate a class or object's requirements on its acquaintances from the way an object selects and binds its acquaintances in actual systems. We studied the necessary expressiveness for acquaintance handling and identified four relevant aspects: type and duration of binding, conditions for binding, number of selected objects, and selection region for binding. To implement these aspects, we defined acquaintance layers as part of the layered object model. Acquaintance layers uniformly extend the traditional OO acquaintance handling semantics and allow for the first-class representation of acquaintance selection and binding, thereby increasing traceability and reusability