diff --git a/CHANGES b/CHANGES
index 453a76b1a1d81dc095c7685261627b9b6c9aa676..4f3a4c8d0904d3f3eb60451b5227b4e4a0229cc6 100644
--- a/CHANGES
+++ b/CHANGES
@@ -23,6 +23,7 @@ OpenLDAP 2.4.14 Engineering
 	Fixed slapd bconfig to return error codes (ITS#5867)
 	Fixed slapd bconfig encoding incorrectly (ITS#5897)
 	Fixed slapd bconfig dangling pointers (ITS#5924)
+	Fixed slapd behavior with superior objectClasses (ITS#5517)
 	Fixed slapd connection assert (ITS#5835)
 	Fixed slapd epoll handling (ITS#5886)
 	Fixed slapd frontend/backend options handling (ITS#5857)
diff --git a/servers/slapd/mods.c b/servers/slapd/mods.c
index 328d69b53be4f90beb01fb203755857930bd1814..1ad15f8906997ed3068939a25d4a1237cc16e0c6 100644
--- a/servers/slapd/mods.c
+++ b/servers/slapd/mods.c
@@ -99,7 +99,13 @@ modify_add_values(
 		 * server (whether from LDAP or from the underlying
 		 * database).
 		 */
-		flags = SLAP_MR_EQUALITY | SLAP_MR_VALUE_OF_ASSERTION_SYNTAX;
+		if ( a->a_desc == slap_schema.si_ad_objectClass ) {
+			/* Needed by ITS#5517 */
+			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_ASSERTED_VALUE_NORMALIZED_MATCH |
 				SLAP_MR_ATTRIBUTE_VALUE_NORMALIZED_MATCH;