@tserong will probably have to fix these if he wants to incorporate this
class hierarchy into Hawk ;-) But of course we'd first need to split it
off into a separate gem (which should be easy - I've deliberately kept
the code fairly cleanly separated).