add more tests, test coverage, and more docs