         {
             _contentHeight = newContentHeight;
             
+            //trace("contentHeight", oldContentHeight, newContentHeight);
+            
             dispatchPropertyChangeEvent(
                 "contentHeight", oldContentHeight, newContentHeight);
-        }
-    }
-    
-    /**
-     *  @private
-     *  Called when the TextFlow dispatches a 'damage' event.
+        } 
+        
+        // If autoSize and there is overset text, remeasure.  contentHeight
+        // will not be the total height of the text unless composition is done 
+        // and scrolling is *on*.
+        if (_autoSize && isOverset(containerController))
+            invalidateSize();
+    }
+    
+    /**
+     *  @private
+     */
+    private function isOverset(controller:IContainerController):Boolean
+    {
+        // In some circumsances, the last controller gets all of the 
+        // content. In this case, test contentHeight vs. compositionHeight. 
+        // In other cases (the proper case) use textLengths to check.
+        return controller.contentHeight > controller.compositionHeight || 
+               (controller.absoluteStart + controller.textLength < 
+               controller.textFlow.textLength);
+    }
+    
+    /**
+     *  @private
+     *  Called when the TextFlow dispatches a 'damage' event.  The TextFlow
+     *  could have been modified interactively or programatically.
      */
     private function textFlow_damageHandler(
                         event:DamageEvent):void

    //--------------------------------------------------------------------------

    //----------------------------------
    //  clipAndEnableScrolling
    //----------------------------------
        

    }

    //----------------------------------
    //  percentWidth
    //----------------------------------
    
    /**
     *  @private
     */
    override public function set percentWidth(value:Number):void
    {
        if (value == percentWidth)
            return;
            
        super.percentWidth = value;
        
        // Re-measure.
        invalidateSize();
    }

    //----------------------------------
    //  restrict
    //----------------------------------

