     {       
         var item:* = getItemAt(index);
         var skin:* = getItemSkin(item);
-        
-        /* if (item is IGraphicElement)
-        {
-            removeElement(IGraphicElement(item));   
-        } */
+        var childDO:DisplayObject = item as DisplayObject;
+        
         dispatchEvent(new ItemExistenceChangedEvent(
                       ItemExistenceChangedEvent.ITEM_REMOVE, false, false, item));        
-        if (item && (item is IGraphicElement))
+        if (item && (item is GraphicElement))
+        {
             item.elementHost = null;
-        
+            item.sharedDisplayObject = null;
+            childDO = GraphicElement(item).displayObject;
+        }
+        else if (skin && skin is DisplayObject)
+        {
+        	childDO = skin as DisplayObject;
+        }
         // If the item and skin are different objects, set the skin data to 
         // null here to clear it out. Otherwise, the skin keeps a reference to the item,
         // which can cause problems later.
         if (item && skin && item != skin)
             skin.data = null;
-            
-        super.removeChildAt(index);
+                
+        if (childDO)
+        	super.removeChild(childDO);
         
         invalidateSize();
         invalidateDisplayList();

                    }
                }
            }
        }
        
        dispatchEvent(new FlexEvent(FlexEvent.CONTENT_CHANGED)); 
    }

package flex.core {
import flash.display.DisplayObject;
import flash.display.DisplayObjectContainer;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.EventDispatcher;
