update part1
update part2
update part3