#include "rwm.h"
 
 typedef struct rwm_op_state {
+       ber_tag_t r_tag;
        struct berval ro_dn;
        struct berval ro_ndn;
        struct berval r_dn;
        slap_callback   *cb = op->o_callback;
        rwm_op_state *ros = cb->sc_private;
 
-       if ( rs->sr_type == REP_RESULT || op->o_abandon ||
-               rs->sr_err == SLAPD_ABANDON ) {
+       if ( rs->sr_type == REP_RESULT || rs->sr_type == REP_EXTENDED ||
+               op->o_abandon || rs->sr_err == SLAPD_ABANDON ) {
 
                op->o_req_dn = ros->ro_dn;
                op->o_req_ndn = ros->ro_ndn;
                if ( !BER_BVISEMPTY( &ros->r_dn )) ch_free( ros->r_dn.bv_val );
                if ( !BER_BVISEMPTY( &ros->r_ndn )) ch_free( ros->r_ndn.bv_val );
 
-               switch( op->o_tag ) {
+               switch( ros->r_tag ) {
                case LDAP_REQ_COMPARE:
                        if ( op->orc_ava->aa_value.bv_val != ros->orc_ava->aa_value.bv_val )
                                op->o_tmpfree( op->orc_ava->aa_value.bv_val, op->o_tmpmemctx );
        roc->cb.sc_response = NULL;
        roc->cb.sc_next = op->o_callback;
        roc->cb.sc_private = &roc->ros;
+       roc->ros.r_tag = op->o_tag;
        roc->ros.ro_dn = op->o_req_dn;
        roc->ros.ro_ndn = op->o_req_ndn;
        roc->ros.o_request = op->o_request;