if ( op->o_sync ) {
                Operation       op2 = *op;
                SlapReply       rs2 = { 0 };
-               Entry           e = { 0 };
+               Entry           *e = entry_alloc();
                slap_callback   cb = { 0 };
 
                op2.o_tag = LDAP_REQ_ADD;
                op2.o_bd = select_backend( &op->o_bd->be_nsuffix[0], 0, 0 );
-               op2.ora_e = &e;
+               op2.ora_e = e;
                op2.o_callback = &cb;
 
-               e.e_name = op->o_bd->be_suffix[0];
-               e.e_nname = op->o_bd->be_nsuffix[0];
+               ber_dupbv( &e->e_name, op->o_bd->be_suffix );
+               ber_dupbv( &e->e_nname, op->o_bd->be_nsuffix );
 
                cb.sc_response = slap_null_cb;
 
                op2.o_bd->be_add( &op2, &rs2 );
+
+               if ( op2.ora_e == e )
+                       entry_free( e );
        }
 #endif /* BACKSQL_SYNCPROV */
 
 
        }
 
        op2.o_bd->be_add( &op2, &rs2 );
+       if ( e == op2.ora_e ) entry_free( e );
+       e = NULL;
 
 done:
        if ( lo->mask & LOG_OP_WRITES )
                memset(cids, 0, sizeof( cids ));
 
                op2.o_bd->be_add( &op2, &rs2 );
-               entry_free( e );
+               if ( e == op2.ora_e )
+                       entry_free( e );
        }
        return SLAP_CB_CONTINUE;
 }
        memset(cids, 0, sizeof( cids ));
 
        op2.o_bd->be_add( &op2, &rs2 );
-       entry_free( e );
+       if ( e == op2.ora_e )
+               entry_free( e );
 
        return SLAP_CB_CONTINUE;
 }
                Entry *e_ctx;
 
                e = entry_alloc();
-               e->e_name = *li->li_db->be_suffix;
-               e->e_nname = *li->li_db->be_nsuffix;
+               ber_dupbv( &e->e_name, li->li_db->be_suffix );
+               ber_dupbv( &e->e_nname, li->li_db->be_nsuffix );
 
                attr_merge_one( e, slap_schema.si_ad_objectClass,
                        &log_container->soc_cname, NULL );
                SLAP_DBFLAGS( op->o_bd ) |= SLAP_DBFLAG_NOLASTMOD;
                rc = op->o_bd->be_add( op, &rs );
                SLAP_DBFLAGS( op->o_bd ) ^= SLAP_DBFLAG_NOLASTMOD;
-               BER_BVZERO( &e->e_name );
-               BER_BVZERO( &e->e_nname );
-               entry_free( e );
+               if ( e == op->ora_e )
+                       entry_free( e );
        }
        ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
        ldap_pvt_runqueue_stoptask( &slapd_rq, rtask );
 
                        rc = 0;
                }
        } else {
-               be_entry_release_w( op, e );
+               if ( op->ora_e == e )
+                       be_entry_release_w( op, e );
                rc = 1;
        }
 
 
                }
 
                if ( op->o_tag == LDAP_REQ_ADD ) {
-                       op->ora_e = entry_alloc();
+                       Entry *e = entry_alloc();
+                       op->ora_e = e;
                        op->ora_e->e_name = op->o_req_dn;
                        op->ora_e->e_nname = op->o_req_ndn;
                        freeReqDn = 0;
                                        "syncrepl_message_to_op: rid %03d be_add %s (%d)\n", 
                                        si->si_rid, op->o_req_dn.bv_val, rc );
                        }
-                       be_entry_release_w( op, op->ora_e );
+                       if ( e == op->ora_e )
+                               be_entry_release_w( op, op->ora_e );
                } else {
                        op->orm_modlist = modlist;
                        rc = op->o_bd->be_modify( op, &rs );
                                        si->si_rid, rc, 0 );
                        switch ( rs_add.sr_err ) {
                        case LDAP_SUCCESS:
-                               be_entry_release_w( op, entry );
+                               if ( op->ora_e == entry )
+                                       be_entry_release_w( op, entry );
                                entry = NULL;
                                break;
 
                op->ora_e = glue;
                rc = be->be_add ( op, &rs_add );
                if ( rs_add.sr_err == LDAP_SUCCESS ) {
-                       be_entry_release_w( op, glue );
+                       if ( op->ora_e == glue )
+                               be_entry_release_w( op, glue );
                } else {
                /* incl. ALREADY EXIST */
                        entry_free( glue );
        op->ora_e = e;
        rc = be->be_add ( op, &rs_add );
        if ( rs_add.sr_err == LDAP_SUCCESS ) {
-               be_entry_release_w( op, e );
+               if ( op->ora_e == e )
+                       be_entry_release_w( op, e );
        } else {
                entry_free( e );
        }