diff --git a/servers/slapd/back-bdb/referral.c b/servers/slapd/back-bdb/referral.c
index 97d7e1176ad33257703bbc8ed0f514abf7479e88..b2b2c68f5b11c6822b859b68838fc83d5265cb7c 100644
--- a/servers/slapd/back-bdb/referral.c
+++ b/servers/slapd/back-bdb/referral.c
@@ -65,8 +65,8 @@ dn2entry_retry:
 	case 0:
 		break;
 	case LDAP_BUSY:
-		send_ldap_error( op, rs, LDAP_BUSY, "ldap server busy" );
 		LOCK_ID_FREE ( bdb->bi_dbenv, locker );
+		rs->sr_text = "ldap server busy";
 		return LDAP_BUSY;
 	case DB_LOCK_DEADLOCK:
 	case DB_LOCK_NOTGRANTED:
@@ -76,13 +76,13 @@ dn2entry_retry:
 			LDAP_XSTRING(bdb_referrals)
 			": dn2entry failed: %s (%d)\n",
 			db_strerror(rc), rc, 0 ); 
-		send_ldap_error( op, rs, LDAP_OTHER, "internal error" );
 		LOCK_ID_FREE ( bdb->bi_dbenv, locker );
-		return rs->sr_err;
+		rs->sr_text = "internal error";
+		return LDAP_OTHER;
 	}
 
 	if ( rc == DB_NOTFOUND ) {
-		rc = 0;
+		rc = LDAP_SUCCESS;
 		rs->sr_matched = NULL;
 		if ( e != NULL ) {
 			Debug( LDAP_DEBUG_TRACE,
@@ -117,9 +117,7 @@ dn2entry_retry:
 			ber_bvarray_free( rs->sr_ref );
 			rs->sr_ref = NULL;
 		} else if ( rc != LDAP_SUCCESS ) {
-			rs->sr_err = rc;
 			rs->sr_text = rs->sr_matched ? "bad referral object" : NULL;
-			send_ldap_result( op, rs );
 		}
 
 		LOCK_ID_FREE ( bdb->bi_dbenv, locker );
@@ -148,8 +146,8 @@ dn2entry_retry:
 			ber_bvarray_free( rs->sr_ref );
 			rs->sr_ref = NULL;
 		} else {
-			send_ldap_error( op, rs, LDAP_OTHER, "bad referral object" );
-			rc = rs->sr_err;
+			rc = LDAP_OTHER;
+			rs->sr_text = "bad referral object";
 		}
 
 		rs->sr_matched = NULL;
diff --git a/servers/slapd/back-ldap/distproc.c b/servers/slapd/back-ldap/distproc.c
index 77b31d3d1b5c7c28368ed2616c8c56411cf014fa..93411682436580258e8e3047575041e96fcd70bf 100644
--- a/servers/slapd/back-ldap/distproc.c
+++ b/servers/slapd/back-ldap/distproc.c
@@ -298,7 +298,7 @@ ldap_distproc_operational( Operation *op, SlapReply *rs )
 	 * database.  This fix is likely to intercept also entries
 	 * generated by back-perl and so. */
 	if ( rs->sr_entry->e_private == NULL ) {
-		return 0;
+		return LDAP_SUCCESS;
 	}
 
 	return SLAP_CB_CONTINUE;
diff --git a/servers/slapd/back-ldif/ldif.c b/servers/slapd/back-ldif/ldif.c
index b90310b1a541602064d9c587a1eb0090183a2b0a..be9678e4af627e6a3e4edbbf6fca0f838f0b936b 100644
--- a/servers/slapd/back-ldif/ldif.c
+++ b/servers/slapd/back-ldif/ldif.c
@@ -777,9 +777,7 @@ ldif_back_referrals( Operation *op, SlapReply *rs )
 			rs->sr_ref = NULL;
 
 		} else if ( rc != LDAP_SUCCESS ) {
-			rs->sr_err = rc;
 			rs->sr_text = rs->sr_matched ? "bad referral object" : NULL;
-			send_ldap_result( op, rs );
 		}
 
 		if ( rs->sr_matched ) {
@@ -810,8 +808,8 @@ ldif_back_referrals( Operation *op, SlapReply *rs )
 			rs->sr_ref = NULL;
 
 		} else {
-			send_ldap_error( op, rs, LDAP_OTHER, "bad referral object" );
-			rc = rs->sr_err;
+			rc = LDAP_OTHER;
+			rs->sr_text = "bad referral object";
 		}
 
 		rs->sr_matched = NULL;
@@ -1212,6 +1210,7 @@ int ldif_back_entry_get(
 {
 	struct ldif_info *li = (struct ldif_info *) op->o_bd->be_private;
 	struct berval op_dn = op->o_req_dn, op_ndn = op->o_req_ndn;
+	int rc = LDAP_NO_SUCH_OBJECT;
 
 	assert( ndn != NULL );
 	assert( !BER_BVISNULL( ndn ) );
@@ -1224,12 +1223,16 @@ int ldif_back_entry_get(
 	op->o_req_ndn = op_ndn;
 	ldap_pvt_thread_rdwr_runlock( &li->li_rdwr );
 
-	if ( *ent && oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
-		entry_free( *ent );
-		*ent = NULL;
+	if ( *ent ) {
+		rc = LDAP_SUCCESS;
+		if ( oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
+			rc = LDAP_NO_SUCH_ATTRIBUTE;
+			entry_free( *ent );
+			*ent = NULL;
+		}
 	}
 
-	return ( *ent == NULL ? 1 : 0 );
+	return rc;
 }
 
 static int ldif_tool_entry_open(BackendDB *be, int mode) {
diff --git a/servers/slapd/back-monitor/operational.c b/servers/slapd/back-monitor/operational.c
index c801f82bf95c6d6b6caa65f1edb41d3350498926..0b5542ea05db78d9f82de610522c12051f2517e6 100644
--- a/servers/slapd/back-monitor/operational.c
+++ b/servers/slapd/back-monitor/operational.c
@@ -62,6 +62,6 @@ monitor_back_operational(
 		ap = &(*ap)->a_next;
 	}
 	
-	return 0;
+	return LDAP_SUCCESS;
 }
 
diff --git a/servers/slapd/back-null/null.c b/servers/slapd/back-null/null.c
index d80b3d5e431f98b01ea3219792c03f7745174275..bc806987169f404e3f9d691389451961870247ed 100644
--- a/servers/slapd/back-null/null.c
+++ b/servers/slapd/back-null/null.c
@@ -70,7 +70,8 @@ null_back_false( Operation *op, SlapReply *rs )
 
 
 /* for overlays */
-int null_back_entry_get(
+static int
+null_back_entry_get(
 	Operation *op,
 	struct berval *ndn,
 	ObjectClass *oc,
@@ -78,8 +79,10 @@ int null_back_entry_get(
 	int rw,
 	Entry **ent )
 {
-	*ent = NULL;
-	return 1;
+	assert( *ent == NULL );
+
+	/* don't admit the object isn't there */
+	return oc || at ? LDAP_NO_SUCH_ATTRIBUTE : LDAP_BUSY;
 }
 
 
diff --git a/servers/slapd/back-relay/op.c b/servers/slapd/back-relay/op.c
index 7c453af925bdbbfcdbec5a1b75f1109ab9a5319b..dd0189b18b79bd0e0dbc21dab84c98b67eae021c 100644
--- a/servers/slapd/back-relay/op.c
+++ b/servers/slapd/back-relay/op.c
@@ -431,7 +431,7 @@ relay_back_chk_referrals( Operation *op, SlapReply *rs )
 		}
 	}
 
-	return relay_back_op( op, rs, bd, bd->be_chk_referrals, 0 );
+	return relay_back_op( op, rs, bd, bd->be_chk_referrals, LDAP_SUCCESS );
 }
 
 int
diff --git a/servers/slapd/backend.c b/servers/slapd/backend.c
index 7d6884a848d82f2d34343de09b677c7c77b14018..b36b65c3d1030cefeb69d3c5157580914f744089 100644
--- a/servers/slapd/backend.c
+++ b/servers/slapd/backend.c
@@ -1830,7 +1830,7 @@ fe_aux_operational(
 	SlapReply *rs )
 {
 	Attribute		**ap;
-	int			rc = 0;
+	int			rc = LDAP_SUCCESS;
 
 	for ( ap = &rs->sr_operational_attrs; *ap; ap = &(*ap)->a_next )
 		/* just count them */ ;
diff --git a/servers/slapd/bconfig.c b/servers/slapd/bconfig.c
index 0be46d6b607ff693003323ab09d1b5a3d97f27d6..b65928e9a89deb91201df8484cf31085ecab959d 100644
--- a/servers/slapd/bconfig.c
+++ b/servers/slapd/bconfig.c
@@ -5298,18 +5298,23 @@ int config_back_entry_get(
 {
 	CfBackInfo *cfb;
 	CfEntryInfo *ce, *last;
+	int rc = LDAP_NO_SUCH_OBJECT;
 
 	cfb = (CfBackInfo *)op->o_bd->be_private;
 
 	ce = config_find_base( cfb->cb_root, ndn, &last );
 	if ( ce ) {
 		*ent = ce->ce_entry;
-		if ( *ent && oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
-			*ent = NULL;
+		if ( *ent ) {
+			rc = LDAP_SUCCESS;
+			if ( oc && !is_entry_objectclass_or_sub( *ent, oc ) ) {
+				rc = LDAP_NO_SUCH_ATTRIBUTE;
+				*ent = NULL;
+			}
 		}
 	}
 
-	return ( *ent == NULL ? 1 : 0 );
+	return rc;
 }
 
 static void