      */
     public function set selectedIndices(value:Vector.<int>):void
     {
-        if (_proposedSelectedIndices == value)
+        setSelectedIndices(value, false);
+    }
+    
+    /**
+     *  @private
+     *  Used internally to specify whether the selectedIndices changed programmatically or due to 
+     *  user interaction. 
+     * 
+     *  @param dispatchChangeEvent if true, the component will dispatch a "change" event if the
+     *  value has changed. Otherwise, it will dispatch a "valueCommit" event. 
+     */
+    mx_internal function setSelectedIndices(value:Vector.<int>, dispatchChangeEvent:Boolean = false):void
+    {
+        // TODO (jszeto) Do a deep compare of the vectors
+        if (_proposedSelectedIndices == value || 
+            (value.length == 1 && value[0] == selectedIndex))
             return; 
         
+        if (dispatchChangeEvent)
+            dispatchChangeAfterSelection = dispatchChangeEvent;
         _proposedSelectedIndices = value;
         multipleSelectionChanged = true;  
         invalidateProperties();

        {
            if (allowMultipleSelection)
            {
                selectedIndices = calculateSelectedIndices(mouseDownIndex, pendingSelectionShiftKey, pendingSelectionCtrlKey);
            }
            else
            {
                // Must be deselecting the current selected item.
                selectedIndex = NO_SELECTION;
            }
        }


        // matches the keystroke. 
        if (findKey(event.charCode))
        {
            event.preventDefault();
            return;
        }
