      */
     protected function get unscaledWidth():Number
     {
-        return width / Math.abs(scaleX);
+        if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_0)
+            return width / Math.abs(scaleX);
+        else
+            return width;
     }
 
     /**

                }
            }

            var unscaledWidth:Number = scaleX == 0 ? 0 : width / scaleX;
            var unscaledHeight:Number = scaleY == 0 ? 0 : height / scaleY;
            // Use some hysteresis to prevent roundoff errors from
            // causing problems as we scale. This isn't a full solution,
            // but it helps.
            if (Math.abs(unscaledWidth - lastUnscaledWidth) < .00001)
                unscaledWidth = lastUnscaledWidth;
            if (Math.abs(unscaledHeight - lastUnscaledHeight) < .00001)
                unscaledHeight = lastUnscaledHeight;
            updateDisplayList(unscaledWidth,unscaledHeight);
            lastUnscaledWidth = unscaledWidth;
            lastUnscaledHeight = unscaledHeight;

     */
    mx_internal function setUnscaledHeight(value:Number):void
    {
        var newValue:Number = value;
        if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_0)
            newValue *= Math.abs(oldScaleY);
        if (_explicitHeight == newValue)
            return;

        // height can be pixel or percent, not both
        if (!isNaN(newValue))
            _percentHeight = NaN;
            
        _explicitHeight = newValue;

        // We invalidate size because locking in height
        // may change the measured width in flow-based components.
