diff --git a/funcs/func_periodic_hook.c b/funcs/func_periodic_hook.c
index f8e79b326af091b45d1706c158a5e145aca87302..0ab3d6b8b6f6480a5c51266194cd7da5ffd55c44 100644
--- a/funcs/func_periodic_hook.c
+++ b/funcs/func_periodic_hook.c
@@ -488,6 +488,11 @@ static int load_module(void)
 
 	res = ast_custom_function_register_escalating(&hook_function, AST_CFE_BOTH);
 
+	if (!res) {
+		/* For Optional API. */
+		ast_module_shutdown_ref(AST_MODULE_SELF);
+	}
+
 	return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
 }
 
diff --git a/res/res_agi.c b/res/res_agi.c
index 7d2f03afc25b1848b481156ba2108a14f75b4b03..13af48f494cabf303450512ed81a5d130fd2a775 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -4714,6 +4714,10 @@ static int load_module(void)
 		unload_module();
 		return AST_MODULE_LOAD_DECLINE;
 	}
+
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
diff --git a/res/res_http_websocket.c b/res/res_http_websocket.c
index 60332f591dc63f8077c2d40706d41cac549bb361..8e9aae9dded13b7e66a9f8ff283b8178e15f2b9d 100644
--- a/res/res_http_websocket.c
+++ b/res/res_http_websocket.c
@@ -1446,6 +1446,9 @@ static int load_module(void)
 	ast_http_uri_link(&websocketuri);
 	websocket_add_protocol_internal("echo", websocket_echo_callback);
 
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return 0;
 }
 
diff --git a/res/res_monitor.c b/res/res_monitor.c
index da1982a274a017ba7fd991ca9ea2d7e9a4f536cf..3ac6e455feff3b4bf00aeb296f2858626ad52e16 100644
--- a/res/res_monitor.c
+++ b/res/res_monitor.c
@@ -985,6 +985,9 @@ static int load_module(void)
 	ast_manager_register_xml("PauseMonitor", EVENT_FLAG_CALL, pause_monitor_action);
 	ast_manager_register_xml("UnpauseMonitor", EVENT_FLAG_CALL, unpause_monitor_action);
 
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
diff --git a/res/res_pktccops.c b/res/res_pktccops.c
index 4f694487543f2b0e11fee23a8723d61237bc8ebf..e8d266cdadeee300759718f7ef49636a988e5c9f 100644
--- a/res/res_pktccops.c
+++ b/res/res_pktccops.c
@@ -1472,6 +1472,10 @@ static int load_module(void)
 	}
 	ast_cli_register_multiple(cli_pktccops, sizeof(cli_pktccops) / sizeof(struct ast_cli_entry));
 	restart_pktc_thread();
+
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return 0;
 }
 
diff --git a/res/res_smdi.c b/res/res_smdi.c
index 4d7240104273c8de55744ae0876e2eb4049977f3..0edabb83c516a894e33ccdb2ffe1d72de11451f4 100644
--- a/res/res_smdi.c
+++ b/res/res_smdi.c
@@ -1405,6 +1405,10 @@ static int _unload_module(int fromload)
 	}
 
 	smdi_loaded = 0;
+
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return 0;
 }
 
diff --git a/res/res_statsd.c b/res/res_statsd.c
index 3d7dd168400f980c1a80c90ddeff599e746712e9..aee0bcd5a00a97df4525d20a8c25cd1a09f4e7ed 100644
--- a/res/res_statsd.c
+++ b/res/res_statsd.c
@@ -353,6 +353,9 @@ static int load_module(void)
 		return AST_MODULE_LOAD_DECLINE;
 	}
 
+	/* For Optional API. */
+	ast_module_shutdown_ref(AST_MODULE_SELF);
+
 	return AST_MODULE_LOAD_SUCCESS;
 }