      */
     public function set selectedItem(value:*):void
     {
-        selectedIndex = dataProvider.getItemIndex(value);
+        if (selectedItem == value)
+            return;
+        
+        _pendingSelectedItem = value;
+        invalidateProperties();
     }
 
     //----------------------------------

    //  selectedItem
    //----------------------------------
    
    [Bindable("selectionChanged")]
    /**
     *  The item that is currently selected. 

                // commitSelectedIndex() is called below.
                _proposedSelectedIndex = 0;
            }
        }
        
        if (_pendingSelectedItem !== undefined)
        {
            if (dataProvider)
                _proposedSelectedIndex = dataProvider.getItemIndex(_pendingSelectedItem);
            _pendingSelectedItem = undefined;
        }
        
        if (_proposedSelectedIndex != NO_PROPOSED_SELECTION)
