break the client implementation into smaller parts