add tests
add tests
refactoring