 		grid.itemRendererGroup.addElement(renderer);
 
 		initializeItemRenderer(renderer, 0 /* rowIndex */, columnIndex, grid.typicalItem, false);
-		layoutItemRenderer(renderer, 0, 0, column.width, NaN);
+        
+        // The default width of a TextField is 100.  If autoWrap is true, and
+        // multiline is true, the measured text will wrap if it is wider than
+        // the width. This is not what we want when measuring the typicalItem
+        // unless the width is explicitly set on the column.
+        var w:Number = 
+            !isNaN(column.width) || !(renderer is DefaultGridItemRenderer) ? 
+            column.width : UIComponent.DEFAULT_MAX_WIDTH;
+        
+		layoutGridElement(renderer, 0, 0, w, NaN);
 		
 		grid.itemRendererGroup.removeElement(renderer);
 		return renderer;

        if (!grid)
            return;
        
        // If the hoverIndicator is visible then we're going to have to fixup its location
        // at updateDisplayList() time.
        
        if ((grid.hoverRowIndex != -1) || (grid.hoverColumnIndex != -1))
        {
            const oldScrollR:Rectangle = grid.scrollRect;
            const dx:Number = grid.horizontalScrollPosition - oldScrollR.x;
            const dy:Number = grid.verticalScrollPosition - oldScrollR.y;
            invalidateHoverLocation(dx, dy);
        }
        
        super.scrollPositionChanged();  // sets grid.scrollRect
        
        // Only invalidate if we're clipping and scrollR extends outside validBounds

    }
    

    private var mouseXOffset:Number = 0;
    private var mouseYOffset:Number = 0;
       
    private function layoutHoverIndicator(container:IVisualElementContainer):void
    {
        const rowIndex:int = grid.hoverRowIndex;
        const columnIndex:int = grid.hoverColumnIndex;
        const factory:IFactory = grid.hoverIndicator;
