addedprotocolsand enum type