         finishEffect();
         if (affectsConstraints)
             reenableConstraints();
-    }
-    
+        if (autoRemoveTarget)
+            removeDisappearingTarget();
+    }
+
+    /**
+     * Adds a target which is not in the state we are transitioning
+     * to. This is the partner of removeDisappearingTarget(), which removes
+     * the target when this effect is finished if necessary.
+     * Note that if a RemoveAction effect is playing in a CompositeEffect,
+     * then the adding/removing is already happening and this function
+     * will noop the add.
+     */
+    private function addDisappearingTarget():void
+    {
+        needsRemoval = false;
+        if (propertyChanges)
+        {
+            // Check for non-null parent ensures that we won't double-remove
+            // items, such as if there is a RemoveAction effect working on
+            // the same target
+            if ("parent" in target && !target.parent)
+            {
+                var parentStart:* = propertyChanges.start["parent"];;
+                var parentEnd:* = propertyChanges.end["parent"];;
+                if (parentStart && !parentEnd)
+                {
+                    if (parentStart is Group)
+                        parentStart.addItem(target);
+                    else
+                        parentStart.addChild(target);
+                    needsRemoval = true;
+                }
+            }
+            else if ("elementHost" in target && !target.elementHost)
+            {
+                var hostStart:* = propertyChanges.start["elementHost"];
+                var hostEnd:* = propertyChanges.end["elementHost"];
+                if (hostStart && !hostEnd)
+                {
+                    hostStart.addItem(target);
+                    needsRemoval = true;
+                }
+            }
+        }
+    }
+
+    /**
+     * Removes a target which is not in the state we are transitioning
+     * to. This is the partner of addDisappearingTarget(), which re-adds
+     * the target when this effect is played if necessary.
+     * Note that if a RemoveAction effect is playing in a CompositeEffect,
+     * then the adding/removing is already happening and this function
+     * will noop the removal.
+     */
+    private function removeDisappearingTarget():void
+    {
+        if (needsRemoval && propertyChanges)
+        {
+            // Check for non-null parent ensures that we won't double-remove
+            // items, such as if there is a RemoveAction effect working on
+            // the same target
+            if ("parent" in target && target.parent)
+            {
+                var parentStart:* = propertyChanges.start["parent"];;
+                var parentEnd:* = propertyChanges.end["parent"];;
+                if (parentStart && !parentEnd)
+                {
+                    if (parentStart is Group)
+                        parentStart.removeItem(target);
+                    else
+                        parentStart.removeChild(target);
+                }
+            }
+            else if ("elementHost" in target && target.elementHost)
+            {
+                var hostStart:* = propertyChanges.start["elementHost"];
+                var hostEnd:* = propertyChanges.end["elementHost"];
+                if (hostStart && !hostEnd)
+                    hostStart.removeItem(target);
+            }
+        }
+    }
+
     private var constraintsHolder:Object;
     
     private function reenableConstraint(name:String):void

import flash.events.TimerEvent;
import flash.utils.Timer;

import flex.effects.Animation;
import flex.effects.PropertyValuesHolder;
import flex.effects.easing.IEaser;


    private var reverseAnimation:Boolean;
    
    private var needsRemoval:Boolean;
    
    //--------------------------------------------------------------------------
    //
    // Properties
