Part one "finished" [UNTESTED]