separating transfer protocol from interaction :sparkles: