Finished 1a and 1b (untested)