   supplied defaults to, and modifies, the global hierarchy."
   ([tag parent]
      ;; (alter-var-root #'global-hierarchy underive tag parent)
-     (swap! global-hierarchy derive tag parent) nil)
+     (swap! global-hierarchy underive tag parent) nil)
   ([h tag parent]
     (let [parentMap (:parents h)
 	  childsParents (if (parentMap tag)

	  (second best-entry))
	(do
	  (reset-cache method-cache method-table cached-hierarchy hierarchy)
	  (find-and-cache-best-method name dispatch-val method-table prefer-table
				      cached-hierarchy hierarchy method-cache))))))

(defprotocol IMultiFn
  (-reset [mf])

  ;; vary-meta
  (assert (= {:a 1} (meta (vary-meta [] assoc :a 1))))
  (assert (= {:a 1 :b 2} (meta (vary-meta (with-meta [] {:b 2}) assoc :a 1))))

  (test-multimethods)
  :ok
  )

