starting part 3
part 3 is implemented