     }
 
     /**
+     *  Sets the <code>columnCount</code> property without causing
+     *  invalidation.  
+     * 
+     *  This method is intended to be used by subclass updateDisplayList() 
+     *  methods to sync the columnCount property with the actual number
+     *  of visible columns.
+     *
+     *  @param value The number of visible columns.
+     */
+    protected function setColumnCount(value:int):void
+    {
+        if (_columnCount == value)
+            return;
+        var oldValue:int = _columnCount;
+        _columnCount = value;
+        dispatchEvent(PropertyChangeEvent.createUpdateEvent(this, "columnCount", oldValue, value));
+    }
+        
+    
+    //----------------------------------
+    //  requestedColumnCount
+    //----------------------------------
+
+    private var _requestedColumnCount:int = -1;
+    
+    [Inspectable(category="General")]
+
+    /**
+     *  Specifies the number of items to display.
+     * 
+     *  If <code>requestedColumnCount</code> is -1, then all of them items are displayed.
+     * 
+     *  This value implies the layout's <code>measuredWidth</code>.
+     * 
+     *  If the width of the <code>target</code> has been explicitly set,
+     *  this property has no effect.
+     * 
+     *  @default -1
+     */
+    public function get requestedColumnCount():int
+    {
+        return _requestedColumnCount;
+    }
+
+    /**
      *  @private
      */
-    public function set columnCount(value:int):void
-    {
-        explicitColumnCount = value;
-
-        if (_columnCount == value) return;
-
-        setColumnCount(value);
- 	   	var layoutTarget:Group = target;
-    	if (layoutTarget != null) 
-    	{
-        	layoutTarget.invalidateSize();
-            layoutTarget.invalidateDisplayList();
-    	}
-    }
-
-    /**
-     *  Sets the <code>columnCount</code> property without causing
-     *  invalidation or setting the <code>explicitColumnCount</code>
-     *  property, which permanently locks in the number of columns.
-     *
-     *  @param v The row count.
-     */
-    protected function setColumnCount(v:int):void
-    {
-        _columnCount = v;
-    }
+    public function set requestedColumnCount(value:int):void
+    {
+        if (_requestedColumnCount == value)
+            return;
+                               
+        _requestedColumnCount = value;
+        invalidateTargetSizeAndDisplayList();
+    }    
     
     //----------------------------------
     //  explicitColumnWidth

            minWidth += vgap;
        }
        
        layoutTarget.measuredWidth = (explicitColumnCount == -1) ? preferredWidth : visibleWidth;
        layoutTarget.measuredHeight = preferredHeight;

        layoutTarget.measuredMinWidth = minWidth; 

            preferredHeight = Math.max(preferredHeight, li.preferredSize.y);
            preferredWidth += li.preferredSize.x; 
            
            var vcr:Boolean = (reqColumns != -1) && (visibleColumns < reqColumns);
            if (vcr || (reqColumns == -1))
            {
                var mw:Number =  hasPercentWidth(li) ? li.minSize.x : li.preferredSize.x;
                var mh:Number = hasPercentHeight(li) ? li.minSize.y : li.preferredSize.y;                   
