refactor a bit more, prep for :as support