diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c
index 5cd259fb55c622cbd5bff92a5431130ea564d072..2d10fe70a7f8522a6c46c4596f78d39bc7399f76 100644
--- a/servers/slapd/overlays/syncprov.c
+++ b/servers/slapd/overlays/syncprov.c
@@ -2122,6 +2122,10 @@ syncprov_op_mod( Operation *op, SlapReply *rs )
 			mt->mt_tail = mi;
 			/* wait for this op to get to head of list */
 			while ( mt->mt_mods != mi ) {
+				/* don't wait on other mods from the same thread */
+				if ( mt->mt_mods->mi_op->o_threadctx == op->o_threadctx )
+					break;
+
 				ldap_pvt_thread_mutex_unlock( &mt->mt_mutex );
 				/* FIXME: if dynamic config can delete overlays or
 				 * databases we'll have to check for cleanup here.