                 elt.includeInLayout = false;
                 freeRenderers.push(elt);
             }
-            else
-            {
-                dispatchEvent(new RendererExistenceEvent(RendererExistenceEvent.RENDERER_REMOVE, 
-                                false, false, elt, index, item));
+            else if (elt)
+            {
+                dispatchEvent(new RendererExistenceEvent(RendererExistenceEvent.RENDERER_REMOVE, false, false, elt, index, item));
                 super.removeChild(DisplayObject(elt));
             }
         }

        _layeringFlags |= (LAYERING_ENABLED | LAYERING_DIRTY);
        invalidateProperties();
    }
    
    private var _contentChangeDeltas:Vector.<int> = null;
    

    /**
     *  @private
     *  Provisional support for notifying the layout of upcoming changes to the
     *  layout elements (item renderers).   The value of this property is a
     *  vector where positive values indicate item addditions, and negative values
     *  indicate item removals.   In both cases the index values are offset by one.
     */  
    override mx_internal function get contentChangeDeltas():Vector.<int>
    {
        return _contentChangeDeltas;
    }
    
    private function appendContentChangeDelta(index:int):void
    {
        if (!_contentChangeDeltas)
            _contentChangeDeltas = new Vector.<int>();
        _contentChangeDeltas.push(index);
    }
    
    /**
     *  Adds the itemRenderer for the specified dataProvider item to this DataGroup.
     * 

     */
    mx_internal function itemAdded(item:Object, index:int):void
    {
        if (layout)
            layout.elementAdded(index);
        
        if (layout && layout.useVirtualLayout)
        {
            if ((index >= virtualLayoutStartIndex) && (index <= virtualLayoutEndIndex))
            {
                virtualLayoutEndIndex += 1;
                indexToRenderer.splice(index, 0, null);
            }

            invalidateSize();
            invalidateDisplayList();
            return;
