     public function play():void
     {
         if (startDelay > 0)
-        {
-            // Run timer if it's not currently running
-            if (!timer)
-            {
-                Timeline.pulse();
-                timer = new Timer(_resolution);
-                timer.addEventListener(TimerEvent.TIMER, timerHandler);
-                timer.start();
-            }
-            var animStartTime:int = Timeline.currentTime + startDelay;
-            var insertIndex:int = -1;
-            for (var i:int = 0; i < delayedStartAnims.length; ++i)
-            {
-                var timeAtIndex:int = 
-                    delayedStartTimes[delayedStartAnims[i]];
-                if (animStartTime < timeAtIndex)
-                {
-                    insertIndex = i;
-                    break;
-                }
-            }
-            if (insertIndex >= 0)
-                delayedStartAnims.splice(insertIndex, 0, this);
-            else
-                delayedStartAnims.push(this);
-            delayedStartTimes[this] = animStartTime;
-        }
+            addToDelayedAnimations(startDelay);
         else
-        {
             start();
-        }
     }
     
     /**

    private var startTime:Number;
    // Track number of times repeated for use by repeatCount logic
    private var numRepeats:Number;

    private var easingFunction:Function;
    private static var defaultEaser:IEaser = new Sine(.5); 

    public function resume():void
    {
        _isPlaying = true;

        if (delayTime >= 0)
        {
            addToDelayedAnimations(delayTime);
        }
        else
        {
            startTime = intervalTime - _elapsedTime;
            if (_doReverse)
            {
                reverse();
                _doReverse = false;
            }
        }
    }
    
