     //  Event handlers
     //
     //--------------------------------------------------------------------------
+    
+    /**
+     *  Called when an item has been added to this component.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected function dataGroup_rendererAddHandler(event:RendererExistenceEvent):void
+    {
+        var renderer:IVisualElement = event.renderer;
+        
+        if (!renderer)
+            return;
+        
+        renderer.addEventListener(MouseEvent.ROLL_OVER, item_mouseEventHandler);
+        renderer.addEventListener(MouseEvent.ROLL_OUT, item_mouseEventHandler);
+    }
+    
+    /**
+     *  Called when an item has been removed from this component.
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.5
+     *  @productversion Flex 4.5
+     */
+    protected function dataGroup_rendererRemoveHandler(event:RendererExistenceEvent):void
+    {
+        var renderer:IVisualElement = event.renderer;
+        
+        if (!renderer)
+            return;
+        
+        renderer.removeEventListener(MouseEvent.ROLL_OVER, item_mouseEventHandler);
+        renderer.removeEventListener(MouseEvent.ROLL_OUT, item_mouseEventHandler);
+    }
+
+    /**
+     *  @private
+     *  Called when an item has been removed from this component.
+     */
+    private function item_mouseEventHandler(event:MouseEvent):void
+    {
+        var type:String = event.type;
+        type = TYPE_MAP[type];
+        if (hasEventListener(type))
+        {
+            var itemRenderer:IItemRenderer = event.currentTarget as IItemRenderer;
+            
+            var itemIndex:int = -1;
+            if (itemRenderer)
+                itemIndex = itemRenderer.itemIndex;
+            else
+                itemIndex = dataGroup.getElementIndex(event.currentTarget as IVisualElement);
+            
+            var listEvent:ListEvent = new ListEvent(type, false, false,
+                                                    event.localX,
+                                                    event.localY,
+                                                    event.relatedObject,
+                                                    event.ctrlKey,
+                                                    event.altKey,
+                                                    event.shiftKey,
+                                                    event.buttonDown,
+                                                    event.delta,
+                                                    itemIndex,
+                                                    dataProvider.getItemAt(itemIndex),
+                                                    itemRenderer);
+            dispatchEvent(listEvent);
+        }
+    }
     
     /**
      *  @private

{

import flash.events.Event;

import mx.collections.IList;
import mx.core.FlexVersion;

            // Not your typical delegation, see 'set useVirtualLayout'
            if (_useVirtualLayout && dataGroup.layout)
                dataGroup.layout.useVirtualLayout = true;
            
            dataGroup.addEventListener(
                RendererExistenceEvent.RENDERER_ADD, dataGroup_rendererAddHandler);
            dataGroup.addEventListener(
                RendererExistenceEvent.RENDERER_REMOVE, dataGroup_rendererRemoveHandler);
        }
    }

    /**
     *  @private
     */
    override protected function partRemoved(partName:String, instance:Object):void
    {        
        super.partRemoved(partName, instance);
        
        if (instance == dataGroup)
        {
            dataGroup.removeEventListener(
                RendererExistenceEvent.RENDERER_ADD, dataGroup_rendererAddHandler);
            dataGroup.removeEventListener(
                RendererExistenceEvent.RENDERER_REMOVE, dataGroup_rendererRemoveHandler);
        }
    }

