Cleaned out a lot of the cruft from the other branch to make it clearer which methods are now required