             return;
         }
                 
-        var obj:DisplayObject = DisplayObject(createRendererForItem(_typicalItem, false));
+        var renderer:IVisualElement = createRendererForItem(_typicalItem, false);
+        var obj:DisplayObject = DisplayObject(renderer);
         if (!obj)
         {
             setTypicalLayoutElement(null);
             return;
         }
 
-        super.addChild(obj)            
+        super.addChild(obj);
+        updateRendererData(renderer, _typicalItem);
         if (obj is IInvalidating)
             IInvalidating(obj).validateNow();
         setTypicalLayoutElement(obj);

        
        var myItemRenderer:IVisualElement = createRendererForItem(item);
        indexToRenderer.splice(index, 0, myItemRenderer);

        addItemRendererToDisplayList(myItemRenderer as DisplayObject, index);
        dispatchEvent(new RendererExistenceEvent(
                      RendererExistenceEvent.RENDERER_ADD, false, false, 
                      myItemRenderer, index, item));

        }

        return myItemRenderer;
    }
    
    /**
     *  @private 
     *  Set the renderer's data to the item, but only if the item and 
     *  renderer are different.   This step isn't integrated into createRendererForItem()
     *  so that we can delay calling the IR's 'set data' method until after the
     *  IR has a valid parent, i.e. until after it has been added to the 
     *  display list.
     */
    private function updateRendererData(renderer:IVisualElement, item:Object):void
    {
        if ((renderer is IDataRenderer) && (renderer != item))
            IDataRenderer(renderer).data = item;   
    }
    
    /**
