      */
     public function getContentWidth(columnCountOverride:int = -1):Number
     {
-		const nCols:int = (columnCountOverride == -1) ? columnCount : columnCountOverride;
+		const nCols:int = (columnCountOverride == -1) ? _columnCount : columnCountOverride;
         var contentWidth:Number = 0;
+        var width:Number;
+        var measuredColCount:int = 0;
+        
+        for (var i:int = 0; (i < _columnCount) && (measuredColCount < nCols); i++)
+        {
+            if (i >= _columnWidths.length)
+            {
+                contentWidth += defaultColumnWidth;
+                measuredColCount++;
+                continue;
+            }
+            
+            width = _columnWidths[i];
+            
+            // fall back on typical width
+            if (isNaN(width))
+            {
+                width = typicalCellWidths[i];
+                // column.visible==false, skip this column.
+                if (width == 0)
+                    continue;
+            }
+            
+            // fall back on defaultColumnWidth
+            if (isNaN(width))
+                width = defaultColumnWidth;
+            
+            contentWidth += width;
+            measuredColCount++;
+        }
         
         if (nCols > 1)
             contentWidth += (nCols - 1) * columnGap;
-        
-        // short circuit for no column widths set yet.
-        if (!_columnWidths)
-            return contentWidth + nCols * defaultColumnWidth;
-        
-        for (var i:int = 0; i < nCols; i++)
-        {
-            if ((i >= _columnWidths.length) || isNaN(_columnWidths[i]))
-                contentWidth += defaultColumnWidth;
-            else
-                contentWidth += _columnWidths[i];
-        }
         
         return contentWidth;
     }

    {
        const nCols:int = (columnCountOverride == -1) ? _columnCount : columnCountOverride;
        var contentWidth:Number = 0;
        
        for (var columnIndex:int = 0; columnIndex < nCols; columnIndex++)
        {
            var width:Number = columnIndex < _columnCount ? typicalCellWidths[columnIndex] : NaN;
            contentWidth += isNaN(width) ? 0 : width;
        }
        
        if (nCols > 1)
            contentWidth += (nCols - 1) * columnGap;

        return contentWidth;
    }

        recentNode = null;
        recentNode2 = null;
    }
    
    /**
     *  Handles changes in the dataProvider.
     */
