diff --git a/servers/slapd/overlays/ppolicy.c b/servers/slapd/overlays/ppolicy.c
index 820905e9b1bd7b3dff74bb096b66df5e97202463..3fdcda9f1aeb45469762c83e8922a61da19250de 100644
--- a/servers/slapd/overlays/ppolicy.c
+++ b/servers/slapd/overlays/ppolicy.c
@@ -2305,6 +2305,8 @@ ppolicy_db_init(
 		pwcons++;
 	}
 
+	ov_count++;
+
 	return 0;
 }
 
@@ -2314,7 +2316,6 @@ ppolicy_db_open(
 	ConfigReply *cr
 )
 {
-	ov_count++;
 	return overlay_register_control( be, LDAP_CONTROL_PASSWORDPOLICYREQUEST );
 }
 
@@ -2324,16 +2325,10 @@ ppolicy_db_close(
 	ConfigReply *cr
 )
 {
-	slap_overinst *on = (slap_overinst *) be->bd_info;
-	pp_info *pi = on->on_bi.bi_private;
-
 #ifdef SLAP_CONFIG_DELETE
 	overlay_unregister_control( be, LDAP_CONTROL_PASSWORDPOLICYREQUEST );
 #endif /* SLAP_CONFIG_DELETE */
 
-	free( pi->def_policy.bv_val );
-	free( pi );
-
 	return 0;
 }
 
@@ -2343,6 +2338,13 @@ ppolicy_db_destroy(
 	ConfigReply *cr
 )
 {
+	slap_overinst *on = (slap_overinst *) be->bd_info;
+	pp_info *pi = on->on_bi.bi_private;
+
+	on->on_bi.bi_private = NULL;
+	free( pi->def_policy.bv_val );
+	free( pi );
+
 	ov_count--;
 	if ( ov_count <=0 && pwcons ) {
 		pw_conn *pwc = pwcons;