         var oldSelectedIndex:int = _selectedIndex;
         var oldCaretIndex:int = _caretIndex;
         var e:IndexChangeEvent;
-        
+
+
+        //Prevents an in item from being selected.  Stops the change before it sends out changing events.
+        if (_preventSelection == true)
+        {
+            if (_selectedIndex != NO_SELECTION)
+            {
+                itemSelected(NO_SELECTION, false);
+                _selectedIndex = NO_SELECTION;
+            }
+
+            //Cancel the selection change and return false.
+            itemSelected(_proposedSelectedIndex, false);
+            _proposedSelectedIndex = NO_PROPOSED_SELECTION;
+            dispatchChangeAfterSelection = false;
+
+            return false;
+        }
+
+
         if (!allowCustomSelectedItem || _proposedSelectedIndex != CUSTOM_SELECTED_ITEM)
         {
             if (_proposedSelectedIndex < NO_SELECTION)

        labelFieldOrFunctionChanged = true;
        invalidateProperties(); 
    }
    
    //----------------------------------
    //  requireSelection
    //----------------------------------

        // from false to true
        if (value == true)
        {
            //Make sure to disable preventSelection since these two properties are polar opposites.
            preventSelection = false;

            requireSelectionChanged = true;
            invalidateProperties();
        }
