         return performCheck && hasComplexLayoutMatrix ? layoutFeatures.layoutMatrix : null;
     }
 
-    static private var _strokeExtents:Point = new Point();
-
-    // FIXME (egeorgie): return rectangle instead so that the function can
-    // correctly indicate the left, right, top and bottom extents. Right
-    // now we assume they are the same on both sides.
-    /**
-     *  TODO 
-     *   
-     *  @langversion 3.0
-     *  @playerversion Flash 10
-     *  @playerversion AIR 1.5
-     *  @productversion Flex 4
-     */
-    // FIXME (egeorgie) : Needs ASDoc FLEXDOCS-1032
-    protected function getStrokeExtents(postLayoutTransform:Boolean = true):Point
-    {
+    static mx_internal var _strokeExtents:Rectangle = new Rectangle();
+
+    /**
+     *  Returns the amount of pixels occupied by the stroke on each side
+	 *  of the element's bounds.
+	 * 
+	 *  @param postLayoutTransform - if true, the stroke extents are calculated
+	 *  in parent coordinate space (after applying the element's transformations).
+	 * 
+	 *  @return Rectangle of the stroke extents. The rectangle's <code>left</code>,
+	 *  <code>right</code>, <code>top</code> and <code>bottom</code> properties
+	 *  represent the stroke extent for the respective side of the element's
+	 *  bounding box.
+     *
+     *  @langversion 3.0
+     *  @playerversion Flash 10
+     *  @playerversion AIR 1.5
+     *  @productversion Flex 4
+     */
+    protected function getStrokeExtents(postLayoutTransform:Boolean = true):Rectangle
+    {
+        _strokeExtents.x = 0;
+        _strokeExtents.y = 0;
+        _strokeExtents.width = 0;
+        _strokeExtents.height = 0;
         return _strokeExtents;
     }
 

    public function getLayoutBoundsY(postLayoutTransform:Boolean = true):Number
    {
        // Take stroke into account:
        // FIXME (egeorgie): We assume that the stroke extents are even on both sides.
        // and that's not necessarily true.
        var stroke:Number = -getStrokeExtents(postLayoutTransform).y * 0.5;

        var m:Matrix = getComplexMatrix(postLayoutTransform);
        if (!m)

     */
    public function getBoundsXAtSize(width:Number, height:Number, postLayoutTransform:Boolean = true):Number
    {
        var strokeExtents:Rectangle = getStrokeExtents(postLayoutTransform);
        var m:Matrix = getComplexMatrix(postLayoutTransform); 
        if (!m)
            return strokeExtents.left + this.measuredX + this.x;

        if (!isNaN(width))
            width -= strokeExtents.width;

        if (!isNaN(height))
            height -= strokeExtents.height;

        // Calculate the width and height pre-transform:
        var newSize:Point = MatrixUtil.fitBounds(width, height, m,
