In a couple of places the global coherence object is provided to low level classes so they have access to data structures or can callback with changes. This makes it harder to develop test cases to test functionality in isolation.
One example is the event server (event reception) is passed the global object so it can call to proopgate event changes, this propogate then access global data in services to locate the service to deliver the event to. This task is started by calling into upnp.core.event by upnp.core.service to subscribe to the events.
In this case I would propose moving the subscribe list in upnp.core.service into upnp.core.event and leaving the later to manage the list. The control flow for events then does not need to know about top level coherence object, event propogation goes in a more direct route to the service.
The attached is a copy of upnp.core.event with this proposal, I have not attached the changes to remove this from service and base.