tons of fixes and improvements from work on clojure-metal