      *  for the initial layout and then, if it has changed, we loop through 
      *  the layout items again and fix up the x/width values.
      */
-    private function updateDisplayListInView(startIndex:int = -1):void
+    private function updateDisplayListVirtual(startIndex:int = -1):void
     {
         var layoutTarget:GroupBase = target; 
         var eltCount:int = layoutTarget.numLayoutElements;
         var targetWidth:Number = layoutTarget.width;
         var minVisibleY:Number = layoutTarget.verticalScrollPosition;
         var maxVisibleY:Number = minVisibleY + layoutTarget.height;
-        
-        // TBD: don't assume typicalLayoutElement is set, use 1st row...
-        var typicalWidth:Number = typicalLayoutElement.getPreferredBoundsWidth();
-        var typicalHeight:Number = typicalLayoutElement.getPreferredBoundsHeight();
-        llv.length = layoutTarget.numLayoutElements;        
-        llv.minorSize = Math.max(llv.minorSize, typicalWidth);
-        llv.defaultMajorSize = typicalHeight;
+       
+        updateLLV(layoutTarget);
         if (startIndex < 0)            
-            startIndex = llv.indexOf(minVisibleY);           
+            startIndex = llv.indexOf(minVisibleY);     
+            
+        var fixedRowHeight:Number = NaN;
+        if (!variableRowHeight)
+            fixedRowHeight = rowHeight;  // may query typicalLayoutElement, elt at index=0
          
         layoutTarget.beginVirtualLayout(startIndex);
         var contentWidth:Number = llv.minorSize;

     *  The index of the last row that's part of the layout and within
     *  the layout target's scrollRect, or -1 if nothing has been displayed yet.
     * 
     *  Note that the row may only be partially in view.
     * 
     *  @see firstIndexInView

     */
    private var _horizontalAlign:String = HorizontalAlign.LEFT;

    [Inspectable(category="General", enumeration="left,right,center,justify,contentJustify", defaultValue="left")]

    /** 
     *  Horizontal alignment of layout elements.
     * 
     *  If the value is one of "left", "right", "center"  then the 
     *  layout element is aligned relative to the target's contentWidth.
     * 
     *  If the value is "contentJustify" then the layout element's actual
     *  width is set to the contentWidth.
     * 
     *  If the value is "justify" then the layout element's actual width
     *  is set to the target's width.
     *
     *  This property does not affect the layout's measured size.
     *  
     *  @default "left"
     */
    public function get horizontalAlign():String
    {
