added part 3, updated part 1 and 2