             // the timer was stopped since this buddy was enqueued
             return;
         }
+
         _currentCount ++;
         dispatchEvent(new TimerEvent(TimerEvent.TIMER));
+
+        // if the timer was stop()'ed in the TIMER event itself, do not requeue!
         if (_buddy == null) {
-            // the timer was stopped in the TIMER event itself - do not requeue!
-            return;
-        }
-
+            return;
+        }
+
+        // if we're repeating forever, or still got a ways to go, reschedule, else finish
         if (repeatCount == 0 || _currentCount < _repeatCount) {
             scheduleBuddy(_buddy);
 

        }
    }

    public function reset () :void
    {
        stop();

        reset();
    }

    /** The total number of times the timer has fired since it started at zero. */
    public function get currentCount () :int
    {
        return _currentCount;
    }

    /** The delay, in milliseconds, between timer events. */
    public function get delay () :Number
    {
        return _delay;
    }

    /** The delay, in milliseconds, between timer events. */
    public function set delay (value :Number) :void
    {
        _delay = value;
