part 1 complete, but not tested