FSM event-driven