protocol refactor/redesign