The current tests rely too much on internal implementation details. This means that whenever the implementation changes, the tests have to change quite a bit. We could do this with a piecemeal approach as well, since some of the exiting tests are huge.