     }
     
     /**
-     *  Create the visual representation for the item, if needed.
+     *  Create the item renderer for the item, if needed.
      * 
      *  <p>The rules to create a visual item are:</p>
      *  <ol><li>if itemRendererFunction is defined, call 

                            
            if (!graphicItem.displayObject)
                graphicItem.displayObject = graphicItem.createDisplayObject();
                
            itemDisplayObject = graphicItem.displayObject;
            myItemRenderer = graphicItem;
        }
        
        // 4. if item is a DisplayObject, use it directly
        if (!myItemRenderer && item is DisplayObject)
        {
            myItemRenderer = itemDisplayObject = DisplayObject(item);
        }
        
        // Set the renderer's data to the item, but only if the item and renderer are different
        if (myItemRenderer is IDataRenderer && myItemRenderer != item)
            IDataRenderer(myItemRenderer).data = item;
    
        registerRenderer(item, myItemRenderer);

        return itemDisplayObject;
    }
    
    /**
     *  Called to associate an item with a particular renderer.
     *  This is called automatically when an item renderer is created.
     *
     *  @param item The item to associate the renderer with
     *  @param myItemRenderer The item renderer
     */
    protected function registerRenderer(item:Object, myItemRenderer:Object):void
    {
        if (!itemRendererRegistry)
            itemRendererRegistry = new Dictionary(true);
        
        itemRendererRegistry[item] = myItemRenderer;
    }
    
    /**
     *  Called to dis-associate an item with a particular rendering display object.
     *  This will be called when virtualization support is added to datagroup.
     *
     *  @param item The item to dis-associate the renderer with
     *  @param myItemRenderer The item renderer
     */
    protected function unregisterRenderer(item:Object, myItemRenderer:DisplayObject):void
    {
        if (!itemRendererRegistry)
            return;
        
        delete itemRendererRegistry[item];
    }
    
    /**

    //--------------------------------------------------------------------------
    
    /**
     *  Returns the instance of the renderer at the specified index. If the item 
     *  at that index is a visual element and uses no renderer, then the visual  
     *  element will be returned.
     *
     *  @param index The item index whose renderer is to be returned.
     *
     *  @return The renderer instance for the specified item. If the item
     *          is a visual element and has no item renderer, 
     *          the visual element itself is returned.
     */
    public function getItemRenderer(index:int):Object
    {
        return itemRendererRegistry[index];
    }
    
    /**
     *  Returns the item index associated with the specified renderer.
     *
     *  @param renderer The renderer whose item you want to retrieve.
     *
     *  @return The item index associated with the specified renderer, 
     *          or -1 if there is no item associated with the passed in 
     *          renderer.
     */
    public function getRendererItem(renderer:Object):int
    {
        return itemRendererRegistry.indexOf(renderer);
    }
    
    /**
