State Machine

TODO: write