Completed, but untested, client side