Event driven finite state machine