 
 package mx.effects
 {
+import mx.effects.interpolation.IInterpolator;
+import mx.effects.interpolation.NumberArrayInterpolator;
+
+import spark.effects.KeyFrame;
+import spark.effects.MotionPath;
+    
     
 /**
  * This class is used to hold the name of a property and the values that
  * that property will assume over time for instances of the FxAnimate
- * effect, or subclasses of that effect.
- * 
- * @see FxAnimate
+ * effect, or subclasses of that effect. This class is a simple utility
+ * subclass of MotionPath, setting up two keyframes to hold the 
+ * <code>valueFrom</code>, <code>valueTo</code>, and
+ * <code>valueBy</code> properties.
  *  
  *  @langversion 3.0
  *  @playerversion Flash 10
  *  @playerversion AIR 1.5
  *  @productversion Flex 4
  */
-public class AnimationProperty
+public class AnimationProperty extends MotionPath
 {
+ 
+    //--------------------------------------------------------------------------
+    //
+    //  Constructor
+    //
+    //--------------------------------------------------------------------------
+
     /**
-     * The name of the property to be animated. The property can
-     * be either a property of the target object in the animation
-     * or a style.
-     *  
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    public var property:String;
-    
-    private var _valueFrom:Object;
+     * Constructs an AnimationProperty object. The from/to/by values are used
+     * to construct a simple one-keyframe MotionPath where the from value
+     * is defined in the MotionPath object itself and the single keyframe.
+     * 
+     * @param property The name of the property being animated
+     * @param valueFrom The value that the animation starts from
+     * @param valueTo The value that the animation ends on
+     * @param valueBy An optional parameter that specifies the delta with
+     * which to calculate either the from or to values.
+     */    
+    public function AnimationProperty(property:String = null, valueFrom:Object = null,
+        valueTo:Object = null, valueBy:Object = null)
+    {
+        super();
+        this.property = property;
+        keyframes = [new KeyFrame(0, valueFrom), new KeyFrame(1, valueTo, valueBy)];
+        if (valueFrom is Array && valueTo is Array)
+            interpolator = NumberArrayInterpolator.getInstance();
+    }
+
+    //--------------------------------------------------------------------------
+    //
+    //  Properties
+    //
+    //--------------------------------------------------------------------------
+
     /**
-     * The value that the named property will animate from.
+     * The starting value for the property during the animation.
      * 
      * <p>Null or NaN (in the case of Numbers) element values indicate that a
      * value must be determined dynamically at runtime, either by
      * getting the value from the target property directly or calculating
-     * it if the other value is valid and there is also a valid <code>valueBy</code>
-     * value supplied.</p>
+     * it if the other value is valid and there is also a valid 
+     * <code>valueBy</code> value supplied.</p>
      *  
      *  @langversion 3.0
      *  @playerversion Flash 10

     */
    public function get valueTo():Object
    {
        return _valueTo;
    }
    public function set valueTo(value:Object):void
    {
        _valueTo = value;
    }

    private var _valueBy:Object;
    /**
     * Optional property which specifies the delta used to calculate
     * either the <code>valueFrom</code> or <code>valueTo</code> value.

     */
    public function get valueFrom():Object
    {
        return keyframes[0].value;
    }
    public function set valueFrom(value:Object):void
    {
        keyframes[0].value = value;
    }

    /**
     * The value that the named property will animate to.
     * 
