Updated model with Interfaces and Abstract Classes
Continuing to refactor the model