refactoring start