initial client implementation