                 }
             }
 
+            if (_listDataProvider)
+            {
+                _listDataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE,
+                                          collectionChangeHandler, false);
+            }
+
             // At this point _rootModel may be null so we dont need to continue.
             if (_rootModel)
             {
                 if (!tmpCollection)
                     tmpCollection = _rootModel;
 
+                _listDataProvider = tmpCollection;
                 super.dataProvider = tmpCollection;
 
                 // not really a default handler, but we need to be later than the wrapper
-                tmpCollection.addEventListener(CollectionEvent.COLLECTION_CHANGE,
+                _listDataProvider.addEventListener(CollectionEvent.COLLECTION_CHANGE,
                                           collectionChangeHandler,
                                           false,
                                           EventPriority.DEFAULT_HANDLER, true);
             }
             else
             {
+                _listDataProvider = null;
                 super.dataProvider = null;
             }
         }

     */
    mx_internal var _rootModel:ICollectionView;

    //--------------------------------------------------------------------------
    //
    //  Properties

     */
    override public function set dataProvider(value:Object):void
    {
        // handle strings and xml
        if (typeof(value)=="string")
            value = new XML(value);
