added client class, fully TDD'd