Not sure we need an abstract base class here. The only user is the implementation in the class below.