Event-driven finite state machine