fix bug
add unit test