Implement a better way to add instances of ClientListener, without needing to access the client object directly. See #333