I think I'm pretty much done, just have to do some testing and maybe a bit of refactoring.