composite refactoring