         {
             var textLine:TextLine = TextLine(getChildAt(i));
             
+            _textWidth = Math.max(_textWidth, textLine.textWidth);
+            
             var width:Number = textLine.x + textLine.textWidth + rightMargin;
             
             // Only align if there is width to do so.
-            if (leftAligned || width > innerWidth)
+            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);
+                
+            clipWidth = Math.max(clipWidth, textLine.x + textLine.textWidth);
             
             textLine.y += PADDING_TOP;
         }

                    totalIndent += indent;
                
                if (totalIndent < 0)
                    totalIndent = 0;
                
                if (!wordWrap)
                    rightMargin = 0;

				if (!wordWrap)
				{
					_width = _textWidth + PADDING_LEFT + PADDING_RIGHT;
                    
                    var blockIndent:Number = Number(_defaultTextFormat.blockIndent);
                    var indent:Number = Number(_defaultTextFormat.indent);
                    var leftMargin:Number = Number(_defaultTextFormat.leftMargin);
                    var rightMargin:Number = Number(_defaultTextFormat.rightMargin);
                    
                    // Factor in indents and margins if the combined total
                    // is positive.
                    if (blockIndent + indent + leftMargin > 0)
                        _width += blockIndent + indent + leftMargin;
                    
                    // Right margin seems to always be considered but if its
                    // negative the width can't get smaller than the text width.
                    _width += rightMargin;
                    if (rightMargin >  0)
                    {
                        clipWidth = _width;                       
                    }
                    else
                    {
                        if (_width - PADDING_LEFT - PADDING_RIGHT < _textWidth ) 
                            _width = _textWidth + PADDING_LEFT + PADDING_RIGHT;
                        // force clipping
                        clipWidth = origWidth + 1;
                    }
                    
					// adjust x for CENTER and RIGHT cases
					if (_autoSize == TextFieldAutoSize.RIGHT)
						x += origWidth - _width;
