fleshed out protocol