         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);

     */
    private var textInvalid:Boolean = false;
        
    //--------------------------------------------------------------------------
    //
    //  Overridden properties

    override protected function updateDisplayList(unscaledWidth:Number, 
                                                  unscaledHeight:Number):void
    {
        //trace("updateDisplayList", unscaledWidth, unscaledHeight);
        
        super.updateDisplayList(unscaledWidth, unscaledHeight);
        
        // The updateDisplayList() method of a GraphicElement can get called
