renamed 'operation' to 'op' for the operation option of value() and observe()