Phew, that was quite a lot of clojure structural data stuff