             if (_columns == value)
                 return;
             
+            generatedColumns = false;
+            setColumns(value);
+        }
+        
+        private function setColumns(value:IList):void
+        {
             // Remove the old column listener, and set each column's grid=null, columnIndex=-1.
             
-            const oldColumns:IList = columns;
+            const oldColumns:IList = _columns;
             if (oldColumns)
             {
                 oldColumns.removeEventListener(CollectionEvent.COLLECTION_CHANGE, columns_collectionChangeHandler);

            // addEventListener parameter) is safe, since the listener's lifetime is the 
            // same as this object.        
            
            const newColumns:IList = columns;
            if (newColumns)
            {
                newColumns.addEventListener(CollectionEvent.COLLECTION_CHANGE, columns_collectionChangeHandler, false, 0, true);            

    import flash.geom.Point;
    import flash.geom.Rectangle;
    
    import mx.collections.ArrayList;
    import mx.collections.IList;
    import mx.core.IFactory;
    import mx.core.IVisualElement;
