         //trace("compositionComplete");
                 
         var oldContentWidth:Number = _contentWidth;
+        var oldContentHeight:Number = _contentHeight;
 
         var newContentBounds:Rectangle = 
             _textContainerManager.getContentBounds();
-        var newContentWidth:Number = newContentBounds.width;
+        
+        // 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
         
-        // TODO:(cframpto) Figure out if we still need these checks.
-        // Error correction for rounding errors.  It shouldn't be so but
-        // the contentWidth can be slightly larger than the requested
-        // compositionWidth.
-        if (newContentWidth > _textContainerManager.compositionWidth &&
-            Math.round(newContentWidth) == 
-            _textContainerManager.compositionWidth)
-        { 
-            newContentWidth = _textContainerManager.compositionWidth;
-        }
-
         if (newContentWidth != oldContentWidth)
         {
             _contentWidth = newContentWidth;
             
-            //trace("contentWidth", oldContentWidth, newContentWidth);
+            //trace("composeWidth", _textContainerManager.compositionWidth, "contentWidth", oldContentWidth, newContentWidth);
 
             // If there is a scroller, this triggers the scroller layout.
             dispatchPropertyChangeEvent(
                 "contentWidth", oldContentWidth, newContentWidth);
         }
         
-        var oldContentHeight:Number = _contentHeight;
-        var newContentHeight:Number = newContentBounds.height;
-
-        // Error correction for rounding errors.  It shouldn't be so but
-        // the contentHeight can be slightly larger than the requested
-        // compositionHeight.  
-        if (newContentHeight > _textContainerManager.compositionHeight &&
-            Math.round(newContentHeight) == 
-            _textContainerManager.compositionHeight)
-        { 
-            newContentHeight = _textContainerManager.compositionHeight;
-        }
-            
         if (newContentHeight != oldContentHeight)
         {
             _contentHeight = newContentHeight;
             
-            //trace("contentHeight", oldContentHeight, newContentHeight);
+            //trace("composeHeight", _textContainerManager.compositionHeight, "contentHeight", oldContentHeight, newContentHeight);
             
             // If there is a scroller, this triggers the scroller layout.
             dispatchPropertyChangeEvent(

        
    /**
     *  @private
     *  True if TextOperationEvent.CHANGING and TextOperationEvent.CHANGE 
     *  events should be dispatched.
     */

        if (textChanged || textFlowChanged || contentChanged)
        {
            lastGeneration = _textFlow ? _textFlow.generation : 0;
            lastContentBoundsGeneration = 0;
            
            // Handle the case where the initial text, textFlow or content 
            // is displayed as a password.
            if (displayAsPassword)
