Lots of work on the client side.  Still need some tests.