     //
     //--------------------------------------------------------------------------
 
+    // By default, the overall AnimateTransform effect (when instantiated by
+    // the leaf-node subclasses Move, Move3D, Rotate, etc.) uses Linear easing,
+    // but each keyframe pair uses the regular Sine(.5) easing. This mimics the
+    // behavior of other effects that just have Sine(.5) easing for their motion.
+    private static var linearEaser:Linear = new Linear();
+    
+    // This variable is used to detect whether the transform effect was created
+    // via one of the known subclasses (Move, Move3D, Rotate, etc.) or whether it
+    // was created directly (AnimateTransform or AnimateTransform3D). If created
+    // directly, assume the developer knows what they're doing and pass the
+    // easer onto the effect instance. Otherwise, use the easing approach 
+    // described in the comment for linearEaser above.
+    mx_internal var transformEffectSubclass:Boolean = false;
+    
     // FIXME (chaase): Is weak Dictionary sufficient to hold these values and then
     // dispense with them appropriately? What if we get interrupted before we
     // clear the map?

import spark.core.IGraphicElement;
import spark.effects.animation.Keyframe;
import spark.effects.animation.MotionPath;
import spark.effects.supportClasses.AnimateTransformInstance;

use namespace mx_internal;

        super.initInstance(instance);
        startDelay = tmpStartDelay;
        motionPaths = tmpAnimProps;
        // For transform effect subclasses (Move, Move3D, Rotate, etc.), 
        // override default easer on the instance. We want the overall easing
        // to be Linear, with the Keyframes controlling the per-interval easing
        if (transformEffectSubclass)
            transformInstance.easer = linearEaser;
    }

    /**
