anchor.diff:       ;; if the menu type is a checklist
        (if (eq (.type menu) :checklist)
            ;; return all checked items in a list.
  +         ;; TODO: once we get rid of the checklist type, always return all checked items.
            (with-accessors ((items .items) (checklist .checklist)) menu
              (return-from select-item (loop for i from 0 below (length items) if (nth i checklist) collect (nth i items))))
   
  -         ;; else, if the menu type is selection, act on the current item.
  +         ;; else, if the menu type is a selection, act on the current item.
  +         ;; TODO: provide a current-item slot, so we dont have to get the current item every time.
            (let ((item (current-item menu)))
  +           ;; depending on the type of the item
              (typecase item
                ;; if we have just a normal string or a symbol, just return it.
                (symbol
  
positive.code:       (setf item (sub2rmi layout (list i j))))))
  
  (defun format-menu-item (menu item-number)
    (with-accessors ((items .items)
                     (checklist .checklist)
                     (type .type)
                     (current-item-number .current-item-number)
                     (mark .current-item-mark)
                     (sub-window .sub-window)) menu
      (format sub-window "~A~A~A"
              ;; two types of menus: :selection :checklist
              ;; only show the checkbox before the item in checklists
              (if (eq type :checklist)
                  (if (nth item-number checklist) "[X] " "[ ] ")
                  "")
  
negative.code:                 (string item)
                  (menu-item (.name item)))))))
  
  (defun draw-menu-item (menu item-number i j)
    "Draw the item given by item-number at item position i,j in the sub-window of the menu."
    (with-accessors ((current-item-number .current-item-number)
                     (max-item-length .max-item-length)
                     (sub-window .sub-window)) menu
      (move sub-window i (* j max-item-length))
  
      ;; format the item text
      (let ((item-text (format-menu-item menu item-number)))
        ;; display it in the sub-window of the menu
        (format sub-window item-text))
  
      ;; if the item is the current item, change its attributes
      (when (= item-number current-item-number)
        (move sub-window i (* j max-item-length))
        (change-attributes sub-window max-item-length '(:reverse) ))))
  
  (defgeneric draw-menu (s)
    (:documentation "Draw a menu."))
  
  (defmethod draw-menu ((menu menu-window))
    (with-accessors ((layout .layout) (scrolled-layout .scrolled-layout) (scrolled-region-start .scrolled-region-start)
                     (title .title) (border .border) (len .max-item-length) (sub-win .sub-window)) menu
      (clear sub-win)
      (let ((m  (car  layout))
            (n  (cadr layout))
  