         _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 itemRemoved(item:Object, index:int):void
    {
        if (layout && layout.useVirtualLayout)
        {
            appendContentChangeDelta(-(index+1));
            indexToRenderer.splice(index, 1);
            invalidateSize();
            invalidateDisplayList();
            return;
        }        
        
        var myItemRenderer:IVisualElement = indexToRenderer[index];
        indexToRenderer.splice(index, 1);
        
        dispatchEvent(new RendererExistenceEvent(
                      RendererExistenceEvent.RENDERER_REMOVE, false, false, 
                      myItemRenderer, index, item));
        
        // If the item and renderer are different objects, set the renderer data to 
        // null here to clear it out. Otherwise, the renderer keeps a reference to the item,
        // which can cause problems later.
        if (myItemRenderer is IDataRenderer && myItemRenderer != item)
            IDataRenderer(myItemRenderer).data = null;
        
        super.removeChild(myItemRenderer as DisplayObject);
        
        invalidateSize();
        invalidateDisplayList();

    /**
     *  @private
     *  Discard the ItemRenderers that aren't needed anymore, i.e. the ones
     *  outside the range virtualLayoutStartIndex to virtualLayoutEndIndex.
     *  Discarded IRs may be added to the freeRenderers list per the rules
     *  defined in getVirtualElementAt().
     */
    private function finishVirtualLayout():void
    {
        if (oldVirtualLayoutStartIndex == -1 || oldVirtualLayoutEndIndex == -1)
            return;
        
        // Remove the old ItemRenderers that aren't new ItemRenderers.  In other
        // words remove the ItemRenderers from oldVirtualLayoutStartIndex to 
        // oldVirtualLayoutEndIndex, but skip the ones in the range
        // virtualLayoutStartIndex to virtualLayoutEndIndex.

        for (var index:int = oldVirtualLayoutStartIndex; index <= oldVirtualLayoutEndIndex; index++)
        {
            // Skip the inView renderers 
            if (index >= virtualLayoutStartIndex && index <= virtualLayoutEndIndex)
            {
                index = virtualLayoutEndIndex;
                continue;
            }
            
            // Remove previously "in view" IR from the item=>IR table
            var elt:IVisualElement = indexToRenderer[index] as IVisualElement;
            delete indexToRenderer[index];

            // Free or remove the IR.
            var item:Object = dataProvider.getItemAt(index);
            if ((item != elt) && (elt is IDataRenderer))
            {
                IDataRenderer(elt).data = null;  // reduce probability of leaks
