     /**
      *  @private
      */
-    override protected function elementBoundsLeftOfScrollRect(scrollRect:Rectangle):Rectangle
+    override protected function getElementBounds(index:int):Rectangle
+    {
+        if (!useVirtualLayout)
+            return super.getElementBounds(index);
+
+        var g:GroupBase = GroupBase(target);
+        if (!g || (index < 0) || (index >= g.numElements)) 
+            return null;
+
+        var col:int = index % _columnCount;
+        var row:int = index / Math.max(1, _columnCount);
+        return new Rectangle(leftEdge(col), topEdge(row), _columnWidth, _rowHeight);
+    }
+
+    /**
+     *  @private
+     */
+    override protected function getElementBoundsLeftOfScrollRect(scrollRect:Rectangle):Rectangle
     {
         var bounds:Rectangle = new Rectangle();
         // Find the column that spans or is to the left of the scrollRect left edge.

    /**
     *  @private
     */
    override protected function elementBoundsAboveScrollRect(scrollRect:Rectangle):Rectangle
    {
        var bounds:Rectangle = new Rectangle();
        // Find the row that spans or is above the scrollRect top edge

            return;

        _orientation = value;
        _tileWidthCached = _tileHeightCached = NaN;
        invalidateTargetSizeAndDisplayList();
    }

