         *   the beginning (playing effects with no duration or skipping,
         *   then playing and setting the appropriate playheadTime for 
         *   the correct child effect)
-        *  
-        *  @langversion 3.0
-        *  @playerversion Flash 9
-        *  @playerversion AIR 1.1
-        *  @productversion Flex 3
         */
-        // FIXME (chaase): handle startDelay     
-        
-        if (value < playheadTime)
+        var compositeDur:Number = Sequence(effect).compositeDuration;
+        var firstCycleDur:Number = compositeDur + startDelay + repeatDelay;
+        var laterCycleDur:Number = compositeDur + repeatDelay;
+        // totalDur is only sensible/used when repeatCount != 0
+        var totalDur:Number = firstCycleDur + laterCycleDur * (repeatCount - 1);
+        var childPlayheadTime:Number;
+        if (value <= firstCycleDur)
+        {
+            childPlayheadTime = Math.min(value - startDelay, compositeDur);
+            playCount = 1;
+        }
+        else
+        {
+            if (value >= totalDur && repeatCount != 0)
+            {
+                childPlayheadTime = compositeDur;
+                playCount = repeatCount;
+            }
+            else
+            {
+                var valueAfterFirstCycle:Number = value - firstCycleDur;
+                childPlayheadTime = valueAfterFirstCycle % laterCycleDur;
+                childPlayheadTime = Math.min(childPlayheadTime, compositeDur);
+                playCount = 1 + valueAfterFirstCycle / laterCycleDur;
+            }
+        }
+        
+        if (childPlayheadTime < prevPlayheadTime)
         {
             // FIXME (chaase): Handle seeking back in time
             // idea: Maybe once we get playing a sequence in reverse

     */
    override public function set playheadTime(value:Number):void
    {
        /**
        * Behavior of this command depends on what state we're in:
        * - if we're in a startDelay, then cut down the playheadTime by
        * the amount of time we have left to sleep

                    var startTime:Number = cumulativeDuration;
                    var endTime:Number = cumulativeDuration + 
                        instances[0].actualDuration;
                    if (childPlayheadTime < endTime)
                    {
                        finishWhenDone = false;
                        // These are the effects that should be active
