client side complete