add more functionality, more tests