 		requiresSelectionChanging = true;
 	}
 
-	private var enabledChanging:Boolean;
-
-    /**
-     *  @private
-     */
-    override public function set enabled(value:Boolean):void
+    override public function set dataProvider(value:IList):void
+    {
+        if (dataProvider)
+            dataProvider.removeEventListener(CollectionEvent.COLLECTION_CHANGE, resetCollectionChangeHandler);
+    
+		// not really a default handler, we just want it to run after the datagroup
+        if (value)
+            value.addEventListener(CollectionEvent.COLLECTION_CHANGE, resetCollectionChangeHandler, false, EventPriority.DEFAULT_HANDLER);
+
+        super.dataProvider = value;
+    }
+
+    /**
+     *  @private
+     */
+    private function resetCollectionChangeHandler(event:Event):void
 	{
-		super.enabled = value;
-		enabledChanging = true;
+        if (event is CollectionEvent)
+        {
+            var ce:CollectionEvent = CollectionEvent(event);
+
+            if (ce.kind == CollectionEventKind.ADD || 
+				ce.kind == CollectionEventKind.REMOVE)
+			{
+				// force reset here so first/middle/last skins
+				// get reassigned
+				ce = new CollectionEvent(CollectionEvent.COLLECTION_CHANGE);
+				ce.kind = CollectionEventKind.RESET;
+				dataProvider.dispatchEvent(ce);
+			}
+		}
 	}
 
     /**

    {
		var currentRenderer:ISelectableRenderer;
		var renderer:ISelectableRenderer;

        switch (event.keyCode)
        {

    /**
     *  @private
     */
    override public function drawFocus(isFocused:Boolean):void
    {
		adjustLayering(focusedIndex);
        drawButtonFocus(focusedIndex, isFocused);
    }


    /**
     *  @private
