Intermediate commit for the next meeting. I'm committing this just to transfer the work I've done from home to work. Though this is an intermediate commit, tests should pass.