         {
             var item:Object = dataProvider.getItemAt(index);
             var renderer:IVisualElement = indexToRenderer[index] as IVisualElement;
-            if (renderer)
+            
+            // If the (new) item is-a renderer and the old renderer is a different 
+            // DisplayObject, then we can't reuse the old renderer.
+            
+            if (renderer && (!itemIsRenderer(item) || (item == renderer)))
             {
                 setUpItemRenderer(renderer, index, item);
             }
-            else // can't reuse this renderer
+            else
             {
                 removeRendererAt(index); 
                 itemAdded(item, index);

            addedVirtualRenderer = true;
        }
        
        if (!renderer && (item is IVisualElement) && (item is DisplayObject))
        {
            renderer = IVisualElement(item);
            addedVirtualRenderer = true;            

        if (rendererFactory)
            renderer = createRenderer(rendererFactory);
        
        if (!renderer && itemIsRenderer(item))
            renderer = IVisualElement(item);
        
        if (!renderer && failRTE)
