refactoring: base classes need virtual destructor