introduce the generic protocol structure