a lot of the repetitive stuff in this class and below could be made less verbose by a couple clever refactors to pull out common code. it may be worth it before writing yet more tests.