split up the client protocol