                     
                     if (transition.guards)
                     {
+                        trueGuards = true;
                         for each (guard in transition.guards)
                         {
-                            if (guard.evaluate(_guardFsm || this, event))
+                            trueGuards &&= guard.evaluate(_guardFsm || this, event);
+                        }
+                        if (trueGuards)
+                        {
+                            if (foundTransition)
                             {
-                                if (trueGuard)
-                                {
-                                    nTransitions(event);
-                                    // while this is an exception we have a valid
-                                    // transition from which to continue
-                                    break outer;
-                                }
-
-                                trueGuard = guard;
-                                foundTransition = transition;
+                                nTransitions(event);
+                                // while this is an exception we have a valid
+                                // transition from which to continue
+                                break outer;
                             }
+
+                            foundTransition = transition;
                         }
                     }
                     else

            var transition:ITransition;
            var foundTransition:ITransition;
            var guard:IGuard;
            var trueGuard:IGuard;//the guard allowing a state transition
            var submachine:IFsm;

            while (event = _events.shift())
            {

                    continue;
                }

                foundTransition = null;

                outer: for each (transition in _eventMap[event.name])
