don't use setListeners in the client