         
     /**
      *  @private
+     *  The generation of the text flow that last reported its content
+     *  bounds. 
+     */
+    private var lastContentBoundsGeneration:int = 0;  // 0 means not set
+    
+    /**
+     *  @private
      *  True if TextOperationEvent.CHANGING and TextOperationEvent.CHANGE 
      *  events should be dispatched.
      */


    /**
     *  @private
     *  Called when the TextContainerManager dispatches a 'compositionComplete'
     *  event when it has recomposed the text into TextLines.
     */

        //trace("compositionComplete");
                
        var oldContentWidth:Number = _contentWidth;
        var oldContentHeight:Number = _contentHeight;

        var newContentBounds:Rectangle = 
            _textContainerManager.getContentBounds();
        
        // Try to prevent the scroller from getting into a loop while
        // adding/removing scroll bars.
        if (_textFlow && clipAndEnableScrolling)
            adjustContentBoundsForScroller(newContentBounds);
        
        var newContentWidth:Number = newContentBounds.width;        
        var newContentHeight:Number = newContentBounds.height;
        
        // TODO:(cframpto) handle blockProgression == RL
        
        if (newContentWidth != oldContentWidth)
        {
            _contentWidth = newContentWidth;
            
            //trace("composeWidth", _textContainerManager.compositionWidth, "contentWidth", oldContentWidth, newContentWidth);

            // If there is a scroller, this triggers the scroller layout.
            dispatchPropertyChangeEvent(
                "contentWidth", oldContentWidth, newContentWidth);
        }
        
        if (newContentHeight != oldContentHeight)
        {
            _contentHeight = newContentHeight;
            
            //trace("composeHeight", _textContainerManager.compositionHeight, "contentHeight", oldContentHeight, newContentHeight);
            
            // If there is a scroller, this triggers the scroller layout.
            dispatchPropertyChangeEvent(
