refactoring, new design