diff --git a/servers/slapd/add.c b/servers/slapd/add.c
index 4b392247836ca4f5a5e3a283bef7c81b42a7ec23..306b65ee695a474cc69467ede685f0d45eb9f431 100644
--- a/servers/slapd/add.c
+++ b/servers/slapd/add.c
@@ -193,6 +193,7 @@ fe_op_add( Operation *op, SlapReply *rs )
 	Entry		*e = op->ora_e;
 	Modifications	*modlist = op->ora_modlist;
 	Modifications	**modtail = &modlist;
+	int		rc = 0;
 
 	manageDSAit = get_manageDSAit( op );
 
@@ -306,7 +307,12 @@ fe_op_add( Operation *op, SlapReply *rs )
 				cb.sc_next = op->o_callback;
 				op->o_callback = &cb;
 			}
-			if ( (op->o_bd->be_add)( op, rs ) == 0 ) {
+			rc = (op->o_bd->be_add)( op, rs );
+			if ( rc == 0 ) {
+				/* FIXME: be_entry_release_w() should be
+				 * called by do_add(), so that global
+				 * overlays on the way back can
+				 * at least read the entry */
 				be_entry_release_w( op, e );
 				e = NULL;
 			}
@@ -370,7 +376,7 @@ fe_op_add( Operation *op, SlapReply *rs )
 #endif /* LDAP_SLAPI */
 
 done:;
-	return rs->sr_err;
+	return rc;
 }
 
 int