diff --git a/CHANGES b/CHANGES
index f4eb816084a032accc832abeec8a130eea82275b..43a95c5f871a1f711fe9a6d63b7266ebb5c539bb 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,7 @@
 OpenLDAP 2.4 Change Log
 
 OpenLDAP 2.4.24 Engineering
+	Fixed slapd modify to return actual error (ITS#6581)
 	Fixed slapd-bdb entry cache delete failure (ITS#6577)
 
 OpenLDAP 2.4.23 Release (2010/06/30)
diff --git a/servers/slapd/modify.c b/servers/slapd/modify.c
index f8c6394b40354bf9201edc1fb3cfe2dc5753da42..3b5f7271a0b118d903e88bfa6152eab5d55fca72 100644
--- a/servers/slapd/modify.c
+++ b/servers/slapd/modify.c
@@ -82,12 +82,14 @@ do_modify(
 	if ( rs->sr_err != LDAP_SUCCESS ) {
 		Debug( LDAP_DEBUG_ANY, "%s do_modify: slap_parse_modlist failed err=%d msg=%s\n",
 			op->o_log_prefix, rs->sr_err, rs->sr_text );
+		send_ldap_result( op, rs );
 		goto cleanup;
 	}
 
 	if( get_ctrls( op, rs, 1 ) != LDAP_SUCCESS ) {
 		Debug( LDAP_DEBUG_ANY, "%s do_modify: get_ctrls failed\n",
 			op->o_log_prefix, 0, 0 );
+		/* get_ctrls has sent results.	Now clean up. */
 		goto cleanup;
 	}