     {
         var item:* = dataProvider.getItemAt(index);
 
-        if (!(item is IGraphicElement))
-            item = getItemSkin(item);
-
-        return LayoutItemFactory.getLayoutItemFor(item);
-    }
-    
-    protected function itemAdded(item:*, index:int):void
-    {
-        var child:DisplayObject;
+        var itemSkin:Object = getItemSkin(item);
+
+        return LayoutItemFactory.getLayoutItemFor(itemSkin);
+    }
+    
+    protected function itemAdded(item:Object, index:int):void
+    {
+        var childDO:DisplayObject;
                 
         if (item is GraphicElement) 
         {
-            item.elementHost = this;
+            var graphicItem:GraphicElement = GraphicElement(item);
+            graphicItem.elementHost = this;
         
             // If a styleable GraphicElement is being added,
             // build its protochain for use by getStyle().
             if (item is IStyleClient)
                 IStyleClient(item).regenerateStyleCache(true);
+                
+            childDO = createVisualForItem(graphicItem);
         }   
         else
         {     
             // This always adds the child to the end of the display list. Any 
             // ordering discrepancies will be fixed up in assignDisplayObjects().
-            child = addItemToDisplayList(createVisualForItem(item), item);
-        }
+            childDO = createVisualForItem(item);
+        }
+        
+        addItemToDisplayList(childDO, item);
         
         dispatchEvent(new ItemExistenceChangedEvent(
                       ItemExistenceChangedEvent.ITEM_ADD, false, false, item));

        if (dataProviderChanged)
        {
            dataProviderChanged = false;
            initializeChildrenArray();
            
            // maskChanged = true; TODO (rfrishbe): need this maskChanged?
        }

        // Check whether we manage the elements, or are they managed by an ItemRenderer
        // TODO EGeorgie: we need to optimize this, iterating through all the elements is slow.
        // Validate element properties
        var length:int = dataProvider.length;
        for (var i:int = 0; i < length; i++)
        {
            var element:GraphicElement = dataProvider.getItemAt(i) as GraphicElement;
            if (element)
                element.validateProperties();
        }
        
        if (needsDisplayObjectAssignment)
        {
            needsDisplayObjectAssignment = false;
            assignDisplayObjects();
        }
    }
    
    override public function validateSize(recursive:Boolean = false):void

    //
    //--------------------------------------------------------------------------
    
    public function getItemSkin(item:*):Object
    {
        var result:Object = null;
                    
        if (skinRegistry)
            result = skinRegistry[item];
