diff --git a/CHANGES b/CHANGES
index 72e3f71f19f0e50a58e595eab684e7c90d84326e..59b87c28d8227b33ca7a0d2fc946bf1908301617 100644
--- a/CHANGES
+++ b/CHANGES
@@ -35,6 +35,7 @@ OpenLDAP 2.4.17 Engineering
 	Fixed slapd tls context after changes (ITS#6135)
 	Fixed slapd-bdb/hdb adjust dncachesize if too low (ITS#6176)
 	Fixed slapd-bdb/hdb crashes during delete (ITS#6177)
+	Fixed slapd-bdb/hdb multiple olcIndex for same attr (ITS#6196)
 	Fixed slapd-hdb freeing of already freed entries (ITS#6074)
 	Fixed slapd-hdb entryinfo cleanup (ITS#6088)
 	Fixed slapd-hdb dncache lockups (ITS#6095)
diff --git a/servers/slapd/back-bdb/attr.c b/servers/slapd/back-bdb/attr.c
index 54cb2e4ac6269f3f5a223b617993cc7e4c79c79e..2e5a5e56d0893e129d6f68678e17f14469357f5b 100644
--- a/servers/slapd/back-bdb/attr.c
+++ b/servers/slapd/back-bdb/attr.c
@@ -319,15 +319,20 @@ bdb_attr_index_config(
 		if( rc ) {
 			if ( bdb->bi_flags & BDB_IS_OPEN ) {
 				AttrInfo *b = bdb_attr_mask( bdb, ad );
-				/* If we were editing this attr, reset it */
-				b->ai_indexmask &= ~BDB_INDEX_DELETING;
-				/* If this is leftover from a previous add, commit it */
-				if ( b->ai_newmask )
-					b->ai_indexmask = b->ai_newmask;
-				b->ai_newmask = a->ai_newmask;
-				ch_free( a );
-				rc = 0;
-				continue;
+				/* If there is already an index defined for this attribute
+				 * it must be replaced. Otherwise we end up with multiple 
+				 * olcIndex values for the same attribute */
+				if ( b->ai_indexmask & BDB_INDEX_DELETING ) {
+					/* If we were editing this attr, reset it */
+					b->ai_indexmask &= ~BDB_INDEX_DELETING;
+					/* If this is leftover from a previous add, commit it */
+					if ( b->ai_newmask )
+						b->ai_indexmask = b->ai_newmask;
+					b->ai_newmask = a->ai_newmask;
+					ch_free( a );
+					rc = 0;
+					continue;
+				}
 			}
 			if (c_reply) {
 				snprintf(c_reply->msg, sizeof(c_reply->msg),