             return;
         }
 
-        enqueue(new Buddy(this, getTimer() + _delay));
+        scheduleBuddy(new Buddy(this));
     }
 
     public function stop () :void

        }

        if (repeatCount == 0 || _currentCount < _repeatCount) {
            buddy.expiration += _delay;
            enqueue(buddy);

        } else {
            dispatchEvent(new TimerEvent(TimerEvent.TIMER_COMPLETE));

    {
        var now :int = getTimer();

        // see if we should pop one timer off the queue and expire it; we could pop all the
        // outstanding ones, but this solution puts the onus on developers to make their event
        // handlers light-weight, and protects the socket code from starvation
        if (_heap.size > 0 && _heap.front.expiration <= now) {
            var buddy :Buddy = _heap.dequeue();
            if (buddy.budette != null) {
                buddy.budette.expire(buddy);
