                 // 4. Get the initial truncation position on the target 
                 // line given this allowed width. 
                 var truncateAtCharPosition:int = getTruncationPosition(
-                    TextLine(textLines[truncLineIndex]), allowedWidth);
+                    TextLine(textLines[truncLineIndex]), allowedWidth, extraLine);
 
                 // The following loop executes repeatedly composing text until 
                 // it fits.  In each iteration, an atoms's worth of characters 

        while (charPosition < line.textBlockBeginIndex + line.rawTextLength)
        {
            var atomIndex:int = line.getAtomIndexAtCharIndex(charPosition);
            var atomBounds:Rectangle = line.getAtomBounds(atomIndex); 
            consumedWidth += atomBounds.width;
            if (consumedWidth > allowedWidth)
                break;
                
            charPosition = line.getAtomTextBlockEndIndex(atomIndex);
        }
        


        // Compute the truncation line.
        truncLineIndex = computeLastAllowedLineIndex(height, lineCountLimit);
        
        // Add extra line in case we wordwrapped some characters
        // onto extra lines.  If we truncate in the middle of the last word
        // it may then fit on the line above.
        var extraLine:Boolean;
        if (truncLineIndex + 1 < textLines.length)
        {
            truncLineIndex++;
            extraLine = true;
        }
                                             
        if (truncLineIndex >= 0)
        {
            // Estimate the initial truncation position using the following 
