base classes for easier logic development