     private static function timerHandler(event:TimerEvent):void
     {
         var oldTime:Number = intervalTime;
-        _intervalTime = getTimer();
+        _intervalTime = Timeline.pulse();
         
         var n:int = activeAnimations.length;
                 
-        for (var i:int = n; i >= 0; i--)
+        for (var i:int = 0; i < n; ++i)
         {
             var animation:Animation = Animation(activeAnimations[i]);
             if (animation)
                 animation.doInterval();
         }
         
+        // Check to see whether it's time to start any delayed animations
+        for (i = 0; i < delayedStartAnims.length; ++i)
+        {
+            var anim:Animation = Animation(delayedStartAnims[i]);
+            var animStartTime:Number = delayedStartTimes[anim];
+            // Keep starting animations unless our sorted lists return
+            // animations that start past the current time
+            if (animStartTime < Timeline.currentTime)
+                anim.start();
+            else
+                break;
+        }
         event.updateAfterEvent();
     }
 

        
        if (!timer)
        {
            timer = new Timer(_resolution);
            timer.addEventListener(TimerEvent.TIMER, timerHandler);
            timer.start();
        }
        else
        {
            timer.start();
        }
        
        if (isNaN(intervalTime))
            _intervalTime = getTimer();

        animation.startTime = _intervalTime;
    }

    private static function removeAnimationAt(index:int):void
    {
        if (index >= activeAnimations.length || index < 0)
            return;

        activeAnimations.splice(index, 1);
                
        var n:int = activeAnimations.length;
        for (var i:int = index; i < n; i++)
        {
            var curAnimation:Animation = Animation(activeAnimations[i]);
            curAnimation.id--;
        }
        
        if (n == 0)
        {
            _intervalTime = NaN;
            timer.reset();
        }
    }


        if (!_isPlaying)
        {
            setupInterpolation();
            _intervalTime = Timeline.currentTime;
            startTime = _intervalTime - playheadTime;
            doInterval();
        }
