first client implementation