use pre-bound handler instead of listenWithScope