finalized part 1
finalized part 2
finalized part 3