edit (new version based on Clojure 1.5)