Initial work, still need to update unit tests
Finish off unit tests, tweak exception messages for better error handling