refactoring interface design again