diff --git a/servers/slapd/back-mdb/id2entry.c b/servers/slapd/back-mdb/id2entry.c
index b6898d3707c44b303341e43d7f6893d185abf523..0caaf4f028b1ac94dbda112c2789449d1a299fdc 100644
--- a/servers/slapd/back-mdb/id2entry.c
+++ b/servers/slapd/back-mdb/id2entry.c
@@ -121,12 +121,17 @@ int mdb_id2edata(
 	MDB_val *data )
 {
 	MDB_val key;
+	int rc;
 
 	key.mv_data = &id;
 	key.mv_size = sizeof(ID);
 
 	/* fetch it */
-	return mdb_cursor_get( mc, &key, data, MDB_SET );
+	rc = mdb_cursor_get( mc, &key, data, MDB_SET );
+	/* stubs from missing parents - DB is actually invalid */
+	if ( rc == MDB_SUCCESS && !data.mv_size )
+		rc = MDB_NOTFOUND;
+	return rc;
 }
 
 int mdb_id2entry(
@@ -178,6 +183,9 @@ int mdb_id2entry(
 			return MDB_SUCCESS;
 		}
 	}
+	/* stubs from missing parents - DB is actually invalid */
+	if ( rc == MDB_SUCCESS && !data.mv_size )
+		rc = MDB_NOTFOUND;
 	if ( rc ) return rc;
 
 	rc = mdb_entry_decode( op, &data, e );