Start Check

This is a bit big, but it needed a lot of framework in order for me to write any kind of reasonable tests for it. It's still not very thoroughly tested, because I need to implement more checking first.