code review
add tests
add tests