         return _winding; 
     }
 
+    //----------------------------------
+    //  bounds
+    //----------------------------------
+
+    private var _bounds:Rectangle;
+
+    private function getBounds():Rectangle
+    {
+        if (_bounds)
+            return _bounds;
+
+        var s:Shape = new Shape();
+        
+        // Draw element at (0,0):
+        drawElement(s.graphics);
+
+        // Get bounds
+        _bounds = s.getRect(s);
+
+        return _bounds;
+    }
+
     //--------------------------------------------------------------------------
     //
     //  Overridden methods
     //
     //--------------------------------------------------------------------------
-    
-    private var _bounds:Rectangle;
-    
-    override public function get bounds():Rectangle
-    {
-        if (_bounds == null)
-        {
-            var s:Shape = new Shape();
-            
-            // Draw element at (0,0):
-            drawElement(s.graphics);
-
-            // Get bounds
-            _bounds = s.getRect(s);
-        }
-
-        var result:Rectangle = _bounds.clone();
-        if (!isNaN(explicitWidth))
-            result.width = explicitWidth;
-        
-        if (!isNaN(explicitHeight))
-            result.height = explicitHeight; 
-
-        return result;
-    }
-    
+
+	/**
+	 *  @inheritDoc
+	 */
+    override protected function skipMeasure():Boolean
+    {
+        // Don't measure when bounds are up to date.
+        return _bounds != null;
+    }
+
+	/**
+	 *  @inheritDoc
+	 */
+    override protected function measure():void
+    {
+        var bounds:Rectangle = getBounds();
+        measuredWidth = bounds.width;
+        measuredHeight = bounds.height;
+        measuredX = bounds.left;
+        measuredY = bounds.top;
+    }
+ 
     //----------------------------------
     //  scaleX
     //----------------------------------

        boundsChanged();
    }
    
    private function boundsChanged(): void {
        // Clear our cached measurement and data values
        clearBounds();
        _data = null;

    {
        super();
    }
    
    //--------------------------------------------------------------------------
    //
    //  Variables
    //
    //--------------------------------------------------------------------------

    /**
     *  Vars holding the last scale set by setActualSize in order to
     *  resize the path.  Used to detect when setActualSize should
     *  call invalidateDisplayList(). 
     */    
    private var lastActualScaleX:Number = 0;
    private var lastActualScaleY:Number = 0;
    
    //--------------------------------------------------------------------------
    //
