don't need protocol param