diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index b189e0952e..58ee7c1c5e 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -783,12 +783,23 @@ static int config_module(int reload)
 
 static int load_module(void)
 {
-	ast_cli_register_multiple(cdr_pgsql_status_cli, sizeof(cdr_pgsql_status_cli) / sizeof(struct ast_cli_entry));
+	int res;
+
 	if (config_module(0)) {
-		return AST_MODULE_LOAD_DECLINE;
+		res = AST_MODULE_LOAD_DECLINE;
+	} else if (ast_cdr_register(name, ast_module_info->description, pgsql_log)) {
+		res = AST_MODULE_LOAD_DECLINE;
+	} else if (ast_cli_register_multiple(cdr_pgsql_status_cli, ARRAY_LEN(cdr_pgsql_status_cli))) {
+		res = AST_MODULE_LOAD_DECLINE;
+	} else {
+		res = AST_MODULE_LOAD_SUCCESS;
+	}
+
+	if (res != AST_MODULE_LOAD_SUCCESS) {
+		unload_module();
 	}
-	return ast_cdr_register(name, ast_module_info->description, pgsql_log)
-		? AST_MODULE_LOAD_DECLINE : 0;
+
+	return res;
 }
 
 static int reload(void)