This is more of an interface than a base class.