added part 4, updated part 1,2 and 3