state machine generator (change description and enjoy ; ) )