         super.graphicElementLayerChanged(e);
         
         // One of our children have told us they might need a displayObject     
-        needsDisplayObjectAssignment = true;
-        invalidateProperties();
+        invalidateDisplayObjectOrdering();
     }
     
     //--------------------------------------------------------------------------

    /**
     *  @inheritDoc
     */
    public function removeElementAt(index:int):Object
    {
        // check RangeError
        checkForRangeError(index);
        
        var element:Object;
        
        if (_mxmlContent === null)
            return null;
        
        // Need to call itemRemoved before removing the item so anyone listening
        // for the event can access the item.
        
        elementRemoved(index);
        
        switch (_mxmlContentType)
        {
            case MXML_CONTENT_TYPE_ARRAY:
            {
                var removed:Array = _mxmlContent.splice(index, 1);
                if (removed && removed.length > 0)
                    element = removed[0];
                break;  
            }
                
            case MXML_CONTENT_TYPE_UNKNOWN:
            {
                element = _mxmlContent;
                _mxmlContent = null;
                break;
            }    
        }
            
        needsDisplayObjectAssignment = true;
        invalidateProperties();
        
        return element;
    }

        var n:int = numElements;
        for (var i:int = 0; i < n; i++)
        {
            var child:IVisualElement = getElementAt(i);

            if ( recursive && child is IStyleClient)
            {
