      */
     private function dataProviderCollectionReset(event:CollectionEvent):Boolean
     {
-        freeGridElements(visibleRowBackgrounds);
-        freeGridElements(visibleRowSeparators);
-        visibleRowIndices.length = 0;
-
-        freeGridElements(visibleColumnBackgrounds);
-        freeGridElements(visibleColumnSeparators);        
-        visibleColumnIndices.length = 0;
-        
-        freeItemRenderers(visibleItemRenderers);
-        
-        freeGridElements(visibleSelectionIndicators);
-        visibleRowSelectionIndices.length = 0;
-        visibleColumnSelectionIndices.length = 0;
-        
-        freeGridElement(hoverIndicator)
-        hoverIndicator = null;
-        
-        freeGridElement(caretIndicator);
-        caretIndicator = null;
-        
-        visibleItemRenderersBounds.setEmpty();
-        visibleGridBounds.setEmpty();
-               
+        clearVirtualLayoutCache();
         return true;
     }
     

    
    /**
     *  @private
     */
    override public function clearVirtualLayoutCache():void
    {
        // TBD(hmuller):DTRT when the target changes
    }      

    /**

    private var visibleRowSeparators:Vector.<IVisualElement> = new Vector.<IVisualElement>(0);
    private var visibleColumnSeparators:Vector.<IVisualElement> = new Vector.<IVisualElement>(0);
    
    /**
     *  @private
     *  Common code for laying out the rowBackround, rowSeparator, columnSeparator visual elements.
     * 
     *  For row,columnSeparators, lastIndex identifies the element in the new layout for which 
     *  no separator is drawn.  If the previous layout - oldVisibleIndices - included the lastIndex,
     *  it needs to be freed, even though it exists in the new layout (newVisibleIndices).   See
     *  freeLinearElements().
     */
    private function layoutLinearElements (
        factory:IFactory,
        container:IVisualElementContainer,
