fix bug and add UT