update #4

fix old bugs
add new