reduced to client side