added protocol semantics