Assignment 4, in all of its glory.

Also some cleanup to this project to keep it nimble.