client side listening