still some bugs, need to fix after I go home