             });
             
             _currentState = _initialState;
+            _events = new Vector.<IEvent>;
+
+            /*
+                Accept new events because you could be on the same stack frame
+                and end up queueing events
+            */
+            _inEventLoop = false;
         }
 
         public function destroy():void
         {
             mapSubmachines(tryDestroy);
 
+            _destroyed = true;
             _eventMap = null;
             _events = null;
             _states = null;

    import com.phylake.fsm.core.*;
    import com.phylake.util.tryDestroy;
    import flash.errors.IllegalOperationError;
    import flash.utils.Dictionary;

    public class Fsm implements IFsm
    {

                {
                    // execute exitState action for the current state
                    executeAction(currentState.exitState, event);
                    if (_destroyed) return;

                    // execute transition action
                    executeAction(foundTransition.action, event);
                    if (_destroyed) return;

                    // complete transition
                    _currentState = foundTransition.to;

                    // execute enterState action for the new state
                    executeAction(currentState.enterState, event);
                    if (_destroyed) return;
                }
                else if (noTransitionException)
                {
