Index: main/grid/display.lisp
===================================================================
--- main/grid/display.lisp	(revision main,58)
+++ main/grid/display.lisp	(revision main,62)
@@ -118,5 +118,5 @@
 
 (defmethod row-scroll-percent ((grid grid))
-  (/ (1+ (row-scroll grid)) (1+ (max-row-scroll grid))))
+  (floor (/ (1+ (row-scroll grid)) (1+ (max-row-scroll grid))) 1/100))
 
 (defmethod max-column-scroll ((grid grid))
@@ -129,2 +129,8 @@
 (defmethod column-scroll-percent ((grid grid))
   (/ (1+ (column-scroll grid)) (1+ (max-column-scroll grid))))
+
+
+
+(defun ensure-row-visible (grid row)
+  (with-slots (data) grid
+    (setf (row-scroll grid) (- row (header-rows data)))))
Index: main/grid/package.lisp
===================================================================
--- main/grid/package.lisp	(revision main,60)
+++ main/grid/package.lisp	(revision main,62)
@@ -8,5 +8,6 @@
 
    ;; Display
-   #:row-scroll #:column-scroll #:make-grid #:draw
+   #:row-scroll #:row-scroll-percent #:column-scroll #:column-scroll-percent
+   #:make-grid #:draw #:ensure-row-visible
 
    ;; Extra
Index: main/grid/row-selectable.lisp
===================================================================
--- main/grid/row-selectable.lisp	(revision main,60)
+++ main/grid/row-selectable.lisp	(revision main,62)
@@ -9,5 +9,7 @@
 
 (defmethod (setf selected-row) :around (i (d row-selectable))
-  (call-next-method (bound i 0 (rows d)) d))
+  ;; TODO: This was hacked to take out header rows from other classes
+  ;; that I wish didn't affect the call.
+  (call-next-method (bound i 0 (- (rows d) (header-rows d) 1)) d))
 
 (defvar *recursive* nil)
