Refactor
Interfaces removed for abstract classes