client side implementation