extracted base class