      */
     public function end():void
     {
+        // TODO (chaase): call removal utility instead of this code
+        // Make sure to remove any references on the delayed lists
+        if (startDelay > 0 && delayedStartAnims.length > 0)
+            for (var i:int = 0; i < delayedStartAnims.length; ++i)
+            {
+                if (this == delayedStartAnims[i])
+                {
+                    delete delayedStartTimes[this];
+                    delayedStartAnims.splice(i, 1);
+                    break;
+                }
+            }
+
         // Note that we are potentially sending out this event to effects
         // whose Animation is not yet running (for example, if we're autoReversing
         // a transition and then skipping past the first effect). 

            // Keep starting animations unless our sorted lists return
            // animations that start past the current time
            if (animStartTime < Timeline.currentTime)
                anim.start();
            else
                break;
        }

                var startTime:Number = keyframes[0].time;
                keyframes.splice(0, 0, new Keyframe(0, null));
                keyframes.splice(1, 0, new Keyframe(startTime-1, null));
                if (playReversed)
                {
                    // Want to hold *next* value when playing backwards
                    keyframes[0].value = keyframes[2].value;
                    keyframes[1].value = keyframes[2].value;
                }
            }
            for (j = 1; j < keyframes.length; ++j)
            {
