anchor.diff:      (unless armed
         (arm-menu client)
         (mapc #'disarm-menu (menu-children client))
  -      (setf armed t)
  -      (armed-callback button client id))
  +      (arm-gadget button t))
       (dispatch-repaint button (sheet-region button))))
   
   (defmethod disarm-menu ((button menu-button-pane))
     (with-slots (client armed id) button
       (when armed
  -      (setf armed nil)
  -      (disarmed-callback button client id)
  +      (disarm-gadget button)
         (dispatch-repaint button (sheet-region button)))))
   
   (defun menu-draw-highlighted (gadget)
  
positive.code: 
  (defun create-substructure (sub-menu client)
    (let* ((frame *application-frame*)
  	 (manager (frame-manager frame)))
      (with-look-and-feel-realization (manager frame)
        (let* ((frame *application-frame*)
  	     (items (mapcar #'(lambda (item)
  			        (make-menu-button-from-menu-item item client))
  			    (slot-value (find-command-table (slot-value sub-menu 'command-table)) 'menu)))
  	     (rack (make-pane-1 manager frame 'vrack-pane
  			        :background +grey80+ :contents items))
  	    ;(raised (make-pane-1 manager frame 'raised-pane :contents (list rack)))
  	     (raised (make-pane-1 manager frame 'raised-pane :border-width 2 :background +gray80+ :contents (list rack))))
        (with-slots (bottomp) sub-menu
          (multiple-value-bind (xmin ymin xmax ymax)
  	    (bounding-rectangle* (sheet-region sub-menu))
  	  (multiple-value-bind (x y)
  	      (transform-position (sheet-delta-transformation sub-menu nil)
  				  (if bottomp xmin xmax)
  				  (if bottomp ymax ymin))
  	    (with-slots (frame-manager submenu-frame) sub-menu
  	      (setf frame-manager manager
  		    submenu-frame (make-menu-frame raised :left x :top y))
  	      (adopt-frame manager submenu-frame)))))))))
  
  (defmethod destroy-substructure ((sub-menu menu-button-submenu-pane))
    (with-slots (frame-manager submenu-frame) sub-menu
      (when submenu-frame
        (mapc #'destroy-substructure (menu-children sub-menu))
        (disown-frame frame-manager submenu-frame)
        (setf submenu-frame nil))))
  
  (defmethod arm-branch ((sub-menu menu-button-submenu-pane))
    (with-slots (client frame-manager submenu-frame dissolving) sub-menu
      (arm-menu client)
      (cond
       (submenu-frame
        (mapc #'destroy-substructure (menu-children sub-menu))
        (mapc #'disarm-menu (menu-children sub-menu)))
       (t
        (mapc #'destroy-substructure (menu-children client))
        (if dissolving
            (progn
              (setf dissolving nil)
              (disarm-menu client))
            (create-substructure sub-menu sub-menu))))
      (arm-menu sub-menu)))
  
  (defmethod handle-event ((pane menu-button-submenu-pane) (event pointer-button-release-event))
    (destroy-substructure (menu-root pane))
    (with-slots (dissolving client) pane
      (setf dissolving t)))
  
  (defmethod handle-repaint ((pane menu-button-submenu-pane) region)
    (declare (ignore region))
    (with-slots (submenu-frame) pane
      (if submenu-frame
  	(menu-draw-highlighted pane)
  	(menu-draw-unhighlighted pane))))
  
  ;; Menu creation from command tables
  
  
negative.code: (defmethod handle-event ((pane menu-button-leaf-pane) (event pointer-ungrab-event))
    (destroy-substructure (menu-root pane)))
  
  ;;; menu-button-submenu-pane
  
  (defclass menu-button-submenu-pane (menu-button-pane)
    ((frame-manager :initform nil :initarg :frame-manager)
     (submenu-frame :initform nil)
     (bottomp :initform nil :initarg :bottomp)
     (command-table :initform nil :initarg :command-table)))
  
  (defmethod menu-children ((submenu menu-button-submenu-pane))
    (with-slots (submenu-frame) submenu
  