diff --git a/servers/slapd/back-mdb/add.c b/servers/slapd/back-mdb/add.c
index a6c3461a0c1d6ff16123217429dcdd42a9e77699..06312098162f93b2fc8d6e9e3dda6401a5e02d3b 100644
--- a/servers/slapd/back-mdb/add.c
+++ b/servers/slapd/back-mdb/add.c
@@ -37,6 +37,7 @@ mdb_add(Operation *op, SlapReply *rs )
 	ID eid, pid = 0;
 	mdb_op_info opinfo = {{{ 0 }}}, *moi = &opinfo;
 	int subentry;
+	int numads = mdb->mi_numads;
 
 	int		success;
 
@@ -401,6 +402,7 @@ txnReturn:
 		LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.moi_oe, OpExtra, oe_next );
 		opinfo.moi_oe.oe_key = NULL;
 		if ( op->o_noop ) {
+			mdb->mi_numads = numads;
 			mdb_txn_abort( txn );
 			rs->sr_err = LDAP_X_NO_OPERATION;
 			txn = NULL;
@@ -410,6 +412,7 @@ txnReturn:
 		rs->sr_err = mdb_txn_commit( txn );
 		txn = NULL;
 		if ( rs->sr_err != 0 ) {
+			mdb->mi_numads = numads;
 			rs->sr_text = "txn_commit failed";
 			Debug( LDAP_DEBUG_ANY,
 				LDAP_XSTRING(mdb_add) ": %s : %s (%d)\n",
@@ -433,6 +436,7 @@ return_results:
 
 	if( moi == &opinfo ) {
 		if( txn != NULL ) {
+			mdb->mi_numads = numads;
 			mdb_txn_abort( txn );
 		}
 		if ( opinfo.moi_oe.oe_key ) {
diff --git a/servers/slapd/back-mdb/modify.c b/servers/slapd/back-mdb/modify.c
index ada93cda11fcb7d94413a8733a17db4d1f175e36..d3853f5ca1578b2cf8dcf7c11865406ac948d24d 100644
--- a/servers/slapd/back-mdb/modify.c
+++ b/servers/slapd/back-mdb/modify.c
@@ -458,6 +458,7 @@ mdb_modify( Operation *op, SlapReply *rs )
 	LDAPControl **postread_ctrl = NULL;
 	LDAPControl *ctrls[SLAP_MAX_RESPONSE_CONTROLS];
 	int num_ctrls = 0;
+	int numads = mdb->mi_numads;
 
 #ifdef LDAP_X_TXN
 	int settle = 0;
@@ -667,12 +668,15 @@ txnReturn:
 		LDAP_SLIST_REMOVE( &op->o_extra, &opinfo.moi_oe, OpExtra, oe_next );
 		opinfo.moi_oe.oe_key = NULL;
 		if( op->o_noop ) {
+			mdb->mi_numads = numads;
 			mdb_txn_abort( txn );
 			rs->sr_err = LDAP_X_NO_OPERATION;
 			txn = NULL;
 			goto return_results;
 		} else {
 			rs->sr_err = mdb_txn_commit( txn );
+			if ( rs->sr_err )
+				mdb->mi_numads = numads;
 			txn = NULL;
 		}
 	}
@@ -715,6 +719,7 @@ done:
 
 	if( moi == &opinfo ) {
 		if( txn != NULL ) {
+			mdb->mi_numads = numads;
 			mdb_txn_abort( txn );
 		}
 		if ( opinfo.moi_oe.oe_key ) {
diff --git a/servers/slapd/back-mdb/tools.c b/servers/slapd/back-mdb/tools.c
index 482f472b77f1e99e26d9a222766ed50202185c81..52b62657c2bc13824ab6a6141fdc421563ee4f33 100644
--- a/servers/slapd/back-mdb/tools.c
+++ b/servers/slapd/back-mdb/tools.c
@@ -713,6 +713,7 @@ done:
 			mdb_tool_txn = NULL;
 			idcursor = NULL;
 			if( rc != 0 ) {
+				mdb->mi_numads = 0;
 				snprintf( text->bv_val, text->bv_len,
 						"txn_commit failed: %s (%d)",
 						mdb_strerror(rc), rc );
@@ -983,6 +984,7 @@ done:
 	if( rc == 0 ) {
 		rc = mdb_txn_commit( mdb_tool_txn );
 		if( rc != 0 ) {
+			mdb->mi_numads = 0;
 			snprintf( text->bv_val, text->bv_len,
 					"txn_commit failed: %s (%d)",
 					mdb_strerror(rc), rc );