rough client side functionality