         if (_useVirtualLayout == value)
             return;
 
-        dispatchEvent(new Event("useVirtualLayoutChanged"));            
+        dispatchEvent(new Event("useVirtualLayoutChanged"));
+        
+        if (_useVirtualLayout && !value)  // turning virtual layout off
+            clearCachedVirtualLayoutState();
+                     
         _useVirtualLayout = value;
         if (target)
             target.invalidateDisplayList();
     }     
+    
+    /**
+     *  When useVirtualLayout=true, this method can be used by the layout target
+     *  to clear cached layout information when target state that might invalidate
+     *  such information changes.   
+     * 
+     *  For example, when a DataGroup's dataProvider or itemRenderer changes, cached 
+     *  elements sizes will become invalid. 
+     * 
+     *  When useVirtualLayout changes to false, this method is called automatically.
+     * 
+     *  Subclasses that support useVirtualLayout=true must override this method. 
+     */ 
+    public function clearCachedVirtualLayoutState():void
+    {
+    }
     
     //----------------------------------
     //  horizontalScrollPosition

     */
    public function set target(value:GroupBase):void
    {
        _target = value;
    }
    

        return new Rectangle(hsp, vsp, g.width, g.height);
    }
    
   /**
     *  Returns the specified element's layout bounds as a Rectangle or null
     *  if the index is invalid, the corresponding element is null
     *  or <code>includeInLayout=false</code>, or if this layout's target is null.
