modify some part reviewd by seishiro