                 
         if (element is IDisplayObjectElement)
         {
-            var elementDO:DisplayObject = IDisplayObjectElement(element).displayObject;
+            var elementDO:DisplayObject = IDisplayObjectElement(element).createDisplayObject();
             elementToDisplayObjectMap[element] = elementDO;
+            IDisplayObjectElement(element).displayObject = elementDO;
             result = super.addChildAt(elementDO, index);
         }
         else if (element is IAssignableDisplayObjectElement)
         {
-            // TODO!!! For now we will always create a DO for the element. 
-            // This needs optimization      
-            var newShape:DisplayObject = IAssignableDisplayObjectElement(element).createDisplayObject();
-            elementToDisplayObjectMap[element] = newShape;
-            IAssignableDisplayObjectElement(element).displayObject = newShape;
-            result = super.addChildAt(newShape, index);
+            throw new Error("IAssignableDisplayObjectElement not allowed");
         }
     
         if (element is ILayoutManagerClient)

            _oldMaskType = _maskType;
            _maskType = value;
            maskTypeChanged = true;
        }
    }
    

    
    [Bindable("propertyChange")]
    [Inspectable(category="General")]
    private var _actualFilters:Array = [];
    
    override public function set filters(value:Array):void
    {
