     
     /**
      *  @private
+     *  True if it's OK to recycle virtual item renderers.   More about
+     *  the conditions under which recyling can work at getVirtualElementAt().
+     */
+    private function isRecyclingOK():Boolean
+    {
+        return (itemRendererFunction == null) && (itemRenderer != null);   
+    }
+    
+    /**
+     *  @private
      *  Called before super.updateDisplayList() if layout.useVirtualLayout=true.
      *  Copies virtualRendererIndices to oldRendererIndices, clears virtualRendererIndices
      *  (which will be repopulated by subsequence getVirtualElementAt() calls), and

                setUpItemRenderer(elt, index, dataProvider.getItemAt(index));
            else
            {
                var item:Object = dataProvider.getItemAt(index);
                var recyclingOK:Boolean = (itemRendererFunction == null) && (itemRenderer != null);
                
                if (recyclingOK && (freeRenderers.length > 0))
                {
                    elt = freeRenderers.pop();
                    elt.visible = true;

import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;
import mx.events.PropertyChangeEvent;
import mx.utils.MatrixUtil;

import spark.components.supportClasses.GroupBase;
import spark.events.RendererExistenceEvent;
