         transformInstance.projectionX = projectionX;
         transformInstance.projectionY = projectionY;
 
-
-        
-        transformInstance.transformCenter = 
-            computeTransformCenterForTarget(instance.target);
+        // If we're in a transition and we've captured the center already, use it.
+        // Otherwise, calculate it.
+        // TODO (chaase): double-check that calling play() directly on an effect
+        // that was previously used in a Transition won't mistakenly think that it's
+        // now being run in a transition.
+        if (propertyChangesArray != null && 
+            transformCenterPerTarget[instance.target] !== undefined)
+        {
+            transformInstance.transformCenter = 
+                transformCenterPerTarget[instance.target];
+        }
+        else
+        {
+            transformInstance.transformCenter = 
+                computeTransformCenterForTarget(instance.target);
+        }
         
         // Need to hide these properties from the superclass, as they are
         // already handled in our single instance. But restore them afterwards

    // end values
    // TODO (chaase): More correct approach might be to animate the 
    // transform center between start and end
    private var transformCenterPerTarget:Dictionary = new Dictionary(true);

    /**

            applyValues(propChanges, targets, false);
            super.mx_internal::applyEndValues(propChanges, targets);
        }
        if (targets != null)
            for (var i:int = 0; i < targets.length; ++i)
                if (transformCenterPerTarget[targets[i]] !== undefined)
                    delete transformCenterPerTarget[targets[i]];
    }

    /**
