diff --git a/CHANGES b/CHANGES
index 8a1d917711c0d0659487872c8e9c34e17c89b5fc..a2c607fae4766dcd039646c20eee15fad4f7b66e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -56,6 +56,7 @@ OpenLDAP 2.4.24 Engineering
 	Fixed slapo-rwm double free (ITS#6720)
 	Fixed slapo-rwm crasher (ITS#6632)
 	Fixed slapo-sssvlv initialization (ITS#6649)
+	Fixed slapo-sssvlv to not advertise when unused (ITS#6647)
 	Fixed slapo-syncprov to send error if consumer is newer (ITS#6606)
 	Fixed slapo-syncprov filter race condition (ITS#6708)
 	Fixed slapo-syncprov active mod race (ITS#6709)
diff --git a/servers/slapd/overlays/sssvlv.c b/servers/slapd/overlays/sssvlv.c
index 10a0d00cb7dc3a2298ce00938baf11055a1b61f1..d33eb0742b8878c87cf050e56957330db092e809 100644
--- a/servers/slapd/overlays/sssvlv.c
+++ b/servers/slapd/overlays/sssvlv.c
@@ -1158,6 +1158,38 @@ static int sssvlv_db_init(
 {
 	slap_overinst	*on = (slap_overinst *)be->bd_info;
 	sssvlv_info *si;
+
+	if ( ov_count == 0 ) {
+		int rc;
+
+		rc = register_supported_control2( LDAP_CONTROL_SORTREQUEST,
+			SLAP_CTRL_SEARCH,
+			NULL,
+			sss_parseCtrl,
+			1 /* replace */,
+			&sss_cid );
+		if ( rc != LDAP_SUCCESS ) {
+			Debug( LDAP_DEBUG_ANY, "Failed to register Sort Request control '%s' (%d)\n",
+				LDAP_CONTROL_SORTREQUEST, rc, 0 );
+			return rc;
+		}
+
+		rc = register_supported_control2( LDAP_CONTROL_VLVREQUEST,
+			SLAP_CTRL_SEARCH,
+			NULL,
+			vlv_parseCtrl,
+			1 /* replace */,
+			&vlv_cid );
+		if ( rc != LDAP_SUCCESS ) {
+			Debug( LDAP_DEBUG_ANY, "Failed to register VLV Request control '%s' (%d)\n",
+				LDAP_CONTROL_VLVREQUEST, rc, 0 );
+#ifdef SLAP_CONFIG_DELETE
+			overlay_unregister_control( be, LDAP_CONTROL_SORTREQUEST );
+#endif /* SLAP_CONFIG_DELETE */
+			unregister_supported_control( LDAP_CONTROL_SORTREQUEST );
+			return rc;
+		}
+	}
 	
 	si = (sssvlv_info *)ch_malloc(sizeof(sssvlv_info));
 	on->on_bi.bi_private = si;
@@ -1190,6 +1222,10 @@ static int sssvlv_db_destroy(
 		ch_free(sort_conns);
 		ldap_pvt_thread_mutex_destroy( &sort_conns_mutex );
 	}
+
+	if ( ov_count == 0 ) {
+		unregister_supported_control( LDAP_CONTROL_SORTREQUEST );
+	}
 	
 	if ( si ) {
 		ch_free( si );
@@ -1217,30 +1253,9 @@ int sssvlv_initialize()
 	if ( rc )
 		return rc;
 
-	rc = register_supported_control2( LDAP_CONTROL_SORTREQUEST,
-			SLAP_CTRL_SEARCH,
-			NULL,
-			sss_parseCtrl,
-			1 /* replace */,
-			&sss_cid );
-
-	if ( rc == LDAP_SUCCESS ) {
-		rc = register_supported_control2( LDAP_CONTROL_VLVREQUEST,
-			SLAP_CTRL_SEARCH,
-			NULL,
-			vlv_parseCtrl,
-			1 /* replace */,
-			&vlv_cid );
-	}
-
-	if ( rc == LDAP_SUCCESS ) {
-		rc = overlay_register( &sssvlv );
-		if ( rc != LDAP_SUCCESS ) {
-			Debug( LDAP_DEBUG_ANY, "Failed to register server side sort overlay\n", 0, 0, 0 );
-		}
-	}
-	else {
-		Debug( LDAP_DEBUG_ANY, "Failed to register control %d\n", rc, 0, 0 );
+	rc = overlay_register( &sssvlv );
+	if ( rc != LDAP_SUCCESS ) {
+		Debug( LDAP_DEBUG_ANY, "Failed to register server side sort overlay\n", 0, 0, 0 );
 	}
 
 	return rc;