first initial refactoring