An object is responsible for identifying the kinds of events that can occur within that object, allowing other objects to register interest in the occurrence of such events, and generating RemoteEvent objects that are sent as notifications to the objects that have registered interest when such events occur.