      */
     mx_internal function setUnscaledHeight(value:Number):void
     {
-        var scaledValue:Number = value * Math.abs(oldScaleY);
-        if (_explicitHeight == scaledValue)
+        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(scaledValue))
+        if (!isNaN(newValue))
             _percentHeight = NaN;
             
-        _explicitHeight = scaledValue;
+        _explicitHeight = newValue;
 
         // We invalidate size because locking in height
         // may change the measured width in flow-based components.

    {
        if (_scaleX != oldScaleX)
        {
            var scalingFactorX:Number = Math.abs(_scaleX / oldScaleX);
            if (!isNaN(explicitMinWidth))
                explicitMinWidth *= scalingFactorX;
            if (!isNaN(explicitWidth))
                explicitWidth *= scalingFactorX;
            if (!isNaN(explicitMaxWidth))
                explicitMaxWidth *= scalingFactorX;

            _width *= scalingFactorX;

            super.scaleX = oldScaleX = _scaleX;
        }

        if (_scaleY != oldScaleY)
        {
            var scalingFactorY:Number = Math.abs(_scaleY / oldScaleY);
            if (!isNaN(explicitMinHeight))
                explicitMinHeight *= scalingFactorY;
            if (!isNaN(explicitHeight))
                explicitHeight *= scalingFactorY;
            if (!isNaN(explicitMaxHeight))
                explicitMaxHeight *= scalingFactorY;

            _height *= scalingFactorY;

            super.scaleY = oldScaleY = _scaleY;
        }


        // If an object's width and height have been explicitly specified,
        // then the explicitWidth and explicitHeight properties contain
        // Numbers (as opposed to NaN)
        return !isNaN(explicitWidth) && !isNaN(explicitHeight);
    }

    /**
     *  @private
     */
    private function measureSizes():Boolean
    {
        var changed:Boolean = false;

        if (!invalidateSizeFlag)
            return changed;

        var scalingFactor:Number;
        var newValue:Number;

        if (skipMeasure())
        {
            invalidateSizeFlag = false;
