anchor.diff:      ((atom split-tree) (list split-tree))
       (t (append (leaves-of-split-tree (car split-tree))
                  (leaves-of-split-tree (cdr split-tree))))))
  +
  +(defun split-tree-from-set (set split-tree)
  +  (cond
  +    ((atom split-tree) (find split-tree set))
  +    (t (let ((car (split-tree-from-set set (car split-tree)))
  +             (cdr (split-tree-from-set set (cdr split-tree))))
  +         (cond
  +           ((null car) cdr)
  +           ((null cdr) car)
  +           (t (cons car cdr)))))))
  ++
  +(defvar *split*)
   
   ;;; Figure 7: X-tree Insertion Algorithm for Directory Nodes
   (defmethod adjust-tree ((tree x-tree) node &optional new)
  
positive.code: 
  (defclass x-tree-node (spatial-tree-node)
    ((split-tree :initarg :split-tree :accessor split-tree)))
  (defmethod split-tree ((x spatial-tree-leaf-node))
    x)
  ;;; Do we actually need to keep track of what is and what isn't a
  ;;; supernode?  I'm not sure that we do...
  (defclass x-tree-supernode (x-tree-node)
  
negative.code:                              (if (typep node 'spatial-tree-leaf-node)
                                   'spatial-tree-leaf-node
                                   'x-tree-node)))
               (unless (typep node 'spatial-tree-leaf-node)
                 (let ((split-tree (split-tree node)))
                   (setf (split-tree node) (split-tree-from-set one split-tree)
                         (split-tree new-node) (split-tree-from-set two split-tree))))
               new-node)
              ((and (not (typep node 'spatial-tree-leaf-node))
                    (let ((split-tree (split-tree node)))
  