      */
     public var transformZ:Number;
 
+    //----------------------------------
+    //  translationX
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the translationX property
+     */
+    private var _translationX:MotionPath;
+    /**
+     * The MotionPath describing the change in <code>x</code> during the effect
+     */
+    public function get translationX():MotionPath
+    {
+        return _translationX;
+    }
+    public function set translationX(value:MotionPath):void
+    {
+        _translationX = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _translationX.property = "translationX";
+        }
+    }
+    
+    //----------------------------------
+    //  translationY
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the translationY property
+     */
+    private var _translationY:MotionPath;
+    /**
+     * The MotionPath describing the change in <code>y</code> during the effect
+     */
+    public function get translationY():MotionPath
+    {
+        return _translationY;
+    }
+    public function set translationY(value:MotionPath):void
+    {
+        _translationY = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _translationY.property = "translationY";
+        }
+    }
+    
+    //----------------------------------
+    //  translationX
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the translationZ property
+     */
+    private var _translationZ:MotionPath;
+    /**
+     * The MotionPath describing the change in <code>z</code> during the effect
+     */
+    public function get translationZ():MotionPath
+    {
+        return _translationZ;
+    }
+    public function set translationZ(value:MotionPath):void
+    {
+        _translationZ = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _translationZ.property = "translationZ";
+        }
+    }
+    
+    //----------------------------------
+    //  rotationX
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the rotationX property
+     */
+    private var _rotationX:MotionPath;
+    /**
+     * The MotionPath describing the change in rotation around the x
+     * axis during the effect
+     */
+    public function get rotationX():MotionPath
+    {
+        return _rotationX;
+    }
+    public function set rotationX(value:MotionPath):void
+    {
+        _rotationX = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _rotationX.property = "rotationX";
+        }
+    }
+    
+    //----------------------------------
+    //  rotationY
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the rotationY property
+     */
+    private var _rotationY:MotionPath;
+    /**
+     * The MotionPath describing the change in rotation around the y
+     * axis during the effect
+     */
+    public function get rotationY():MotionPath
+    {
+        return _rotationY;
+    }
+    public function set rotationY(value:MotionPath):void
+    {
+        _rotationY = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _rotationY.property = "rotationY";
+        }
+    }
+    
+    //----------------------------------
+    //  rotationZ
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the rotationZ property
+     */
+    private var _rotationZ:MotionPath;
+    /**
+     * The MotionPath describing the change in rotation around the z
+     * axis during the effect
+     */
+    public function get rotationZ():MotionPath
+    {
+        return _rotationZ;
+    }
+    public function set rotationZ(value:MotionPath):void
+    {
+        _rotationZ = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _rotationZ.property = "rotationZ";
+        }
+    }
+    
+    //----------------------------------
+    //  scaleX
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the scaleX property
+     */
+    private var _scaleX:MotionPath;
+    /**
+     * The MotionPath describing the change in scale in the x direction
+     * during the effect
+     */
+    public function get scaleX():MotionPath
+    {
+        return _scaleX;
+    }
+    public function set scaleX(value:MotionPath):void
+    {
+        _scaleX = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _scaleX.property = "scaleX";
+        }
+    }
+    
+    //----------------------------------
+    //  scaleY
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the scaleY property
+     */
+    private var _scaleY:MotionPath;
+    /**
+     * The MotionPath describing the change in scale in the y direction
+     * during the effect
+     */
+    public function get scaleY():MotionPath
+    {
+        return _scaleY;
+    }
+    public function set scaleY(value:MotionPath):void
+    {
+        _scaleY = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _scaleY.property = "scaleY";
+        }
+    }
+    
+    //----------------------------------
+    //  scaleZ
+    //----------------------------------
+
+    /**
+     * @private
+     * Storage for the scaleZ property
+     */
+    private var _scaleZ:MotionPath;
+    /**
+     * The MotionPath describing the change in scale in the z direction
+     * during the effect
+     */
+    public function get scaleZ():MotionPath
+    {
+        return _scaleZ;
+    }
+    public function set scaleZ(value:MotionPath):void
+    {
+        _scaleZ = value;
+        if (value)
+        {
+            transformPropertiesSet = true;
+            _scaleZ.property = "scaleZ";
+        }
+    }
+    
     //--------------------------------------------------------------------------
     //
     // Methods

        var transformInstance:AnimateTransformInstance =
            AnimateTransformInstance(instance);
        
        // Feed startDelay directly into keyframe times
        if (animationProperties)
        {            
            var instanceAnimProps:Array = [];
            for (i = 0; i < animationProperties.length; ++i)
            {
                instanceAnimProps[i] = animationProperties[i].clone();
                var mp:MotionPath = MotionPath(instanceAnimProps[i]);
                if (mp.keyframes)
                {
                    for (var j:int = 0; j < mp.keyframes.length; ++j)
                    {
                        var kf:KeyFrame = KeyFrame(mp.keyframes[j]);
                        // NaN for the time is used by AnimationProperty as a
                        // placeholder for the end time of the effect
                        if (isNaN(kf.time))
                            kf.time = duration;

        // so that they are still available for reuse upon re-playing the effect
        var tmpStartDelay:Number = startDelay;
        startDelay = 0;
        var tmpAnimProps:Array = motionPaths;
        motionPaths = null;
        super.initInstance(instance);
        startDelay = tmpStartDelay;
        motionPaths = tmpAnimProps;
    }

    /**
