                     column = getGridColumn(colIndex);
                     var factory:IFactory = itemToRenderer(column, dataItem);
                     renderer = allocateGridElement(factory) as IGridItemRenderer;
-                    
-                    // Track which item renderers were created (uncommon) or recycled
-                    // for the sake of the IGridItemRenderer prepare() method.
-
-                    if (createdGridElement)
-                    {
-                        if (!createdItemRenderers)
-                            createdItemRenderers = new Vector.<IGridItemRenderer>();
-                        createdItemRenderers.push(renderer);
-                    }
-                    else
-                        allocatedItemRenderers.push(renderer);
                 }
                 if (renderer.parent != rendererLayer)
                     rendererLayer.addElement(renderer);
                 newVisibleItemRenderers.push(renderer);
                 initializeItemRenderer(renderer, rowIndex, colIndex);
+                
+                renderer.prepare(!createdGridElement);
                 
                 var colWidth:Number = gridDimensions.getColumnWidth(colIndex);
                 layoutItemRenderer(renderer, cellX, cellY, colWidth, rowHeight);

            else
                availableHeight -= rowHeight + rowGap;            
        }
        
        // Run the prepare() method for renderers created or recycled for this pass

        if (createdItemRenderers)
        {
            for each (var createdRenderer:IGridItemRenderer in createdItemRenderers)
                createdRenderer.prepare(false);
        }
        
        for each (var allocatedRenderer:IGridItemRenderer in allocatedItemRenderers)
            allocatedRenderer.prepare(true);
        
        // Free renderers that aren't in use
        

        
        const newVisibleRowIndices:Vector.<int> = new Vector.<int>();
        const newVisibleItemRenderers:Vector.<IGridItemRenderer> = new Vector.<IGridItemRenderer>();
        
        var cellX:Number = startCellX;
        var cellY:Number = startCellY;
