diff --git a/pbx/pbx_dundi.c b/pbx/pbx_dundi.c
index ec1d2189c37460c62b4954ed578603d33feeba66..10495acb6fd60e8b612feb5de0d945060c2f5b4a 100644
--- a/pbx/pbx_dundi.c
+++ b/pbx/pbx_dundi.c
@@ -5014,30 +5014,31 @@ static int load_module(void)
 	io = io_context_create();
 	sched = ast_sched_context_create();
 
-	if (!io || !sched)
-		return AST_MODULE_LOAD_DECLINE;
+	if (!io || !sched) {
+		goto declined;
+	}
 
-	if (set_config("dundi.conf", &sin, 0))
-		return AST_MODULE_LOAD_DECLINE;
+	if (set_config("dundi.conf", &sin, 0)) {
+		goto declined;
+	}
 
 	netsocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
 
 	if (netsocket < 0) {
 		ast_log(LOG_ERROR, "Unable to create network socket: %s\n", strerror(errno));
-		return AST_MODULE_LOAD_DECLINE;
+		goto declined;
 	}
 	if (bind(netsocket, (struct sockaddr *) &sin, sizeof(sin))) {
 		ast_log(LOG_ERROR, "Unable to bind to %s port %d: %s\n",
 			ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port), strerror(errno));
-		return AST_MODULE_LOAD_DECLINE;
+		goto declined;
 	}
 
 	ast_set_qos(netsocket, tos, 0, "DUNDi");
 
 	if (start_network_thread()) {
 		ast_log(LOG_ERROR, "Unable to start network thread\n");
-		close(netsocket);
-		return AST_MODULE_LOAD_DECLINE;
+		goto declined;
 	}
 
 	ast_cli_register_multiple(cli_dundi, ARRAY_LEN(cli_dundi));
@@ -5050,6 +5051,10 @@ static int load_module(void)
 	ast_verb(2, "DUNDi Ready and Listening on %s port %d\n", ast_inet_ntoa(sin.sin_addr), ntohs(sin.sin_port));
 
 	return AST_MODULE_LOAD_SUCCESS;
+
+declined:
+	unload_module();
+	return AST_MODULE_LOAD_DECLINE;
 }
 
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Distributed Universal Number Discovery (DUNDi)",