#18 complete
#19 complete
Finished #20