making diffing its own class instead of a mixin