     //  Private Methods
     //
     //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     *  Returns the index of the first selected item. In single 
+     *  selection, this is just selectedIndex. In multiple 
+     *  selection, this is the index of the first selected item.  
+     */
+    private function getFirstSelectedIndex():Number
+    {
+        if (!allowMultipleSelection)
+            return selectedIndex;
+        else if (selectedIndices && selectedIndices.length > 0)
+            return selectedIndices[0]; 
+        else 
+            return -1; 
+    }
     
     /**
      *  @private

            return;
        event.preventDefault(); 
        
        if (selectUponNavigation)
        {
            if (allowMultipleSelection && event.shiftKey && selectedIndices)
            {
                var newInterval:Array = []; 
                var i:int; 
                //contiguous multi-selection action - create the new selection
                //interval
                if (selectedIndex <= proposedNewIndex)
                {
                    for (i = selectedIndex; i <= proposedNewIndex; i++)
                    {
                        newInterval.push(i); 
                    }
                }
                else 
                {
                    for (i = selectedIndex; i >= proposedNewIndex; i--)
                    {
                        newInterval.push(i); 
                    }
                }
                selectedIndices = newInterval;   
                ensureItemIsVisible(proposedNewIndex); 
            }
            else
            {
                //simple new selection 
                selectedIndex = proposedNewIndex; 
                ensureItemIsVisible(proposedNewIndex);
            }
        }
        else
        {
            //Handle the focus change of the items so that the currentCaretIndex property
            //gets updated and the itemFocusChanged event dispatches. 
            if(event.ctrlKey)
            {
                handleCaretChange(proposedNewIndex, true);
                ensureItemIsVisible(proposedNewIndex); 
            }
        }
    }
  

        if (!_allowMultipleSelection)
        {
            if (!requiresSelection)
                _proposedSelectedIndices = [];
            else 
                _proposedSelectedIndices = [0];
            commitMultipleSelection(); 
