diff --git a/servers/slapd/add.c b/servers/slapd/add.c
index f7bcc117fd1773e17c031310933b9788cdfe3a37..078bd73075540fe4df27eb98ea5767937cc38c69 100644
--- a/servers/slapd/add.c
+++ b/servers/slapd/add.c
@@ -501,7 +501,7 @@ slap_mods2entry(
 				}
 
 			} else {
-				int		rc = LDAP_SUCCESS;
+				int	rc;
 				int match;
 
 				for ( i = 1; mods->sml_values[i].bv_val != NULL; i++ ) {
@@ -519,18 +519,19 @@ slap_mods2entry(
 								? &mods->sml_nvalues[j]
 								: &mods->sml_values[j],
 							text );
+
 						if ( rc == LDAP_SUCCESS && match == 0 ) {
 							/* value exists already */
 							snprintf( textbuf, textlen,
 								"%s: value #%d provided more than once",
 								mods->sml_desc->ad_cname.bv_val, j );
 							return LDAP_TYPE_OR_VALUE_EXISTS;
+
+						} else if ( rc != LDAP_SUCCESS ) {
+							return rc;
 						}
 					}
 				}
-				if ( rc != LDAP_SUCCESS ) {
-					return rc;
-				}
 			}
 		}
 
diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c
index b9e38eb17cbf962c23954affb69b0ac83616a6ca..eed665eda69c70d49a4eae93fefa774fd5c8958a 100644
--- a/servers/slapd/modify.c
+++ b/servers/slapd/modify.c
@@ -790,7 +790,7 @@ int slap_mods_check(
 					}
 
 				} else {
-					int rc = LDAP_SUCCESS;
+					int rc;
 					int match;
 
 					for ( i = 1; ml->sml_values[i].bv_val != NULL; i++ ) {
@@ -815,11 +815,12 @@ int slap_mods_check(
 									ml->sml_desc->ad_cname.bv_val, j );
 								*text = textbuf;
 								return LDAP_TYPE_OR_VALUE_EXISTS;
+
+							} else if ( rc != LDAP_SUCCESS ) {
+								return rc;
 							}
 						}
 					}
-
-					if ( rc != LDAP_SUCCESS ) return rc;
 				}
 			}
 
diff --git a/servers/slapd/mods.c b/servers/slapd/mods.c
index 7844d6381e6fc55e86327418a3673f53c7e0c295..8d91c20327e2355c8bafda8f193028c5087e9ff0 100644
--- a/servers/slapd/mods.c
+++ b/servers/slapd/mods.c
@@ -110,6 +110,9 @@ modify_add_values(
 						"modify/%s: %s: value #%d already exists",
 						op, mod->sm_desc->ad_cname.bv_val, i );
 					return LDAP_TYPE_OR_VALUE_EXISTS;
+
+				} else if ( rc != LDAP_SUCCESS ) {
+					return rc;
 				}
 			}
 
diff --git a/servers/slapd/schema_prep.c b/servers/slapd/schema_prep.c
index 4b6a56fac8b5ae7ec0ad30c230394e843bd5b333..e0b082ad07b6410080f5e88eb63a5c38c16d2334 100644
--- a/servers/slapd/schema_prep.c
+++ b/servers/slapd/schema_prep.c
@@ -70,12 +70,12 @@ objectSubClassMatch(
 		}
 
 		/* desc form, return undefined */
-		return SLAPD_COMPARE_UNDEFINED;
+		return LDAP_INVALID_SYNTAX;
 	}
 
 	if ( oc == NULL ) {
 		/* unrecognized stored value */
-		return SLAPD_COMPARE_UNDEFINED;
+		return LDAP_INVALID_SYNTAX;
 	}
 
 	if( SLAP_MR_IS_VALUE_OF_ATTRIBUTE_SYNTAX( flags ) ) {