add a generator of initial state
remove some states
Improve API (exactly as a state machine)
Improve API (exactly as a state machine)