Refactored into inheritance model