client/server implementation