protocol primitives implemented