Add in initial implementation, still need more tests and an error strategy