base classes for further implementation