Refactored some interfaces and abstract classes