remove duplicate code
add test