use protocols for reasonable speed gains
Merge branch 'prot'