Index: main/grid/display.lisp
===================================================================
--- main/grid/display.lisp	(revision main,56)
+++ main/grid/display.lisp	(revision main,57)
@@ -5,13 +5,11 @@
 (defclass grid ()
   ((data :initarg :data)
-   (header-columns :type (integer 0) :initarg :header-columns)
    (window :initarg :window)
    (row-scroll :type (integer 0) :initform 0 :accessor row-scroll)
    (column-scroll :type (integer 0) :initform 0 :accessor column-scroll)))
 
-(defun make-grid (window data &key (header-columns 0))
+(defun make-grid (window data)
   (make-instance 'grid
                  :data data
-                 :header-columns header-columns
                  :window window))
 
@@ -32,17 +30,18 @@
 
 (defun column-split (grid column)
-  (with-slots (header-columns) grid
-    (saturate header-columns column))) 
+  (with-slots (data) grid
+    (saturate (header-columns data) column))) 
 
 (defun column-offset (grid column)
-  (with-slots (data header-columns column-scroll) grid
-    (let ((base (+ header-columns column-scroll))
-          (column-widths (mapcar (peval 'column-width data)
-                                 (range header-columns))))
-      (multiple-value-bind (in-header in-data) (column-split grid column)
-        (let ((w1 (reduce '+ column-widths :end in-header))
-              (w2 (reduce '+ column-widths :start base
-                                           :end (+ base in-data))))
-          (+ w1 w2))))))
+  (with-slots (data column-scroll) grid
+    (let ((header-columns (header-columns data)))
+      (let ((base (+ header-columns column-scroll))
+            (column-widths (mapcar (peval 'column-width data)
+                                   (range header-columns))))
+        (multiple-value-bind (in-header in-data) (column-split grid column)
+          (let ((w1 (reduce '+ column-widths :end in-header))
+                (w2 (reduce '+ column-widths :start base
+                                             :end (+ base in-data))))
+            (+ w1 w2)))))))
 
 (defun row-split (grid row)
@@ -96,15 +95,16 @@
 
 (defun draw (grid)
-  (with-slots (data header-columns window column-scroll) grid
-    (erase window)
-    (let ((x 0))
-      (dotimes (i header-columns)
-        (draw-column grid i x)
-        (incf x (column-width data i)))
-      (do ((i (+ header-columns column-scroll) (incf i)))
-          ((or (>= i (columns data))
-               (> x (nth-value 1 (size window)))))
-        (draw-column grid i x)
-        (incf x (column-width data i))))))
+  (with-slots (data window column-scroll) grid
+    (let ((header-columns (header-columns data)))
+      (erase window)
+      (let ((x 0))
+        (dotimes (i header-columns)
+          (draw-column grid i x)
+          (incf x (column-width data i)))
+        (do ((i (+ header-columns column-scroll) (incf i)))
+            ((or (>= i (columns data))
+                 (> x (nth-value 1 (size window)))))
+          (draw-column grid i x)
+          (incf x (column-width data i)))))))
 
 
@@ -121,6 +121,6 @@
 
 (defmethod max-column-scroll ((grid grid))
-  (with-slots (data header-columns window) grid
-    (- (columns data) header-columns 1)))
+  (with-slots (data window) grid
+    (- (columns data) (header-columns data) 1)))
 
 (defmethod (setf column-scroll) :around (i (grid grid))
Index: main/grid/model.lisp
===================================================================
--- main/grid/model.lisp	(revision main,56)
+++ main/grid/model.lisp	(revision main,57)
@@ -18,10 +18,10 @@
    "Returns the number of columns of data."))
 
-#|(defgeneric header-columns (grid-data)
+(defgeneric header-columns (grid-data)
   (:documentation
    "Returns the number of columns that contain header data, and may be
 considered for locking in place during scrolling operations.  Header
 columns are always at the left of the grid (from column 0).")
-  (:method (grid-data) 0))|#
+  (:method (grid-data) 0))
 
 (defgeneric column-width (grid-data column)
Index: main/grid/package.lisp
===================================================================
--- main/grid/package.lisp	(revision main,56)
+++ main/grid/package.lisp	(revision main,57)
@@ -1,5 +1,5 @@
 (defpackage #:grid
   (:use #:cl #:dso-util #:tui-display-string #:tui-output #:tui-window)
-  (:export #:rows #:header-rows #:columns #:column-width #:item
-           #:uses-display-strings #:row-scroll #:column-scroll #:make-grid
-           #:draw))
+  (:export #:rows #:header-rows #:columns #:header-columns #:column-width
+           #:item #:uses-display-strings #:row-scroll #:column-scroll
+           #:make-grid #:draw))
Index: main/grid/test.lisp
===================================================================
--- main/grid/test.lisp	(revision main,56)
+++ main/grid/test.lisp	(revision main,57)
@@ -15,4 +15,7 @@
 
 (defmethod columns ((gd test)) 10)
+
+(defmethod header-columns ((gd test))
+  1)
 
 (defmethod column-width ((gd test) column)
@@ -44,5 +47,5 @@
       (clear screen)
       (with-subwindow (window screen 5 16 0 0)
-        (let ((grid (make-grid window data :header-columns 1)))
+        (let ((grid (make-grid window data)))
           (flet ((try (i)
                    (setf (row-scroll grid) i)
@@ -60,5 +63,5 @@
             (try 99))))
       (clear screen)
-      (let ((grid (make-grid screen data :header-columns 1)))
+      (let ((grid (make-grid screen data)))
         (draw grid)
         (read-key screen)))))
