- refactored the interfaces and implementations