         {
             var textLine:TextLine = TextLine(getChildAt(i));
             
-            // Adjust text width to include indents and margins so that
-            // autoSize will be correct.
-            var width:Number = textLine.x + textLine.textWidth;
-            if (autoSize == TextFieldAutoSize.NONE || !wordWrap) 
-                 width += rightMargin;
+            var width:Number = textLine.x + textLine.textWidth + rightMargin;
             
             // Only align if there is width to do so.
-            if (leftAligned || width > alignWidth)
+            if (leftAligned || width > innerWidth)
                 textLine.x += leftOffset;
             else if (centerAligned)
                 textLine.x += centerOffset - width / 2;
             else if (rightAligned)
                 textLine.x += rightOffset - width;
-            
+                                    
+            // Text width should include indents and margins so that
+            // autoSize will be correct.  A negative rightMargin increases
+            // the width for the purposes of alignment only.  
+            // The text still needs to be clipped based on its actual width.
+            width = rightMargin > 0 ?
+                    textLine.x + textLine.textWidth + rightMargin :
+                    textLine.x + textLine.textWidth;
+                        
             _textWidth = Math.max(_textWidth, width);
             
             textLine.y += PADDING_TOP;

				{
					nextTextLine = fontContext.callInContext(
						textBlock["recreateTextLine"], textBlock,
						[ recycleLine, textLine, maxLineWidth ]);		
				}        
				else
				{
					nextTextLine = recreateTextLine(
						recycleLine, textLine, maxLineWidth);
				}  
			}
			else

		var nextTextLine:TextLine;
		var nextY:int = paragraphY;
		var textLine:TextLine;
        
        // TextField seems to do this.  You can see it with wordWrap and 
        // indent > width or when rightMargin > width.  In the former case,
        // the first line is visually empty but contains a character which is 
        // clipped and the second line starts with the second letter.  
        // The clipped first line serves as a placeholder so that the rest
        // of the lines which may be visible are composed.
		var fitSomething:Boolean = true;
        
		// Generate TextLines, stopping when we run out of text
		// or reach the bottom of the requested bounds.
		// In this loop the lines are positioned within the rectangle
