Part 3: Implement changes made in Part 2
Part 3: Implement changes made in Part 2 ii