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

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

    /**
     *  @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
