         throw(new Error(resourceManager.getString("components", "methodUnavailable")));
     }
     
+    //--------------------------------------------------------------------------
+    //
+    //  ISharedDisplayObject
+    //
+    //--------------------------------------------------------------------------
+    
+    /**
+     *  @private
+     */
+    private var _redrawRequested:Boolean = false;
+
+    /**
+     *  True when any of the <code>IGraphicElement</code> objects, that share
+     *  this <code>DisplayObject</code>, needs to redraw.  This is used internally
+     *  by the <code>Group</code> class and developers don't typically use this. 
+     */
+    public function get redrawRequested():Boolean
+    {
+        return _redrawRequested;
+    }
+
+    /**
+     *  @private
+     */
+    public function set redrawRequested(value:Boolean):void
+    {
+        _redrawRequested = value;
+    }
 }
 }
-
-
-import flash.display.DisplayObject; 
-
-class GroupDisplayObjectMergeData
-{
-    public var currentAssignableDO:DisplayObject;
-    public var insertIndex:int;
-}
-
-const mergeData:GroupDisplayObjectMergeData = new GroupDisplayObjectMergeData();

            
            // this should only get called if layer == 0, or we don't care
            // about layering (layeringMode == ITEM_ORDERED_LAYERING)
            assignDisplayObjectTo(item,mergeData);
        }
        
        // we've done all layer == 0 items. 

    mx_internal function removingGraphicElementChild(child:IGraphicElement):void
    {
        child.parentChanged(null);
        discardDisplayObject(child);        
    }

    /**
     *  Removes the element's <code>DisplayObject</code> from this <code>Group's</code>
     *  display list and sets the element's <code>displayObject</code> property to null.
     *
     *  The <code>Group</code> also ensures any elements that share the
     *  <code>DisplayObject</code> will be redrawn.
     * 
     *  <p>This method doesn't trigger new <code>DisplayObject</code> reassignment.
     *  To request new display object reassignment, call the
     *  <code>graphicElementLayerChanged</code> method.</p> 
     *
     *  @param element The graphic element whose display object will be discarded.
     *  @see #graphicElementLayerChanged
     */
    public function discardDisplayObject(element:IGraphicElement):void
    {
        var oldDisplayObject:DisplayObject = element.displayObject;
        element.displayObject = null;
        
        if (!oldDisplayObject)
            return;

        // If the element created the display object
        if (element.shareIndex <= 0)
        {
            super.removeChild(oldDisplayObject);

            // Redo the shared sequences. 
            invalidateDisplayObjectOrdering();
        }
        else if (oldDisplayObject is ISharedDisplayObject)
        {
            // Redraw the shared sequence
            ISharedDisplayObject(oldDisplayObject).redrawRequested = true;

            // Make sure we do a pass through the graphic elements and redraw
            // the invalid ones.  We should only redraw, no need to redo the layout.
            super.$invalidateDisplayList();
        }
    }
    
    /**
