reorganize a bit
refactor for less type weavery
refactors core to use implicits