     /**
      *  @private
      */
-    override protected function itemSelected(item:Object, selected:Boolean):void
-    {
-        var item:Object = dataGroup.getItemRenderer(item);
-        
-        if (item)
-        {
-            if ("selected" in item)
-                item.selected = selected;
+    override protected function itemSelected(index:int, selected:Boolean):void
+    {
+        super.itemSelected(index, selected);
+        
+        var renderer:Object = dataGroup.getItemRenderer(index);
+        
+        if (renderer)
+        {
+            if ("selected" in renderer)
+                renderer.selected = selected;
             else
             {
                 // TODO: localize below (and other messages)
-                throw new Error("The item needs to support the \"selected\" property " + 
+                throw new Error("The item renderer needs to support the \"selected\" property " + 
                         "for selection to work.  An easy way to accomplish this is by wrapping " + 
                         "your component in a DefaultComplexItemRenderer");
             }
         }
     }
-        
-    /**
-     *  Returns true if the item is selected.
-     */
-    public function isItemSelected(item:Object):Boolean
+    
+    /**
+     *  @private
+     */
+    override public function isItemIndexSelected(index:int):Boolean
     {
         if (allowMultipleSelection)
-        {
-            var itemIndex:int = dataProvider.getItemIndex(item);
-            
-            return selectedIndices.indexOf(itemIndex) != -1;
-        }
-        
-        return item == selectedItem;
+            return selectedIndices.indexOf(index) != -1;
+        
+        return index == selectedIndex;
     }
         
     /**

     */
    private function dataGroup_itemAddHandler(event:ItemExistenceChangedEvent):void
    {
        var renderer:Object = dataGroup.getItemRenderer(event.relatedObject);
        
        if (renderer)
            renderer.addEventListener("click", item_clickHandler);
            
        if (isItemSelected(event.relatedObject))
            itemSelected(event.relatedObject, true);
    }
    
    /**

     *  Called when an item has been removed from this component.
     */
    private function dataGroup_itemRemoveHandler(event:ItemExistenceChangedEvent):void
    {
        var index:int = event.index;
        var renderer:Object = event.renderer;
        
        if (renderer)
            renderer.removeEventListener("click", item_clickHandler);
