     {
         _itemRendererFunction = value;
 
+        cleanUpDataProvider();
         invalidateProperties();
-        invalidateSize();
-        invalidateDisplayList();
         
         itemRendererChanged = true;
         typicalItemChanged = true;
     }
     
     private var _dataProvider:IList;
-    private var dataProviderChanged:Boolean = false;
+    private var dataProviderChanged:Boolean;
     
     [Bindable("dataProviderChanged")]
     /**

import mx.layout.LayoutElementFactory;



/**
 *  Dispatched when a renderer is added to the content holder.
 * <code>event.renderer</code> is the renderer that was added.

     */ 
    protected function initializeDataProvider():void
    {
        var index:int;
        var vLayout:Boolean = layout && layout.useVirtualLayout;
        
        if (_dataProvider)
        {
            _dataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE, dataProvider_collectionChangeHandler, false, 0, true);
            
            // Create all item renderers eagerly
            if (!vLayout)
            {
                for (index = 0; index < _dataProvider.length; index++)
                    mx_internal::itemAdded(_dataProvider.getItemAt(index), index);
            }
            else
            {
                // The display list will be created lazily, at updateDisplayList() time
                invalidateSize();
                invalidateDisplayList();
            }
        }
    }
    
