part 3 finished, needs more testing