should we create an abstract base class?