         }
 
         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;   
     }
     
     /**

            return;
        }
                
        var obj:DisplayObject = DisplayObject(createRendererForItem(_typicalItem, false));
        if (!obj)
        {
            setTypicalLayoutElement(null);
            return;
        }

        super.addChild(obj)            
        if (obj is IInvalidating)
            IInvalidating(obj).validateNow();
        setTypicalLayoutElement(obj);

        // Set the owner property     
        myItemRenderer.owner = this;

        if (myItemRenderer is IItemRenderer)
        	IItemRenderer(myItemRenderer).labelText = itemToLabel(item);
                    
