made ProtocolProvider abstract