diff --git a/CHANGES b/CHANGES
index c7651e1edffd1842af7a22eaef5a3d8d9a4e5acf..bec65ffda20a355ca3d19c81dd244245b831a65c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,6 +1,7 @@
 OpenLDAP 2.4 Change Log
 
 OpenLDAP 2.4.13 Engineering
+	Fixed slapd-bdb/hdb invalid db crash (ITS#5698)
 
 OpenLDAP 2.4.12 Release (2008/10/12)
 	Fixed libldap ldap_utf8_strchar arguments (ITS#5720)
diff --git a/servers/slapd/back-bdb/init.c b/servers/slapd/back-bdb/init.c
index 14bd1b1bfcf14e4c579a02bec4e846a0a59a3b13..393b6a52f42038b677814c6533ec9d866498eb22 100644
--- a/servers/slapd/back-bdb/init.c
+++ b/servers/slapd/back-bdb/init.c
@@ -640,6 +640,17 @@ bdb_db_destroy( BackendDB *be, ConfigReply *cr )
 {
 	struct bdb_info *bdb = (struct bdb_info *) be->be_private;
 
+	/* stop and remove checkpoint task */
+	if ( bdb->bi_txn_cp_task ) {
+		struct re_s *re = bdb->bi_txn_cp_task;
+		bdb->bi_txn_cp_task = NULL;
+		ldap_pvt_thread_mutex_lock( &slapd_rq.rq_mutex );
+		if ( ldap_pvt_runqueue_isrunning( &slapd_rq, re ) )
+			ldap_pvt_runqueue_stoptask( &slapd_rq, re );
+		ldap_pvt_runqueue_remove( &slapd_rq, re );
+		ldap_pvt_thread_mutex_unlock( &slapd_rq.rq_mutex );
+	}
+
 	/* monitor handling */
 	(void)bdb_monitor_db_destroy( be );