a lot of change & bug fix