Refactor into RemoteUserState (looser coupling)