             _widthInChars = value;
             widthInCharsChanged = true;
             
-            widthConstraint = NaN;
+            if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
+                setEstimatedSize(NaN, estimatedHeight);
             
             invalidateProperties();
             invalidateSize();

        
        /**
         *  @private
         *  Cache the width constraint as set by the layout in setLayoutBoundsSize()
         *  so that text reflow can be calculated during a subsequent measure pass.
         */
        private var widthConstraint:Number = NaN;
        
        /**
         *  @private
         *  Cache the height constraint as set by the layout in setLayoutBoundsSize()
         *  so that text reflow can be calculated during a subsequent measure pass.
         */
        private var heightConstraint:Number = NaN;
        
        /**
         *  @private
         *  If the selection was via the selectRange() or selectAll() api, remember
         *  that until the next selection is set, either interactively or via the
         *  API.

            // between a measured width/height that is the same as the
            // constrained width/height to know whether that dimension can
            // be sized or must be fixed at the constrained value.                
            if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
                setEstimatedSize(estimatedWidth, height);
			
			if (FlexVersion.compatibilityVersion >= FlexVersion.VERSION_4_5)
			{
				var newEstimates:Boolean = false;
				var cw:Number = estimatedWidth;
				var ch:Number = estimatedHeight;
				var oldcw:Number = cw;
				var oldch:Number = ch;
				// we got lied to, probably the constraints weren't accurate or
				// couldn't be computed
				if (!isNaN(width))
				{
					if (isNaN(estimatedWidth) || width != estimatedWidth)
					{
						cw = width;
						newEstimates = true;
					}
				}
				// we got lied to, probably the constraints weren't accurate or
				// couldn't be computed
				if (!isNaN(height))
				{
					if (isNaN(estimatedHeight) || height != estimatedHeight)
					{
						ch = height;
						newEstimates = true;
					}
				}
				if (newEstimates)
				{
					setEstimatedSize(cw, ch);
					UIComponentGlobals.layoutManager.validateClient(this, true);
					setEstimatedSize(oldcw, oldch, false);
				}
			}
            
            super.setLayoutBoundsSize(width, height, postLayoutTransform);
            
            if (FlexVersion.compatibilityVersion < FlexVersion.VERSION_4_5)
            {
                // Did we already constrain the width?
                if (estimatedWidth == width)
                    return;
                
                // No reflow for explicit lineBreak
                if (getStyle("lineBreak") == "explicit")
                    return;
                
                // If we don't measure.
                // Call super so we don't call the override
                // and set autoSize to false;
                if (super.canSkipMeasurement())
                    return;
                
                if (!isNaN(explicitHeight))
                    return;
                
                // We support reflow only in the case of constrained width and
                // unconstrained height. Note that we compare with measuredWidth,
                // as for example the RichEditableText can be
                // constrained by the layout with "left" and "right", but the
                // container width itself may not be constrained and it would depend
                // on the element's measuredWidth.
                var constrainedWidth:Boolean = !isNaN(width) && (width != measuredWidth) && (width != 0); 
                if (!constrainedWidth)
                    return;
                
                // We support reflow only when we don't have a transform.
                // We could add support for scale, but not skew or rotation.
                if (postLayoutTransform && hasComplexLayoutMatrix)
                    return;
                
                setEstimatedSize(width, estimatedHeight);
                
                invalidateSize();
            }            
        }
        
        /**
