progress + refactoring