extracted base classes (partially)