             }
             else
             {
-                dispatchEvent(new ItemExistenceChangedEvent(ItemExistenceChangedEvent.ITEM_REMOVE, false, false, item, -1, elt));
+                // TODO (rfrishbe): it's not quite i + startIndex, especially when considering the layer property.
+                dispatchEvent(new RendererExistenceEvent(RendererExistenceEvent.RENDERER_REMOVE, 
+                                false, false, elt, i + lastValidChildIndex, item));
                 super.removeChild(DisplayObject(elt));
             }
         }

        var myItemRenderer:IVisualElement = itemToRenderer[item];
        delete itemToRenderer[item];
        
        dispatchEvent(new ItemExistenceChangedEvent(
                      ItemExistenceChangedEvent.ITEM_REMOVE, false, false, 
                      item, index, myItemRenderer));
        
        // 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,

     */
    override protected function updateDisplayList(unscaledWidth:Number, unscaledHeight:Number):void
    {
        if (layout && layout.useVirtualLayout)
        {
            virtualLayoutUnderway = true;
            virtualLayoutStartIndex = -1;
