diff --git a/CHANGES b/CHANGES
index 97c950152ea6f961d6e513451cbf2aa5703b7d37..cdb2d6b3a09c5a110ff1e2d477278e51f8faa137 100644
--- a/CHANGES
+++ b/CHANGES
@@ -13,6 +13,7 @@ OpenLDAP 2.4.20 Engineering
 	Fixed slapd-ldap leak (ITS#6326)
 	Fixed slapd-relay bind segfault (ITS#6337)
 	Fixed slapo-memberof operational attr updates (ITS#6329)
+	Fixed slapo-pcache entry dupe (ITS#6310)
 	Fixed slapo-syncprov deadlock (ITS#6335)
 	Build Environment
 		Fixed slapd MAXPATHLEN handling (ITS#6342)
diff --git a/servers/slapd/overlays/pcache.c b/servers/slapd/overlays/pcache.c
index 309a192771ae367fbc8e2f9bc2056fe7b0f50a96..bfd1cd30db6fbe9a863756cb9e9eadfa907cdce9 100644
--- a/servers/slapd/overlays/pcache.c
+++ b/servers/slapd/overlays/pcache.c
@@ -836,6 +836,7 @@ merge_entry(
 
 	slap_callback cb = { NULL, slap_null_cb, NULL, NULL };
 
+	e = entry_dup( e );
 	attr = e->e_attrs;
 	e->e_attrs = NULL;
 
@@ -877,7 +878,7 @@ merge_entry(
 		}
 	} else {
 		if ( op->ora_e == e )
-			be_entry_release_w( op, e );
+			entry_free( e );
 		rc = 1;
 	}