This is ready for review. This was mainly about adding new tests, as there was no incompatible bits that I could spot. I did change the interface implemented and remove one method not part of the interface, though.