implemented rest of protocol structs