Refactor into abstract base/actual model to support further inheritance