      */
     protected function item_mouseDownHandler(event:MouseEvent):void
     {
+        // Handle the fixup of selection 
+        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); 
+        }
+        
+        // Handle any drag gestures that may have been started
         var renderer:IItemRenderer = event.currentTarget as IItemRenderer;
-        if (!renderer || !renderer.selected)
+        if (!renderer || !dragEnabled)
             return;
         
         mouseDownPoint = event.target.localToGlobal(new Point(event.localX, event.localY));

        {
            // 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[0] : 0; 
            var end:int = index; 
            if (start < end)
            {

        if (!renderer)
            return;
        
        renderer.removeEventListener(MouseEvent.MOUSE_DOWN, item_mouseDownHandler);
    }
    
    /**
