     
     /**
      *  If the requested item renderer is visible, returns a reference to 
-     *  the item renderer currently displayed at the specified cell.  Once the 
-     *  item renderer is no longer visible it is recycled and its properties 
-     *  will be reset.  
+     *  the item renderer currently displayed at the specified cell.  Note
+     *  that once the returned item renderer is no longer visible it may be 
+     *  recycled and its properties reset.  
      * 
      *  <p>If the requested item renderer is not visible then, 
      *  each time this method is called, a new item renderer is created.  The

    
    /**
     *  @private
     *  The elements currently "in use".
     * 
     *  Maps from an IFactory to a list of the elements allocated by that factory.
     *  The list is represented by a Vector.<IVisualElement>.
     */
    private const allocatedElementMap:Dictionary = new Dictionary();  // TBD: should be weak refs here?
    
    /**
     *  @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>.
     */
    private const freeElementMap:Dictionary = new Dictionary();  // and here?
    
    /**
     *  @private
     *  Records the IFactory used to allocate a Element so that free(Element)
     *  can find it again.
     */
    private const elementToFactoryMap:Dictionary = new Dictionary();  // and here?
    
    private function createGridElement(factory:IFactory):IVisualElement
    {
        const element:IVisualElement = factory.newInstance() as IVisualElement;
        elementToFactoryMap[element] = factory;
        
        var elements:Vector.<IVisualElement> = allocatedElementMap[factory];
        if (!elements)
        {
            elements = new Vector.<IVisualElement>();
            allocatedElementMap[factory] = elements;     
        }
        elements.push(element);
        
        return element;
    }
    

    }
    
    /**
     *  @private
     *  Move the specified element to the free list after hiding it.  Return true if the 
     *  element was added to the free list (freeElements).   Note that we do not actually
     *  remove the element from its parent.
