         if (!renderer)
             return;
         
-        renderer.removeEventListener(MouseEvent.CLICK, item_clickHandler);
-        if (dragEnabled)
-            renderer.removeEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
-    }
-    
-    /**
-     *  @private
-     *  Called when an item is clicked.
-     */
-    protected function item_clickHandler(event:MouseEvent):void
-    {
-        var newIndex:Number; 
-        
-        if (!allowMultipleSelection)
-        {
-            // Single selection case, set the selectedIndex 
-            newIndex = dataGroup.getElementIndex(event.currentTarget as IVisualElement);  
-            
-            var currentRenderer:IItemRenderer;
-            if (caretIndex >= 0)
-            {
-                currentRenderer = dataGroup.getElementAt(caretIndex) as IItemRenderer;
-                if (currentRenderer)
-                    currentRenderer.showsCaret = false;
-            }
-
-            // Check to see if we're deselecting the currently selected item 
-            if (event.ctrlKey && selectedIndex == newIndex)
-                selectedIndex = NO_SELECTION;
-            // Otherwise, select the new item 
-            else
-                selectedIndex = newIndex;
-        }
-        else 
-        {
-            // Multiple selection is handled by the helper method below
-            selectedIndices = calculateSelectedIndicesInterval(event.currentTarget as IVisualElement, event.shiftKey, event.ctrlKey); 
-        }
+        renderer.removeEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
     }
     
     /**

            removeEventListener(DragEvent.DRAG_START, dragStartHandler, false);
            removeEventListener(DragEvent.DRAG_COMPLETE, dragCompleteHandler, false);
        }
        
        if (dataGroup)
        {
            // FIXME (egeorgie): Figure out a more efficient way to iterate through the item renderers.
            var count:int = dataGroup.numElements;
            for (var i:int = 0; i < count; i++)
            {
                var renderer:IItemRenderer = dataGroup.getElementAt(i) as IItemRenderer;
                if (renderer)
                {
                    if (_dragEnabled)
                        renderer.addEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
                    else
                        renderer.removeEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
                }
            }
        }
    }
    
    //----------------------------------

        {
            // A contiguous selection action has occurred. Figure out which new 
            // indices to add to the selection interval and return that. 
            var start:int = (!isEmpty(selectedIndices)) ? selectedIndices[selectedIndices.length - 1] : 0; 
            var end:int = index; 
            if (start < end)
            {
