Add some tests and implementation, still very much a WIP