     
     /**
      *  Handles <code>MouseEvent.MOUSE_DOWN</code> events from any of the 
-     *  item renderers. This method remembers the mouse down point and
+     *  item renderers. This method handles the updating and commitment 
+     *  of selection as well as remembers the mouse down point and
      *  attaches <code>MouseEvent.MOUSE_MOVE</code> and
-     *  <code>MouseEvent.MOUSE_UP</code> listeners.
+     *  <code>MouseEvent.MOUSE_UP</code> listeners in order to handle
+     *  drag gestures.
      *
      *  @param event The MouseEvent object.
      *  

        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); 
        }
    }
    
    /**

        {
            // 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)
            {
