this seems a little overengineered to me? what function does the base class serve when there's only one subclass?