Refactoring so more shared logic is higher in the inheritance hierarchy