 		const startCellX:Number = gridDimensions.getCellX(0 /* rowIndex */, firstVisibleColumnIndex);
 		const columnGap:int = gridDimensions.columnGap;
         
-		for (var columnIndex:int = firstVisibleColumnIndex; (width > 0) && (columnIndex < columnCount); columnIndex++)
+		for (var columnIndex:int = firstVisibleColumnIndex;
+            (width > 0) && (columnIndex >= 0) && (columnIndex < columnCount);
+            columnIndex = grid.getNextVisibleColumnIndex(columnIndex))
 		{
             var cellHeight:Number = gridDimensions.getTypicalCellHeight(columnIndex);
 			var cellWidth:Number = gridDimensions.getTypicalCellWidth(columnIndex);

        // Invalid row or column.
        if (dataItem == null || column == null)
            return null;
                
        const factory:IFactory = itemToRenderer(column, dataItem);
        const renderer:IGridItemRenderer = factory.newInstance() as IGridItemRenderer;

                if (!renderer)
                {       
                    var dataItem:Object = getDataProviderItem(rowIndex);
                    column = getGridColumn(colIndex);
                    var factory:IFactory = itemToRenderer(column, dataItem);
                    renderer = allocateGridElement(factory) as IGridItemRenderer;                   
                }
