refactoring... over and over again