wip, adding tests, more on the way