Redesign the models and move common code to Base::Model