add more tests
refactoring 1
refactoring 2