      */
     private const visibleGridBounds:Rectangle = new Rectangle();
     
+    
+    /**
+     *  @private
+     *  The elements available for reuse.  Maps from an IFactory to a list of the elements 
+     *  that have been allocated by that factory and then freed.   The list is represented 
+     *  by a Vector.<IVisualElement>.
+     * 
+     *  Updated by allocateGridElement().
+     */
+    private const freeElementMap:Dictionary = new Dictionary();
+    
+    /**
+     *  @private
+     *  Records the IFactory used to allocate a Element so that free(Element) can find it again.
+     * 
+     *  Updated by createGridElement().
+     */
+    private const elementToFactoryMap:Dictionary = new Dictionary();    
+    
     //--------------------------------------------------------------------------
     //
     //  Class methods and properties

        for each (var elt:IVisualElement in elements)
            freeGridElement(elt);
        elements.length = 0;
    }      
    
    /**
     *  @private

    {
        const selectionIndicatorFactory:IFactory = grid.selectionIndicator;
        
        // TBD(hmuller): if selectionIndicatorFactory has -changed- get rid
        // of the old selection indicators.   See layoutIndicator() for an example
        
        if (!selectionIndicatorFactory)
        {
            clearSelectionIndicators();
