         // Remove the item from the group if that group isn't this group
         if (host && host is Group && host != this)
             Group(host).removeItem(item);
+        else if (host && host is DataGroup && host != this)
+        {
+            var dp:IList = DataGroup(host).dataProvider;
+            var index:int = dp.getItemIndex(item);
+            dp.removeItemAt(index);
+        }
         
         // Calling removeItem should have already removed the child. This
         // should handle the case when we don't call removeItem

/**
 *  The Group class.
 */
public class Group extends UIComponent implements IGraphicElementHost, IViewport
{   
    public function Group():void
    {
        super();
        tabChildren = true;
        _layout = new BasicLayout();
        ILayout(_layout).target = this;        
    }
    
    private var skinRegistry:Dictionary;
    private var contentChanged:Boolean = false;
    private var layoutChanged:Boolean = true;
    private var transformChanged:Boolean = false;
    private var needsDisplayObjectAssignment:Boolean = false;
    
    // item renderer
    public var itemRenderer:IFactory;   
    public var itemRendererFunction:Function; // signature: itemRendererFunction(item:*):IFactory
    public var alwaysUseItemRenderer:Boolean = false; // if true, always use the itemRenderer
    private var _content:*;
    private var _contentType:int;
    private var contentCollection:ICollectionView;

        // validate sizes of the elements, even in cases where recursive==false.
        
        // Check whether we manage the elements, or are they managed by an ItemRenderer
        // TODO EGeorgie: we need to optimize this, iterating through all the elements is slow.
        // Validate element size
        var length:int = numItems;
        for (var i:int = 0; i < length; i++)
        {
            var element:GraphicElement = getItemAt(i) as GraphicElement;
            if (element)
                element.validateSize();
        }

        super.validateSize(recursive);
    }   
    
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        super.updateDisplayList(unscaledWidth, unscaledHeight);

        // TODO EGeorgie: we need to optimize this, iterating through all the elements is slow.
        // Iterate through the graphic elements, clear their graphics and draw them

        graphics.clear(); // Clear the group's graphic because graphic elements might be drawing to it
        // This isn't needed for DataGroup because there's not much DisplayObject sharing
        
        // TODO EGeorgie: we need to optimize this, iterating through all the elements is slow.
        // Iterate through the graphic elements, clear their graphics and draw them
        var length:int = numItems;
        for (var i:int = 0; i < length; i++)
        {
            var element:GraphicElement = getItemAt(i) as GraphicElement;
            if (element)
                element.validateDisplayList();
        }
    }

    //--------------------------------------------------------------------------
    //
    //  Content management
