General Clojure tip: you almost never, ever should `swap!` an atom in a _library_ function. `attr-ex` should just be a map of attribute exchange properties, and this function should use it _instead of_ the default `ax-props`.