So now you know what's the intention of that "SetCurrentState" method I proposed above? It is to allow us to request for cursor in one centralized place. By right all other code paths in StateMachine should not be setting "this.currentState" directly, instead they should all be calling "SetCurrentState" method to change state so that "SetCurrentState" can handle all the state transition operations (including mouse cursor setting).