diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c
index 205c2075d906abe5aadf5dce9243068c28a698f3..1d319911450f698018b562f75529a336c69b0207 100644
--- a/cdr/cdr_adaptive_odbc.c
+++ b/cdr/cdr_adaptive_odbc.c
@@ -663,7 +663,6 @@ early_release:
 static int unload_module(void)
 {
 	ast_cdr_unregister(name);
-	usleep(1);
 	if (AST_RWLIST_WRLOCK(&odbc_tables)) {
 		ast_cdr_register(name, ast_module_info->description, odbc_log);
 		ast_log(LOG_ERROR, "Unable to lock column list.  Unload failed.\n");
diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index 5e8e486730b9308e0142eaa08f2a8321b1cd349b..75fb0f854f3d05d957954654079296459d30dd71 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -331,10 +331,9 @@ static int pgsql_log(struct ast_cdr *cdr)
 static int unload_module(void)
 {
 	struct columns *current;
+
 	ast_cdr_unregister(name);
 
-	/* Give all threads time to finish */
-	usleep(1);
 	PQfinish(conn);
 
 	if (pghostname)
diff --git a/main/cdr.c b/main/cdr.c
index 3f7b9aee2f9effb1514653c83b9ada8e7ad1f27e..610c2ab3100f45778ef894d77b5d08ae3d4cfa6b 100644
--- a/main/cdr.c
+++ b/main/cdr.c
@@ -148,13 +148,16 @@ void ast_cdr_unregister(const char *name)
 	AST_RWLIST_TRAVERSE_SAFE_BEGIN(&be_list, i, list) {
 		if (!strcasecmp(name, i->name)) {
 			AST_RWLIST_REMOVE_CURRENT(list);
-			ast_verb(2, "Unregistered '%s' CDR backend\n", name);
-			ast_free(i);
 			break;
 		}
 	}
 	AST_RWLIST_TRAVERSE_SAFE_END;
 	AST_RWLIST_UNLOCK(&be_list);
+
+	if (i) {
+		ast_verb(2, "Unregistered '%s' CDR backend\n", name);
+		ast_free(i);
+	}
 }
 
 int ast_cdr_isset_unanswered(void)