     public function set allowMultipleSelection(value:Boolean):void
     {
         if (value == _allowMultipleSelection)
-            return 
-        
-        _allowMultipleSelection = value;
-        
-        //Going from multiple to single, clear out selection  
-        if (!_allowMultipleSelection)
-        {
-            if (!requiresSelection)
-                _proposedSelectedIndices = [];
-            else 
-                _proposedSelectedIndices = [0];
-            commitMultipleSelection(); 
-        } 
+            return;     
+        
+        _allowMultipleSelection = value; 
     }
     
     //----------------------------------

        // Entering the caret state with the Ctrl key down 
        else if (event.ctrlKey)
        {
            handleCaretChange(proposedNewIndex, true);
            ensureItemIsVisible(proposedNewIndex); 
        }
        // Its just a new selection action  
        else

    }
    
    /**
     *  Adjusts the selected indices to account for items being added to or 
     *  removed from this component. 
     *   
     *  @param index The new index.
     *  
     *  @langversion 3.0
     *  @playerversion Flash 10
     *  @playerversion AIR 1.5
     *  @productversion Flex 4
     */
    protected function adjustSelectedIndices(index:int, add:Boolean):void
    {
        var i:int; 
        var curr:Number; 
        var newInterval:Array = []; 
        
        if (selectedIndex == NO_SELECTION || doingWholesaleChanges)
            return;
        
        if (add)
        {
            for (i = 0; i < selectedIndices.length; i++)
            {
                curr = selectedIndices[i]; 
                //adding an item above one of the selected items,
                //bump the selected item up. 
                if (curr >= index)
                    newInterval.push(curr + 1); 
                else 
                    newInterval.push(curr); 
            }
        }
        else
        {
            // Quick check to see if we're removing the only selected item
            // in which case we need to honor requiresSelection. 
            if (!isEmpty(selectedIndices) && selectedIndices.length == 1 
                && index == selectedIndex && requiresSelection)
            {
                //Removing the last item 
                if (dataProvider.length == 0)
                {
                    newInterval = []; 
                }
                else if (index == 0)
                {
                    //We can't just set selectedIndex to 0 directly
                    //since the previous value was 0 and the new value is
                    //0, so the setter will return early.
                    _proposedSelectedIndex = 0; 
                    invalidateProperties();
                    return;
                }    
                else
                {
                    newInterval = [0];
                }
            }
            else
            {    
                for (i = 0; i < selectedIndices.length; i++)
                {
                    curr = selectedIndices[i]; 
                    //removing an item above one of the selected items,
                    //bump the selected item down. 
                    if (curr > index)
                        newInterval.push(curr - 1); 
                    else if (curr < index) 
                        newInterval.push(curr);
                }
            }
        }
        selectedIndices = newInterval;
    }
    
    /**
     *  Used by <code>keyDownHandler</code> to map the keyboard events
     *  to NavigationUnit. The NavigationUnit values are passed to the
     *  layout to figure out what the new item in focus is based on
