protocol defn