Index: main/grid/display.lisp
===================================================================
--- main/grid/display.lisp	(revision main,55)
+++ main/grid/display.lisp	(revision main,56)
@@ -5,5 +5,4 @@
 (defclass grid ()
   ((data :initarg :data)
-   (header-rows :type (integer 0) :initarg :header-rows)
    (header-columns :type (integer 0) :initarg :header-columns)
    (window :initarg :window)
@@ -11,8 +10,7 @@
    (column-scroll :type (integer 0) :initform 0 :accessor column-scroll)))
 
-(defun make-grid (window data &key (header-rows 0) (header-columns 0))
+(defun make-grid (window data &key (header-columns 0))
   (make-instance 'grid
                  :data data
-                 :header-rows header-rows
                  :header-columns header-columns
                  :window window))
@@ -49,11 +47,10 @@
 
 (defun row-split (grid row)
-  (with-slots (header-rows) grid
-    (saturate header-rows row)))
+  (with-slots (data) grid
+    (saturate (header-rows data) row)))
 
 (defun row-offset (grid row)
-  (with-slots (header-rows) grid
-    (multiple-value-bind (in-header in-data) (row-split grid row)
-      (+ in-header in-data))))
+  (multiple-value-bind (in-header in-data) (row-split grid row)
+    (+ in-header in-data)))
 
 (defun draw-header-corner-item (grid row column)
@@ -87,13 +84,14 @@
 
 (defun draw-column (grid column x)
-  (with-slots (data header-rows window row-scroll) grid
-    (dotimes (i header-rows)
-      (draw-cell grid i column i x))
-    (dotimes (i (- (size window) header-rows))
-      (let* ((y (+ i header-rows))
-             (row (+ y row-scroll)))
-        (when (>= row (rows data))
-          (return))
-        (draw-cell grid row column y x)))))
+  (with-slots (data window row-scroll) grid
+    (let ((header-rows (header-rows data)))
+      (dotimes (i header-rows)
+        (draw-cell grid i column i x))
+      (dotimes (i (- (size window) header-rows))
+        (let* ((y (+ i header-rows))
+               (row (+ y row-scroll)))
+          (when (>= row (rows data))
+            (return))
+          (draw-cell grid row column y x))))))
 
 (defun draw (grid)
@@ -113,5 +111,5 @@
 
 (defmethod max-row-scroll ((grid grid))
-  (with-slots (data header-rows window) grid
+  (with-slots (data window) grid
     (max 0 (- (rows data) (size window)))))
 
Index: main/grid/model.lisp
===================================================================
--- main/grid/model.lisp	(revision main,55)
+++ main/grid/model.lisp	(revision main,56)
@@ -7,10 +7,10 @@
    "Returns the number of rows of data."))
 
-#|(defgeneric header-rows (grid-data)
+(defgeneric header-rows (grid-data)
   (:documentation
    "Returns the number of rows that contain header data, and may be
 considered for locking in place during scrolling operations.  Header
 rows are always at the top of the grid (from row 0).")
-  (:method (grid-data) 0))|#
+  (:method (grid-data) 0))
 
 (defgeneric columns (grid-data)
Index: main/grid/package.lisp
===================================================================
--- main/grid/package.lisp	(revision main,55)
+++ main/grid/package.lisp	(revision main,56)
@@ -1,4 +1,5 @@
 (defpackage #:grid
   (:use #:cl #:dso-util #:tui-display-string #:tui-output #:tui-window)
-  (:export #:rows #:columns #:column-width #:item #:uses-display-strings
-           #:row-scroll #:column-scroll #:make-grid #:draw))
+  (:export #:rows #:header-rows #: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,55)
+++ main/grid/test.lisp	(revision main,56)
@@ -10,4 +10,7 @@
 
 (defmethod rows ((gd test)) 10)
+
+(defmethod header-rows ((gd test))
+  1)
 
 (defmethod columns ((gd test)) 10)
@@ -41,5 +44,5 @@
       (clear screen)
       (with-subwindow (window screen 5 16 0 0)
-        (let ((grid (make-grid window data :header-columns 1 :header-rows 1)))
+        (let ((grid (make-grid window data :header-columns 1)))
           (flet ((try (i)
                    (setf (row-scroll grid) i)
@@ -57,5 +60,5 @@
             (try 99))))
       (clear screen)
-      (let ((grid (make-grid screen data :header-columns 1 :header-rows 1)))
+      (let ((grid (make-grid screen data :header-columns 1)))
         (draw grid)
         (read-key screen)))))
