#1 add tests
#1 add basic implementation