refactoring to interfaces, rename classes