             if (isMeasureFixed()) 
             {            
                 autoSize = false;
-                
-                // Go large.  For performance reasons, want to avoid a scrollRect 
-                // whenever possible in drawBackgroundAndSetScrollRect().  This is
-                // particularly true for 1 line TextInput components.
-                measuredWidth = !isNaN(explicitWidth) ? explicitWidth :
-                    Math.ceil(calculateWidthInChars());
-                measuredHeight = !isNaN(explicitHeight) ? explicitHeight :
-                    Math.ceil(calculateHeightInLines());
+				
+				if (typicalText)
+				{
+					if (typicalTextChanged)
+					{
+						// If the text has linebreaks (CR, LF, or CF+LF)
+						// create a multi-paragraph TextFlow from it
+						// and use the TextFlowTextLineFactory to render it.
+						// Otherwise the StringTextLineFactory will put
+						// all of the lines into a single paragraph
+						// and FTE performance will degrade on a large paragraph.
+						if (_typicalText.indexOf("\n") != -1 || _typicalText.indexOf("\r") != -1)
+						{
+							_typicalTextFlow = staticPlainTextImporter.importToFlow(_typicalText);
+							// this helped get the factory to generate the same bounds as the
+							// composer
+							_typicalTextFlow.hostFormat = _textContainerManager.hostFormat;
+						}
+						else
+							_typicalTextFlow = null;
+						typicalTextChanged = false;
+					}
+					// if multiline...
+					if (_typicalTextFlow)
+					{
+						// create the factory if needed
+						if (!staticTextFlowFactory)
+						{
+							staticTextFlowFactory = new TextFlowTextLineFactory();
+							// set bounds to natural bounds
+							staticTextFlowFactory.compositionBounds = unbounded;
+						}
+						if (_typicalTextFlow.flowComposer)
+						{
+							_typicalTextFlow.flowComposer.swfContext = 
+								ISWFContext(embeddedFontContext);
+						}						
+						staticTextFlowFactory.swfContext = ISWFContext(embeddedFontContext);
+						// create the textlines
+						staticTextFlowFactory.createTextLines(tossTextLine, _typicalTextFlow);
+						// get the bounds
+						bounds = staticTextFlowFactory.getContentBounds();
+					}
+					else // single line
+					{
+						// create the factory if needed
+						if (!staticStringFactory)
+						{
+							staticStringFactory = new StringTextLineFactory();
+							// set bounds to natural bounds
+							staticStringFactory.compositionBounds = unbounded;
+						}
+						// create the textlines
+						staticStringFactory.text = _typicalText;
+						staticStringFactory.textFlowFormat = _textContainerManager.hostFormat;
+						staticStringFactory.swfContext = ISWFContext(embeddedFontContext);
+						staticStringFactory.createTextLines(tossTextLine);
+						// get the bounds
+						bounds = staticStringFactory.getContentBounds();
+					}			
+					
+					measuredWidth = Math.ceil(bounds.width);
+					measuredHeight = Math.ceil(bounds.height);					
+				}
+				else
+				{
+	                // Go large.  For performance reasons, want to avoid a scrollRect 
+	                // whenever possible in drawBackgroundAndSetScrollRect().  This is
+	                // particularly true for 1 line TextInput components.
+	                measuredWidth = !isNaN(explicitWidth) ? explicitWidth :
+	                    Math.ceil(calculateWidthInChars());
+	                measuredHeight = !isNaN(explicitHeight) ? explicitHeight :
+	                    Math.ceil(calculateHeightInLines());
+				}
             }
             else
             {
                 var composeWidth:Number;
                 var composeHeight:Number;
-                
-                var bounds:Rectangle;
                 
                 // If we're here, then at one or both of the width and height can
                 // grow to fit the text.  It is important to figure out whether

    import flash.ui.Keyboard;
    
    import flashx.textLayout.compose.ISWFContext;
    import flashx.textLayout.container.TextContainerManager;
    import flashx.textLayout.conversion.ConversionType;
    import flashx.textLayout.conversion.ITextExporter;

        //
        //--------------------------------------------------------------------------
        
		/**
		 *  @private
		 *  The composition bounds used when creating the TextLines.
		 */
		mx_internal var unbounded:Rectangle = new Rectangle(0, 0, NaN, NaN);
		
        /**
         *  @private
         *  The hostFormat object in the _textContainerManager determines the 
