     //----------------------------------
     //  useVirtualLayout
     //----------------------------------
+    
+    //----------------------------------
+    //  target
+    //----------------------------------
+    
+    private var _target:GroupBase;
+    
+    /**
+     * @private
+     */
+    override public function set target(value:GroupBase):void
+    {
+        if (_target == value)
+            return;
+        
+        if (_target)
+            _target.removeEventListener(FlexEvent.MEASURED_SIZE_FINAL, measuredSizeFinalHandler);
+        
+        _target = value;
+        super.target = value;
+        
+        if (_target)
+            _target.addEventListener(FlexEvent.MEASURED_SIZE_FINAL, measuredSizeFinalHandler, false, 0, true);
+    }    
 
     /**
      *  GridLayout only supports virtual layout, the value of this property can not be changed.

import mx.core.mx_internal;
import mx.events.CollectionEvent;
import mx.events.CollectionEventKind;
import mx.events.PropertyChangeEvent;
import mx.managers.ILayoutManagerClient;
import mx.managers.ILayoutManagerContainerClient;

import spark.components.DataGrid;
import spark.components.Grid;
import spark.layouts.supportClasses.LayoutBase;

use namespace mx_internal;

        if (scrollR && !visibleItemRenderersBounds.containsRect(scrollR))
            grid.invalidateDisplayList();
    }
    
    /**
     *  @private
     *  Runs when a renderer's measured size has changed, typically because an asynchronously
     *  loaded image has completed loading.
     * 
     *  @langversion 3.0
     *  @playerversion Flash 10.2
     *  @playerversion AIR 2.0
     *  @productversion Flex 4.5
     */
    private function measuredSizeFinalHandler(event:FlexEvent):void
    {
        if (!grid || !grid.variableRowHeight)
            return;
        
        var target:DisplayObject = event.target.parent as DisplayObject;
        var renderer:IGridItemRenderer = null;
        
        while (target)
        {
            renderer = target as IGridItemRenderer;
            if (renderer)
                break;
            target = target.parent as DisplayObject;
        }
        
        if (renderer && renderer.grid)
            renderer.grid.invalidateCell(renderer.rowIndex, renderer.columnIndex);
    }    
    
    /**
	 *  @private
