     {
         super.updateDisplayList(unscaledWidth, unscaledHeight);
 
-        // TODO!!! Move this above the GraphicElement drawing once layout objects 
-        // understand how to layout GraphicElements. 
         if (_layout)
             _layout.updateDisplayList(unscaledWidth, unscaledHeight);
 
-        // Iterate through the graphic elements, clear their graphics and draw them
-        var length:int = numItems;
-        for (var i:int = 0; i < length; i++)
-        {
-            var element:IGraphicElement = getItemAt(i) as IGraphicElement;
-            
-            if (element && !alwaysUseItemRenderer)
-            {
-                var g:Graphics;
-                var elementShape:Shape = elementToDisplayObjectMap[element] as Shape;
-                if (elementShape)
-                {
-                    g = elementShape.graphics;
-                }
-                else
-                {
-                    var elementSprite:Sprite = elementToDisplayObjectMap[element] as Sprite;
-                    if (elementSprite)
-                        g = elementSprite.graphics;
-                }
-                                
-                if (g)
-                {
-                    g.clear();
-                    element.draw(g); 
-                }
-            }
-        }
-            
+        // Check whether we manage the elements, or are they managed by an ItemRenderer
+        if (!alwaysUseItemRenderer)
+        {
+            // TODO EGeorgie: we need to optimize this, iterating through all the elements is slow.
+            // Iterate through the graphic elements, clear their graphics and draw them
+            var length:int = numItems;
+            for (var i:int = 0; i < length; i++)
+            {
+                var element:GraphicElement = getItemAt(i) as GraphicElement;
+                if (element)
+                    element.validateDisplayList();
+            }
+        }
+
+        // TODO EGeorgie: maybe move this to commitProperties, or at least before
+        // children validateDisplayList()    
         if (transformChanged)
         {
             transformChanged = false;

                }
            }
        }
    }
    
    override protected function measure():void
    {
        super.measure();
        
        if (_layout)

import mx.events.CollectionEvent;
import mx.events.PropertyChangeEvent;
import mx.events.PropertyChangeEventKind;
import flex.graphics.graphicsClasses.GraphicElement;
import flex.graphics.IAssignableDisplayObjectElement;
import flex.graphics.IDisplayObjectElement;
import flex.graphics.IGraphicElement;
