After much heartache at the end of it, I have managed to refactor a lot of code into a fairly good model. I will likely go over it a bit more. I definitely need more practice on writing tests.