     //  bounds
     //----------------------------------
 
-    private var _bounds:Rectangle;
-
     private function getBounds():Rectangle
     {
-        if (_bounds)
-            return _bounds;
-
-		// First, allocate temporary bounds, as getBoundingBox() requires
-		// natual bounds to calculate a scaling factor
-		_bounds = new Rectangle(0, 0, 1, 1);
-
-		// Pass in the same size to getBoundingBox
-		// so that the scaling factor is (1, 1).
-		_bounds = getBoundingBox(1, 1, null /*Matrix*/);
-		return _bounds;
+		return segments ? segments.getBounds() : new Rectangle();
     }
 
     //--------------------------------------------------------------------------

        // an extreme that pushes the bounds.
        var strokeExtents:Rectangle = getStrokeExtents();
        pathBBox.inflate(strokeExtents.right, strokeExtents.bottom);

        if (strokeSettings.joints != "miter" || segments.length < 2)
        {
            // TODO (egeorgie): Will overshoot for "bevel"
            // by the assumed roundness of the joints.

            var rcBounds:Rectangle = getBounds();
            var sx:Number = rcBounds.width == 0 ? 1 : width / rcBounds.width;
            var sy:Number = rcBounds.height == 0 ? 1 : height / rcBounds.height;
			if (segments)
            	segments.generateGraphicsPath(graphicsPath, drawX, drawY, sx, sy);
            graphicsPathChanged = false;
        }
         
        g.drawPath(graphicsPath.commands, graphicsPath.data, winding);
    }

    /**
     * @inheritDoc
     *  
