             dispatchEvent(new FlexEvent(FlexEvent.VALUE_COMMIT));
             
             //Dispatch the caretChange event 
-            e = new IndexChangeEvent(IndexChangeEvent.CARET_CHANGE); 
-            e.oldIndex = oldCaretIndex; 
-            e.newIndex = caretIndex; 
-            dispatchEvent(e);
-        }
+            if (changeCaretOnSelection)
+            {
+                e = new IndexChangeEvent(IndexChangeEvent.CARET_CHANGE); 
+                e.oldIndex = oldCaretIndex; 
+                e.newIndex = caretIndex; 
+                dispatchEvent(e);
+            }
+        }
+        
+        // default changeCaretOnSelection back to true
+        changeCaretOnSelection = true;
         
         return true;
      }

            itemSelected(oldSelectedIndex, false);
        if (_selectedIndex != NO_SELECTION && _selectedIndex != CUSTOM_SELECTED_ITEM)
            itemSelected(_selectedIndex, true);
        setCurrentCaretIndex(_selectedIndex); 

        // Step 4: dispatch the "change" event and "caretChange" 
        // events based on the dispatchChangeEvents parameter. Overrides may  

    mx_internal function dataProviderRefreshed():void
    {
        setSelectedIndex(NO_SELECTION, false);
        // TODO (rfrishbe): probably don't need the setCurrentCaretIndex below
        setCurrentCaretIndex(NO_CARET);
    }
    
