I think I'd prefer for this to be an abstract class (or trait), so we can evolve it in a binary compatible way if needed.