Fully implement Part2 Task1