         //owner a chance to update the renderer. 
         else if (renderer.owner != this)
             IItemRendererOwner(renderer.owner).updateRenderer(renderer);
-                        
+        
+        // technically if this got called "recursively", this renderersBeingUpdated flag
+        // would be prematurely set to false, but in most cases, this check should be 
+        // good enough.
+        renderersBeingUpdated = false;
     }
 
     

            
            case CollectionEventKind.UPDATE:
            {
                //update the renderer's data and data-dependant
                //properties. 
                for (var i:int = 0; i < event.items.length; i++)

    private function updateRenderer(renderer:IVisualElement, data:Object):void
    {
        if (!renderer)
           return;

        // keep track of whether we are actively updating an renderers 
        // so we can ignore any collectionChange.UPDATE events
        renderersBeingUpdated = true;
        
        //Set the data    
        if ((renderer is IDataRenderer) && (renderer != data))
            IDataRenderer(renderer).data = data;
        
        //Newly created renderer with no owner, set owner to this     
        if (!renderer.owner)
