     	var changedSelection:Boolean = false;
     	
         super.commitProperties();
+        
+        if (dataProviderChanged)
+        {
+            dataProviderChanged = false;
+            doingWholesaleChanges = false;
+    	
+    	    // TODO: should resetting the dataProvider clear out all of its state?
+    	    // or should we preserve selectedIndex
+        	if (selectedIndex >= 0 && dataProvider && selectedIndex < dataProvider.length)
+        	   itemSelected(dataProvider.getItemAt(selectedIndex), true);
+        	else
+        	   selectedIndex = -1;
+        }
             
         if (requiresSelectionChanged)
         {

import flex.events.FlexEvent;
import flex.events.ItemExistenceChangedEvent;

import mx.events.IndexChangedEvent;
import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;

	 *  @private
	 */
	private var doingWholesaleChanges:Boolean = false;
	
	//----------------------------------
    //  dataProvider
    //----------------------------------
    
    private var dataProviderChanged:Boolean;
    
    override public function set dataProvider(value:IList):void
    {
        if (dataProvider)
            dataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
    
        dataProviderChanged = true;
        doingWholesaleChanges = true;
        
        super.dataProvider = value;
        
        if (dataProvider)
            dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, collectionChangeHandler);
    }
	
	//----------------------------------
	//  selectedIndex
