         const startColIndex:int = gridDimensions.getColumnIndexAt(scrollX, scrollY);
         const startRowIndex:int = gridDimensions.getRowIndexAt(scrollX, scrollY);
         const startCellR:Rectangle = gridDimensions.getCellBounds(startRowIndex, startColIndex);        
+        
+        // when null, no dataProvider exists or grid in a bad state. So, clean up and return.
         if (!startCellR)
+        {
+            // free itemRenderers
+            for each (var r:IVisualElement in visibleItemRenderers)
+                freeItemRenderer(r);
+                
+            visibleItemRenderers = new Vector.<IVisualElement>();
+            visibleRowIndices = new Vector.<int>();
+            visibleColumnIndices = new Vector.<int>();
             return;
+        }
         
         // Compute newVisibleColumns
         

			
            var column:GridColumn = getGridColumn(columnIndex);
            if (!isNaN(column.width))
                cellWidth = column.width;
            
            if (isNaN(cellWidth) || (!isFixedRowHeight && isNaN(cellHeight)))
            {
                var renderer:IVisualElement = createTypicalItemRenderer(columnIndex);
                if (isNaN(cellWidth))
                    cellWidth = renderer.getPreferredBoundsWidth();
                if (isNaN(cellHeight))
                    cellHeight = renderer.getPreferredBoundsHeight();
                freeGridElement(renderer);
                
                gridDimensions.setTypicalCellWidth(columnIndex, cellWidth);
                gridDimensions.setTypicalCellHeight(columnIndex, cellHeight);
                
                if (indices == null)
                    indices = new Vector.<int>();
                indices.push(columnIndex);                
            }
            
			if (columnIndex == startIndex)

     *  the explicit width.  Otherwise an item renderer is created for the column 
     *  and the item renderer's preferred bounds become the typical cell size.   
     * 
     *  This method also updates the column width in GridDimensions if the column
     *  has an explicit width.
     * 
     *  Return the indices of the columns whose typicalCellWidth was updated. 
	 */
	private function updateTypicalCellSizes(width:Number, startX:Number, startIndex:int):Vector.<int>
	{
