reactive protocols