Generalise protocol
Fix map