refactoring protocol