make protocol a first class entity
handle store/restore