         if (!mx_internal::styleChainInitialized)
             return;
 
-        var overset:Boolean = compose(unscaledWidth, unscaledHeight);
-        
+        // If both width and height are specified, then measure isn't called
+        // and measuredWidth/Height will remain 0.  In this case the compose
+        // will always be done here.  Otherwise measure will compose and set 
+        // measuredWidth/Height/isOverset.  If the unscaledWidth/Height is the
+        // same as measuredWidth/Height there is no need to redo the compose.        
+        if (stylesChanged || 
+                unscaledWidth != measuredWidth || 
+                    unscaledHeight != measuredHeight)
+            isOverset = compose(unscaledWidth, unscaledHeight);   
+            
         // Use scrollRect to clip overset lines.
         // But don't read or write scrollRect if you can avoid it,
         // because this causes Player 10.0 to allocate memory.
-        if (overset)
+        if (isOverset)
         {
             displayObject.scrollRect =
                 new Rectangle(0, 0, unscaledWidth, unscaledHeight);

        {
            displayObject.scrollRect = null;
            mx_internal::hasScrollRect = false;
        }
    }

    /**

        
        textFlowComposer.addTextLines(DisplayObjectContainer(displayObject));

        // Just recomposed so reset.
        stylesChanged = false;
        
        // Listen for "damage" events in case the textFlow is 
        // modified programatically.
        textFlow.addEventListener(DamageEvent.DAMAGE, textFlow_damageHandler);        

        return textFlowComposer.isOverset;
    }
    
    //--------------------------------------------------------------------------
    //
    //  Event handlers
    //
    //--------------------------------------------------------------------------
    
    /**
     *  @private
     *  Called when the TextFlow dispatches a 'damage' event
     *  to indicate it has been modified.
     */
    private function textFlow_damageHandler(
                            event:DamageEvent):void
    {
        //trace("damageHandler", "damageStart", event.damageStart, "damageLength", event.damageLength);
                
        // The text flow changed.  It could have been either/or content or
        // styles within the flow.
        contentChanged = true;
        stylesChanged = true;

        // Unless both width/height were specified, need to recalc size.
        if (isNaN(explicitWidth) || isNaN(explicitHeight))
            invalidateSize();
        
        invalidateDisplayList();  
    }    
}

}
