      *  order.  When an element is freed, the corresponding member of the vector parameter
      *  is set to null.
      * 
-     *  This method is a somewhat more efficient implementation of the following:
+     *  This method is [supposed to be a] somewhat more efficient implementation of the following:
      * 
      *  for (var i:int = 0; i < elements.length; i++)
-     *     if (newIndices.indexOf(oldIndices[i]) == -1)
      *     {
+     *     if ((oldIndices[i] == lastIndex) || (newIndices.indexOf(oldIndices[i]) == -1))
      *         freeGridElement(elements[i]);
      *         elements[i] = null;
      *     }
      *  
+     *  The lastIndex parameter is used to handle row and column separators, where the last
+     *  element is left out since separators only appear in between elements.  If the lastIndex
+     *  appears in oldIndices, we're not going to need the old element.
      */
     private function freeLinearElements (
         elements:Vector.<IVisualElement>, 
         oldIndices:Vector.<int>, 
-        newIndices:Vector.<int>):void
+        newIndices:Vector.<int>, 
+        lastIndex:int):void
     {
         // TBD(hmuller): rewrite this, should be one pass (no indexOf)
         for (var i:int = 0; i < elements.length; i++)
         {
             const offset:int = newIndices.indexOf(oldIndices[i]);
-            if (offset == -1)
+            if ((oldIndices[i] == lastIndex) || (newIndices.indexOf(oldIndices[i]) == -1))
             {
                 const elt:IVisualElement = elements[i];
                 if (elt)

     */
    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();
               
        return true;
    }
    

    
    /**
     *  @private
     *  Clear everything.
     */
    override public function clearVirtualLayoutCache():void
    {
        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();
    }      

    /**
