I'm really sorry for the quality of the code - there's some things that I really like, which I hope to talk about more, and a bunch I don't and need to fix.