         // be done without having to mouse click or mouse hover over this field.
         // Normally this is done in our focusIn handler by making sure there
         // is a selection.    
-        if (getFocus() == this)
+
+        // If the text has line-ending sequences such as LF or CR+LF, 
+        // a TextFlow with multiple paragraph is produced as the 'content'. 
+        // Otherwise all of the multi-line text got stuffed into one span in 
+        // one paragraph. But when you have a large paragraph 
+        // (i.e., a large TextBlock), FTE is slow to break the first 
+        // TextLine because it analyzes all of the text first.       
+        if (getFocus() == this || textHasLineBreaks(value))
         {
            content = importToFlow(value);
            return;
         }
-                    
+                                                              
         // Setting 'text' temporarily causes 'content' to become null.
         // Later, after the 'text' has been committed into the TextFlow,
         // getting 'content' will return the TextFlow.

                }
            }

            if (maxChars != 0)
            {
                var length1:int = text.length;
                var length2:int = textToInsert.length;
                if (length1 + length2 > maxChars)
                    textToInsert = textToInsert.substr(0, maxChars - length1);

    /**
     *  @private
     */
    private function textHasLineBreaks(s:String):Boolean
    {
        return s.indexOf("\n") != -1 || s.indexOf("\r") != -1;
    }
    
    /**
