         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
         

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

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