Here's a better way to put this: Maybe _function is not the right way. The client knows about the manager and can directly use its apis, but why is the manager calling the client api from within itself. It is not a completely self-contained unit. Maybe it should send out events, and the Client should listen to it and make changes it sees fit. So instead of calling client.connected(), the manager would emit "connected" (this.emit("connected"),  and the Client can do the connected() operation itself. That way, the manager is completely independent and self contained.