client-side OP