diff --git a/CHANGES b/CHANGES
index 15064e016b97eabab859060e571c73d6de4d439e..7622e86c96d4b2990a724e1889e50fc118c2921e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,7 @@ OpenLDAP 2.4.15 Release (2009/02/19)
 	Fixed libldap alias dereferencing in C API again (ITS#5916)
 	Fixed libldap GnuTLS compilation (ITS#5955)
 	Fixed slapd bconfig conversion again (ITS#5346)
+	Fixed slapd behavior with superior objectClasses again (ITS#5517)
 	Fixed slapd corrupt contextCSN (ITS#5947)
 	Fixed slapd syncrepl order to match on add/delete (ITS#5954)
 	Fixed slapd adding rdn with other values (ITS#5965)
diff --git a/servers/slapd/mods.c b/servers/slapd/mods.c
index 1ad15f8906997ed3068939a25d4a1237cc16e0c6..c8d8b9c9e29a27b0116a7768466c84d75b167b58 100644
--- a/servers/slapd/mods.c
+++ b/servers/slapd/mods.c
@@ -263,13 +263,18 @@ modify_delete_vindex(
 		goto return_result;
 	}
 
+	if ( a->a_desc == slap_schema.si_ad_objectClass ) {
+		/* Needed by ITS#5517,ITS#5963 */
+		flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ATTRIBUTE_SYNTAX;
+
+	} else {
+		flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX;
+	}
 	if ( mod->sm_nvalues ) {
-		flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX
-			| SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH
+		flags |= SLAP_MR_ASSERTED_VALUE_NORMALIZED_MATCH
 			| SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH;
 		cvals = mod->sm_nvalues;
 	} else {
-		flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX;
 		cvals = mod->sm_values;
 	}