 import mx.styles.IStyleClient;
 
 /**
- *  Dispatched prior to the dataProvider being changed.
+ *  Dispatched when an item is added to the content holder.
+ *  event.relatedObject is the visual item that was added.
  */
-[Event(name="dataProviderChanging", type="flex.events.FlexEvent")]
+[Event(name="itemAdd", type="flex.events.ItemExistenceChangedEvent")]
 
 /**
- *  Dispatched after the dataProvider has changed.
+ *  Dispatched when an item is removed from the content holder.
+ *  event.relatedObject is the visual item that was removed.
  */
-[Event(name="dataProviderChanged", type="flex.events.FlexEvent")]
+[Event(name="itemRemove", type="flex.events.ItemExistenceChangedEvent")]
 
 [DefaultProperty("dataProvider")] 
 /**

        if (item is GraphicElement) 
        {
            var graphicItem:GraphicElement = GraphicElement(item);
            graphicItem.elementHost = this;
        
            // If a styleable GraphicElement is being added,
            // build its protochain for use by getStyle().

    }
    
    protected function initializeDataProvider():void
    {
        // Get rid of existing display object children.
        // !!!!! This should probably be done through change notification
        for (var idx:int = numChildren; idx > 0; idx--)
            super.removeChildAt(0);
        
        // TODO: get rid of this code
        // An item renderer who's rendering a graphic may not be used anymore and is
        // removed above.  However, the graphic item's display object is still 
        // attached to that item renderer.  We need to clear out these display objects.
        // For now, this is a cheap way to do it.
        // This might orphan the old display object in its previous container.
        if (dataProvider != null)
        {
            for (var j:int = 0; j < dataProvider.length; j++)
            {
                var item:GraphicElement = dataProvider.getItemAt(j) as GraphicElement;
                if (item)
                    item.displayObject = item.sharedDisplayObject = null;
            }
        }
        
        if (_dataProvider != null)
        {
