     /**
      *  Returns the width of the column at the given index. Returns
      *  the width specified by setColumnWidth. If no width has been
-     *  specified, returns the defaultColumnWidth.
+     *  specified, returns the typical width. If no typical width has
+     *  been set, it returns the defaultColumnWidth.
      */
     public function getColumnWidth(col:int):Number
     {    
         var w:Number = NaN;
-        
+
+        w = _columnWidths[col];
+        
+        if (isNaN(w))
+            w = typicalCellWidths[col];
+        
+        if (isNaN(w))
+            w = this.defaultColumnWidth;
+        
+        return w;
+    }
+    
+    /**
+     *  Sets the width of a given column.
+     */
+    public function setColumnWidth(col:int, width:Number):void
+    {
         // out of bounds col will throw an error..should we handle it?
-        if (_columnWidths)
-            w = _columnWidths[col];
-        
-        if (!isNaN(w))
-            return w;
-        
-        return this.defaultColumnWidth;
-    }
-    
-    /**
-     *  Sets the width of a given column.
-     */
-    public function setColumnWidth(col:int, width:Number):void
-    {
-        // out of bounds col will throw an error..should we handle it?
-        if (_columnWidths)
-            _columnWidths[col] = width;
+        _columnWidths[col] = width;
     }
 
     /**

        
        rowList.clearColumns(startColumn, count);
        
        clearVector(_columnWidths, NaN, startColumn, count);
        clearVector(typicalCellWidths, NaN, startColumn, count);
        clearVector(typicalCellHeights, NaN, startColumn, count);
        
        // cache is invalid because node values might have changed
        recentNode = null;

     */
    public function getColumnIndexAt(x:Number, y:Number):int
    {
        var cur:Number = x;
        var i:int;
        
