rewriting protocol to clean this up