         if (!mx_internal::styleChainInitialized)
             return;
 
-        compose(unscaledWidth, unscaledHeight);
+        var overset:Boolean = compose(unscaledWidth, unscaledHeight);
+
+        // Use scrollRect to clip overset lines.
+        // But don't set scrollRect to null if it is already null,
+        // because this causes Player 10.0 to allocate memory.
+        if (overset)
+        {
+            displayObject.scrollRect =
+                new Rectangle(0, 0, unscaledWidth, unscaledHeight);
+        }
+        else if (displayObject.scrollRect)
+        {
+            displayObject.scrollRect = null;
+        }
     }
 
     //--------------------------------------------------------------------------

        setTracking(elementFormat);
        elementFormat.typographicCase = getStyle("typographicCase");
        
        textBlockComposer.removeTextLines(
            DisplayObjectContainer(displayObject));
        
        var bounds:Rectangle = textBlockComposer.requestedBounds;
        bounds.x = 0;
        bounds.y = 0;
        bounds.width = width;
        bounds.height = height;

        textBlockComposer.lineHeight = getStyle("lineHeight");
        textBlockComposer.paddingBottom = getStyle("paddingBottom");
        textBlockComposer.paddingLeft = getStyle("paddingLeft");

        elementFormat.alignmentBaseline = getStyle("alignmentBaseline");
        elementFormat.alpha = getStyle("textAlpha");
        elementFormat.baselineShift = getStyle("baselineShift");
        elementFormat.breakOpportunity = getStyle("breakOpportunity");
        elementFormat.color = getStyle("color");
        elementFormat.digitCase = getStyle("digitCase");
        elementFormat.digitWidth = getStyle("digitWidth");
