ported to clojurescript