introduced abstract base class