diff --git a/CHANGES b/CHANGES
index 228943c76d26f1e0c78af1693564310e8f6f8a53..cfbad5936029185a0df4384fb994b6c66e6fab7c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -15,6 +15,7 @@ OpenLDAP 2.4.10 Engineering
 	Fixed slapd-ldap entry_get() op-dependent behavior (ITS#5513)
 	Fixed slapd-meta quarantine crasher (ITS#5522)
 	Fixed slapo-refint to allow setting modifiers name (ITS#5505)
+	Fixed slapo-syncprov contextCSN passing on syncprov consumers (ITS#5488)
 	Fixed slapo-syncprov csn update with delta-syncrepl (ITS#5493)
 	Fixed slapo-syncprov op2.o_extra reset (ITS#5501, #5506)
 	Fixed slapo-syncprov searching wrong backend (ITS#5487)
diff --git a/servers/slapd/overlays/syncprov.c b/servers/slapd/overlays/syncprov.c
index 7209b7d473fa0e40f684c9702059f58dfd9c6a79..21b44ef794b6eddfa314b14142f61a985751b129 100644
--- a/servers/slapd/overlays/syncprov.c
+++ b/servers/slapd/overlays/syncprov.c
@@ -1596,6 +1596,17 @@ syncprov_op_response( Operation *op, SlapReply *rs )
 		cbuf[0] = '\0';
 		ldap_pvt_thread_rdwr_wlock( &si->si_csn_rwlock );
 		slap_get_commit_csn( op, &maxcsn );
+		if ( BER_BVISNULL( &maxcsn ) && SLAP_GLUE_SUBORDINATE( op->o_bd )) {
+			/* syncrepl queues the CSN values in the db where
+			 * it is configured , not where the changes are made.
+			 * So look for a value in the glue db if we didn't
+			 * find any in this db.
+			 */
+			BackendDB *be = op->o_bd;
+			op->o_bd = select_backend( &be->be_nsuffix[0], 1);
+			slap_get_commit_csn( op, &maxcsn );
+			op->o_bd = be;
+		}
 		if ( !BER_BVISNULL( &maxcsn ) ) {
 			int i, sid;
 			strcpy( cbuf, maxcsn.bv_val );