add more tests, add more documentation