         return dataProvider ? dataProvider.length : 0;
     }
 
-    private var itemToRenderer:Dictionary = new Dictionary(true); 
+    private var indexToRenderer:Array = []; 
 
     /**
      *  @private 

     */     
    private var virtualLayoutStartIndex:int = -1;
    private var virtualLayoutEndIndex:int = -1;

    /**
     *  @private 

    {
        return _dataProvider;
    }
    
    /**
     *  @private
     */
    public function set dataProvider(value:IList):void
    {
        if (_dataProvider == value)
            return;

        // if there's an old dataProvider, and we've created the item renderer for 
        // that dataProvider, then we need to clear out all those item renderers
        if (!dataProviderChanged && _dataProvider)
        {
            var vLayout:Boolean = layout && layout.useVirtualLayout;
            var startIndex:int = vLayout ? virtualLayoutStartIndex : 0;
            var endIndex:int = vLayout ? virtualLayoutEndIndex : dataProvider.length - 1; 
            for (var index:int = endIndex; index >= startIndex; index--)
            {
                mx_internal::itemRemoved(_dataProvider.getItemAt(index), index);
            }
            
            if (vLayout)
            {
                virtualLayoutStartIndex = virtualLayoutEndIndex = -1;
                oldVirtualLayoutStartIndex = oldVirtualLayoutEndIndex = -1;
                
                for (var i:int = freeRenderers.length - 1; i >= 0; i--)
                {
                    var myItemRenderer:IVisualElement = freeRenderers.pop() as IVisualElement;
                    super.removeChild(myItemRenderer as DisplayObject);
                }
            }
        }
        
        if (_dataProvider)
            _dataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE, dataProvider_collectionChangeHandler);
        
