         public function pushEvent(value:IEvent):void
         {
             _events.push(value);
-            eventLoop();
+            if (!_inEventLoop)
+            {
+                eventLoop();
+            }
         }
 
         protected function executeAction(action:IAction, event:IEvent):void


        protected function executeSubmachines(state:IState, event:IEvent):void
        {
            for each ( var fsm:IFsm in state.subMachines )
            {
                fsm.pushEvent(event);
            }


                // execute submachines with current event
                executeSubmachines(currentState, event);

                _inEventLoop = false;
            }
        }
    }
