diff --git a/addons/chan_mobile.c b/addons/chan_mobile.c
index 43973f4609fe357359e45c3ae09b573aeb10e910..1bceed10566683cf5c3f783e80ccae543f4b5190 100644
--- a/addons/chan_mobile.c
+++ b/addons/chan_mobile.c
@@ -4584,7 +4584,8 @@ e_cleanup:
 	return AST_MODULE_LOAD_FAILURE;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Bluetooth Mobile Device Channel Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Bluetooth Mobile Device Channel Driver",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 );
diff --git a/addons/res_config_mysql.c b/addons/res_config_mysql.c
index fc449d26be23ef922a2253a2974b71465d2b1bbc..e770452fd4dc6c111661175114f42a96b6d576fa 100644
--- a/addons/res_config_mysql.c
+++ b/addons/res_config_mysql.c
@@ -1773,9 +1773,10 @@ static char *handle_cli_realtime_mysql_status(struct ast_cli_entry *e, int cmd,
 	return CLI_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "MySQL RealTime Configuration Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "MySQL RealTime Configuration Driver",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_REALTIME_DRIVER,
 		);
 
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index 88fc81a2d15ac38f66d5d41503843e88305f12e0..daa54aa82d39510d9cc0bba49d3d9094ac264783 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -819,4 +819,8 @@ static int load_module(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Conference Bridge Application");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Conference Bridge Application",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_DEVSTATE_PROVIDER,
+);
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 5ef9718f19eb3b59b2057b0ebb29fb09f541be9e..e40a91cbb0b4205027bc5d30c4183535543bdf15 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -7068,9 +7068,10 @@ static int reload(void)
 	return load_config(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "MeetMe conference bridge",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "MeetMe conference bridge",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_DEVSTATE_PROVIDER,
 	       );
 
diff --git a/apps/app_queue.c b/apps/app_queue.c
index c1e390660dc76700f0f8dc0cecc4f33ab112a96b..15eebdb5debaa7bfac2c52b958eaad1a87949f70 100644
--- a/apps/app_queue.c
+++ b/apps/app_queue.c
@@ -8188,9 +8188,10 @@ static int reload(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "True Call Queueing",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "True Call Queueing",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_DEVSTATE_CONSUMER,
 	       );
 
diff --git a/cdr/cdr_adaptive_odbc.c b/cdr/cdr_adaptive_odbc.c
index 50577db7ef1bc57c75a44605aab1bae7ef658442..857ad726a5279cc4761912e1e18abffb3fc1c6ff 100644
--- a/cdr/cdr_adaptive_odbc.c
+++ b/cdr/cdr_adaptive_odbc.c
@@ -754,9 +754,10 @@ static int reload(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Adaptive ODBC CDR backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Adaptive ODBC CDR backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
 
diff --git a/cdr/cdr_csv.c b/cdr/cdr_csv.c
index a504b6b09c3697c68950a948ee7980e8af5327f6..60b96588085abde92f835f1d3bd73d267286e077 100644
--- a/cdr/cdr_csv.c
+++ b/cdr/cdr_csv.c
@@ -357,8 +357,9 @@ static int reload(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Comma Separated Values CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Comma Separated Values CDR Backend",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
 	       );
diff --git a/cdr/cdr_custom.c b/cdr/cdr_custom.c
index 684c12b462c392ab1e52e3ea83e928e63f83af4c..c834814e815187b2ae7c494aebd553924df96351 100644
--- a/cdr/cdr_custom.c
+++ b/cdr/cdr_custom.c
@@ -211,9 +211,10 @@ static int reload(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Customizable Comma Separated Values CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable Comma Separated Values CDR Backend",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
 	       );
 
diff --git a/cdr/cdr_manager.c b/cdr/cdr_manager.c
index e9f728476daabcaff2ac82f058a0c72b30b7bb3e..4cc8183656b99e394c75985239a8b69dd9b7b991 100644
--- a/cdr/cdr_manager.c
+++ b/cdr/cdr_manager.c
@@ -218,8 +218,9 @@ static int reload(void)
 	return load_config(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk Manager Interface CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk Manager Interface CDR Backend",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
 	       );
diff --git a/cdr/cdr_odbc.c b/cdr/cdr_odbc.c
index fde134fa8ed5f2f19440a52367fdc0d457036701..e8a7ce828e676e234d7ffce5032be3354f772af4 100644
--- a/cdr/cdr_odbc.c
+++ b/cdr/cdr_odbc.c
@@ -279,8 +279,9 @@ static int reload(void)
 	return odbc_load_module(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "ODBC CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ODBC CDR Backend",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
 	       );
diff --git a/cdr/cdr_pgsql.c b/cdr/cdr_pgsql.c
index b248a1e754704516580f69e6318e505a58994ee0..83c7d2e821505a1453dd3edca58b4c851098c064 100644
--- a/cdr/cdr_pgsql.c
+++ b/cdr/cdr_pgsql.c
@@ -587,8 +587,9 @@ static int reload(void)
 	return config_module(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PostgreSQL CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PostgreSQL CDR Backend",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
 	       );
diff --git a/cdr/cdr_radius.c b/cdr/cdr_radius.c
index 8b611c93f51e4d7c526413ca1e3778c5643422d3..c0e2c6d2f5096cb559979dc87e723f75cb25161a 100644
--- a/cdr/cdr_radius.c
+++ b/cdr/cdr_radius.c
@@ -263,4 +263,8 @@ static int load_module(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "RADIUS CDR Backend");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "RADIUS CDR Backend",
+		.load = load_module,
+		.unload = unload_module,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
+	);
diff --git a/cdr/cdr_sqlite.c b/cdr/cdr_sqlite.c
index d871e8a8a8a3fad22c22d0c59a1bc9d459f4c0ca..a46902c9cba90ac90ab3cedf35b96c64d26ecbae 100644
--- a/cdr/cdr_sqlite.c
+++ b/cdr/cdr_sqlite.c
@@ -238,4 +238,8 @@ err:
 	return AST_MODULE_LOAD_DECLINE;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "SQLite CDR Backend");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite CDR Backend",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
+);
diff --git a/cdr/cdr_sqlite3_custom.c b/cdr/cdr_sqlite3_custom.c
index 88f5776632a93b10578e2eb94cfeebc4469324ab..c2dae7a7bcf0ca6a30666e1b0bf95bca3e5daae5 100644
--- a/cdr/cdr_sqlite3_custom.c
+++ b/cdr/cdr_sqlite3_custom.c
@@ -354,8 +354,9 @@ static int reload(void)
 	return res;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "SQLite3 Custom CDR Module",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite3 Custom CDR Module",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
diff --git a/cdr/cdr_syslog.c b/cdr/cdr_syslog.c
index cc132cbf6cc8a949c449625c14d4d01ac359bd34..6d9a6df3bc4df9531d8d4615d9cf00a93873ac63 100644
--- a/cdr/cdr_syslog.c
+++ b/cdr/cdr_syslog.c
@@ -271,8 +271,9 @@ static int reload(void)
 	return res ? AST_MODULE_LOAD_DECLINE : AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Customizable syslog CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable syslog CDR Backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
diff --git a/cdr/cdr_tds.c b/cdr/cdr_tds.c
index ab0f0659cd060f73f6ba6f84294e450504ed946b..fca815fd8325a8453c84ac85f511ec01e8eed51a 100644
--- a/cdr/cdr_tds.c
+++ b/cdr/cdr_tds.c
@@ -628,8 +628,9 @@ static int unload_module(void)
 	return tds_unload_module();
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "FreeTDS CDR Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "FreeTDS CDR Backend",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CDR_DRIVER,
 	       );
diff --git a/cel/cel_adaptive_odbc.c b/cel/cel_adaptive_odbc.c
index cb1103df7dfc1c94e8cabc80f1cb4c868839a458..f5bd4a3c832568618910d10a7bfdc08a7f3d5c92 100644
--- a/cel/cel_adaptive_odbc.c
+++ b/cel/cel_adaptive_odbc.c
@@ -783,9 +783,10 @@ static int reload(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Adaptive ODBC CEL backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Adaptive ODBC CEL backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
 
diff --git a/cel/cel_custom.c b/cel/cel_custom.c
index 37a7419353518d2ba4efab99148e06d1deacf14b..9f7d589b49b32648c625c0add938510d22fb46f0 100644
--- a/cel/cel_custom.c
+++ b/cel/cel_custom.c
@@ -208,9 +208,10 @@ static int reload(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Customizable Comma Separated Values CEL Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Customizable Comma Separated Values CEL Backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 	);
 
diff --git a/cel/cel_manager.c b/cel/cel_manager.c
index a57c31ebe2ee1f8c053bd1ee8a979a00b4d2d817..fcf20766f99b505be2a5324940e216ede99d288e 100644
--- a/cel/cel_manager.c
+++ b/cel/cel_manager.c
@@ -168,8 +168,9 @@ static int reload(void)
 	return load_config(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk Manager Interface CEL Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk Manager Interface CEL Backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
diff --git a/cel/cel_pgsql.c b/cel/cel_pgsql.c
index e4bdab1d7677c8d49d69573118c42214184a3de5..32ec6302cd0d702514e06510131cb0172459d090 100644
--- a/cel/cel_pgsql.c
+++ b/cel/cel_pgsql.c
@@ -561,8 +561,9 @@ static int reload(void)
 	return my_load_module(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PostgreSQL CEL Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PostgreSQL CEL Backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
diff --git a/cel/cel_radius.c b/cel/cel_radius.c
index c44044f6e6443c4c4af8c3db4f022f1b9c179169..0e20571d5e86de0583225c8a56e8066e1a22850a 100644
--- a/cel/cel_radius.c
+++ b/cel/cel_radius.c
@@ -251,4 +251,8 @@ static int load_module(void)
 	}
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "RADIUS CEL Backend");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "RADIUS CEL Backend",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
+);
diff --git a/cel/cel_sqlite3_custom.c b/cel/cel_sqlite3_custom.c
index 94765d3e4661a6da99cc9b1de3b637b92f3cc37e..18e2a9f1a39c3d484b74dc0b1013b03a76f37d3e 100644
--- a/cel/cel_sqlite3_custom.c
+++ b/cel/cel_sqlite3_custom.c
@@ -357,8 +357,9 @@ static int reload(void)
 	return res;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "SQLite3 Custom CEL Module",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "SQLite3 Custom CEL Module",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
diff --git a/cel/cel_tds.c b/cel/cel_tds.c
index 631c3cb9607509cc2be520ef70233492048f7e6f..37992bf5e8a0aa7508e06073432346ee0457925f 100644
--- a/cel/cel_tds.c
+++ b/cel/cel_tds.c
@@ -576,8 +576,9 @@ static int unload_module(void)
 	return tds_unload_module();
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "FreeTDS CEL Backend",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "FreeTDS CEL Backend",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CDR_DRIVER,
 );
diff --git a/channels/chan_agent.c b/channels/chan_agent.c
index c12900582aea3b58b87eb735a3093e9c5f26265e..b8e142d0469e0430ac678b59d9bd63be7f3a80cd 100644
--- a/channels/chan_agent.c
+++ b/channels/chan_agent.c
@@ -2479,8 +2479,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Agent Proxy Channel",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Agent Proxy Channel",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 	       );
diff --git a/channels/chan_alsa.c b/channels/chan_alsa.c
index 3f8d26d5a6726a411a1e3bd449e7ddbe29dc6cba..120987ae4e549f6ff9e1ad4851f659547435f92a 100644
--- a/channels/chan_alsa.c
+++ b/channels/chan_alsa.c
@@ -1009,4 +1009,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "ALSA Console Channel Driver");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ALSA Console Channel Driver",
+		.load = load_module,
+		.unload = unload_module,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+	);
diff --git a/channels/chan_bridge.c b/channels/chan_bridge.c
index db26466548421effe3e184063221f7d7de06df4c..8218bdceb9a2f22a68aee540e4ec3b9171366ee2 100644
--- a/channels/chan_bridge.c
+++ b/channels/chan_bridge.c
@@ -242,4 +242,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Bridge Interaction Channel");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Bridge Interaction Channel",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+);
diff --git a/channels/chan_console.c b/channels/chan_console.c
index 99b673b6c70dba95118cc0dde1b9297863fe7149..13f1bba8f4d58f61a409f164b79b87bf990dc574 100644
--- a/channels/chan_console.c
+++ b/channels/chan_console.c
@@ -1521,8 +1521,9 @@ static int reload(void)
 	return load_config(1);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Console Channel Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Console Channel Driver",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 );
diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index 333da603c5bfa0ce02ab47b4495fec01c6a4e6cc..be237eaf1ff94f065017d0c3e6c1e7560717f194 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -17858,8 +17858,9 @@ static int reload(void)
  * AST_MODULE_INFO(, , "DAHDI Telephony"
  */
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, tdesc,
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, tdesc,
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 	);
diff --git a/channels/chan_gtalk.c b/channels/chan_gtalk.c
index 4101d52f960cfe5dfd66af137f6da91d0f82d65b..47eed7e08206610b8fee9f5c63a342d10486739f 100644
--- a/channels/chan_gtalk.c
+++ b/channels/chan_gtalk.c
@@ -2154,8 +2154,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Gtalk Channel Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Gtalk Channel Driver",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 	       );
diff --git a/channels/chan_h323.c b/channels/chan_h323.c
index 2907b3fcdc974fedb1d53f17493527ab7a09073d..2362d9a49610d8f10f213099ea276e1c9dfa280c 100644
--- a/channels/chan_h323.c
+++ b/channels/chan_h323.c
@@ -3433,8 +3433,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "The NuFone Network's OpenH323 Channel Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "The NuFone Network's OpenH323 Channel Driver",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 );
diff --git a/channels/chan_iax2.c b/channels/chan_iax2.c
index 92f070be2bb28653e105b1545429416f81ec94ea..ad7033bccb6955d0f1883549d779f5fd59d9d165 100644
--- a/channels/chan_iax2.c
+++ b/channels/chan_iax2.c
@@ -14534,8 +14534,9 @@ static int load_module(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Inter Asterisk eXchange (Ver 2)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Inter Asterisk eXchange (Ver 2)",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 		);
diff --git a/channels/chan_jingle.c b/channels/chan_jingle.c
index bdf01203b60993b4df6ba20fd88cade586e12a94..25b4d7e459d192a805423e06fba617d18ff8a88f 100644
--- a/channels/chan_jingle.c
+++ b/channels/chan_jingle.c
@@ -1966,8 +1966,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Jingle Channel Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Jingle Channel Driver",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 	       );
diff --git a/channels/chan_local.c b/channels/chan_local.c
index 20db5d04aef93774fd3304f1728f160c4e195dac..95adfcab7c4e548701d84c667750a58e04d44f8a 100644
--- a/channels/chan_local.c
+++ b/channels/chan_local.c
@@ -1031,4 +1031,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Local Proxy Channel (Note: used internally by other modules)");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Local Proxy Channel (Note: used internally by other modules)",
+		.load = load_module,
+		.unload = unload_module,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+	);
diff --git a/channels/chan_mgcp.c b/channels/chan_mgcp.c
index 2f4aa4aeab2c17b9cdb1482404a2b9480266cb94..485b39aade22bcffcc3fd0c9baf1f7fbe96c2282 100644
--- a/channels/chan_mgcp.c
+++ b/channels/chan_mgcp.c
@@ -4910,8 +4910,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Media Gateway Control Protocol (MGCP)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Media Gateway Control Protocol (MGCP)",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 	       );
diff --git a/channels/chan_misdn.c b/channels/chan_misdn.c
index 302c8541c3ee866480f20e0d53d26794f1cb9d41..8b31ed23ab0fdf6acf3bd9440e6d6091ea9be979 100644
--- a/channels/chan_misdn.c
+++ b/channels/chan_misdn.c
@@ -12372,8 +12372,9 @@ static void chan_misdn_log(int level, int port, char *tmpl, ...)
 	}
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Channel driver for mISDN Support (BRI/PRI)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Channel driver for mISDN Support (BRI/PRI)",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 );
diff --git a/channels/chan_multicast_rtp.c b/channels/chan_multicast_rtp.c
index f385d4467df73a36ad1e466adc1ee43455f576ff..e3414d2f3b36cc63d8a2923a9d32a9ec3cb4ab34 100644
--- a/channels/chan_multicast_rtp.c
+++ b/channels/chan_multicast_rtp.c
@@ -184,4 +184,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Multicast RTP Paging Channel");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Multicast RTP Paging Channel",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_CHANNEL_DRIVER,
+);
diff --git a/channels/chan_sip.c b/channels/chan_sip.c
index 7970cbc3393718163f4bcb0875f01de26e6c121e..e2db51a3b07a5e64b96ea8af74f10c17e6af4a3b 100644
--- a/channels/chan_sip.c
+++ b/channels/chan_sip.c
@@ -28505,8 +28505,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Session Initiation Protocol (SIP)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Session Initiation Protocol (SIP)",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 	       );
diff --git a/channels/chan_skinny.c b/channels/chan_skinny.c
index 6d4968a7b73e803ab0cd900b4c9775cb240a9e15..4edbc4ab973641e96316d192e11f43fb63397c16 100644
--- a/channels/chan_skinny.c
+++ b/channels/chan_skinny.c
@@ -7488,8 +7488,9 @@ static int reload(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Skinny Client Control Protocol (Skinny)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Skinny Client Control Protocol (Skinny)",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DRIVER,
 );
diff --git a/formats/format_g719.c b/formats/format_g719.c
index 779bea996a805fcddab7896a3745b79c6b81f8b9..6a981d1241386f5248e82c6d93dde38427382ca9 100644
--- a/formats/format_g719.c
+++ b/formats/format_g719.c
@@ -133,11 +133,7 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(g719_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER,"ITU G.719",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "ITU G.719");
 
diff --git a/formats/format_g723.c b/formats/format_g723.c
index 46f22f1eed4ae16aecd69bec023ef050509f3e5e..3d48f26ec363658c9937d43a86fcfe5a270380ca 100644
--- a/formats/format_g723.c
+++ b/formats/format_g723.c
@@ -147,10 +147,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(g723_1_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "G.723.1 Simple Timestamp File Format",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "G.723.1 Simple Timestamp File Format");
diff --git a/formats/format_g726.c b/formats/format_g726.c
index d519fa46d678b71f7b71e9c93daf0b51a3cf475b..53e344cdf175b420395f2074cea74bf5dce39842 100644
--- a/formats/format_g726.c
+++ b/formats/format_g726.c
@@ -256,10 +256,6 @@ static int unload_module(void)
 			ast_log(LOG_WARNING, "Failed to unregister format %s.\n", f[i].name);
 	}
 	return(0);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw G.726 (16/24/32/40kbps) data",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw G.726 (16/24/32/40kbps) data");
diff --git a/formats/format_g729.c b/formats/format_g729.c
index 19be7a418f6164394ab48615089f1082b8b76cb3..439f8a69e174b86942356aa3315cd1dc8c8c958d 100644
--- a/formats/format_g729.c
+++ b/formats/format_g729.c
@@ -143,10 +143,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(g729_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw G729 data",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw G729 data");
diff --git a/formats/format_gsm.c b/formats/format_gsm.c
index f1ba9fb76160ecdd7887d784e48ea78d5dcda013..06d1d94d1720694bb6824254142fc88093c9069e 100644
--- a/formats/format_gsm.c
+++ b/formats/format_gsm.c
@@ -167,10 +167,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(gsm_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw GSM data",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw GSM data");
diff --git a/formats/format_h263.c b/formats/format_h263.c
index 02b7f792c8be9e53322dcedb44c0e11d8f70a5d7..6e95c7ad4a91e477985005f8f70245bd312c6bb4 100644
--- a/formats/format_h263.c
+++ b/formats/format_h263.c
@@ -181,10 +181,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(h263_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw H.263 data",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw H.263 data");
diff --git a/formats/format_h264.c b/formats/format_h264.c
index 1573475cecc593b39cc96c10455895a3f733beec..0a5ba94213a20dea54489670b2bac35d66d84bc7 100644
--- a/formats/format_h264.c
+++ b/formats/format_h264.c
@@ -170,10 +170,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(h264_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw H.264 data",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw H.264 data");
diff --git a/formats/format_ilbc.c b/formats/format_ilbc.c
index d01c74fc4516ef083cd6454865903a97dd636387..d2fa8a1c0193307afed1fa3ef4beb4bf1b7b321d 100644
--- a/formats/format_ilbc.c
+++ b/formats/format_ilbc.c
@@ -141,10 +141,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(ilbc_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw iLBC data",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw iLBC data");
diff --git a/formats/format_jpeg.c b/formats/format_jpeg.c
index 54a2422129f52e4eb869144ab429af5b8326fed7..169ffbb32255fb37198bef1c4339a960a24afa23 100644
--- a/formats/format_jpeg.c
+++ b/formats/format_jpeg.c
@@ -110,10 +110,6 @@ static int unload_module(void)
 	ast_image_unregister(&jpeg_format);
 
 	return 0;
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "jpeg (joint picture experts group) image format",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "jpeg (joint picture experts group) image format");
diff --git a/formats/format_ogg_vorbis.c b/formats/format_ogg_vorbis.c
index 928b001049720242078c1bb1860cb4ff8fe1e5a6..d45511a2e9b95896fc39f2a9327acb4e9e20c133 100644
--- a/formats/format_ogg_vorbis.c
+++ b/formats/format_ogg_vorbis.c
@@ -556,8 +556,4 @@ static int unload_module(void)
 	return ast_format_unregister(vorbis_f.name);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "OGG/Vorbis audio",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "OGG/Vorbis audio");
diff --git a/formats/format_pcm.c b/formats/format_pcm.c
index b272b266355f3c61286e1927be9150c5789c29de..2b0db56e2759530b48ea50db5ac06585325ed616 100644
--- a/formats/format_pcm.c
+++ b/formats/format_pcm.c
@@ -492,10 +492,6 @@ static int unload_module(void)
 		|| ast_format_unregister(alaw_f.name)
 		|| ast_format_unregister(au_f.name)
 		|| ast_format_unregister(g722_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw/Sun uLaw/ALaw 8KHz (PCM,PCMA,AU), G.722 16Khz",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw/Sun uLaw/ALaw 8KHz (PCM,PCMA,AU), G.722 16Khz");
diff --git a/formats/format_siren14.c b/formats/format_siren14.c
index 215450f78592b7d9a267a1b807b47a9a96759504..498317c82f891ba6463b8fb3b19787e1b3c185d5 100644
--- a/formats/format_siren14.c
+++ b/formats/format_siren14.c
@@ -133,10 +133,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(siren14_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ITU G.722.1 Annex C (Siren14, licensed from Polycom)",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "ITU G.722.1 Annex C (Siren14, licensed from Polycom)");
diff --git a/formats/format_siren7.c b/formats/format_siren7.c
index a2871fcf816e5730dffea6368534c63c7f2fd350..6017207cf8364989a80ed77dbc475d9dc665138f 100644
--- a/formats/format_siren7.c
+++ b/formats/format_siren7.c
@@ -133,10 +133,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(siren7_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "ITU G.722.1 (Siren7, licensed from Polycom)",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "ITU G.722.1 (Siren7, licensed from Polycom)");
diff --git a/formats/format_sln.c b/formats/format_sln.c
index 11b150d5bf99f92f5980f200a65b6698d124de90..538f77fe798a08e5def27c55ce9740b19ba75e21 100644
--- a/formats/format_sln.c
+++ b/formats/format_sln.c
@@ -125,10 +125,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(slin_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw Signed Linear Audio support (SLN)",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw Signed Linear Audio support (SLN)");
diff --git a/formats/format_sln16.c b/formats/format_sln16.c
index 3f9a73678bb23631c87ab3f2af779c896cb164b5..5e73fc9d8953263e782f837d3a66fab55f7aadc2 100644
--- a/formats/format_sln16.c
+++ b/formats/format_sln16.c
@@ -133,10 +133,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(slin_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Raw Signed Linear 16KHz Audio support (SLN16)",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Raw Signed Linear 16KHz Audio support (SLN16)");
diff --git a/formats/format_vox.c b/formats/format_vox.c
index db9e64631ebea67f59fcbaa994b58c3f00fd822c..1501375bb64e19b051d35b70b3c45466816022a4 100644
--- a/formats/format_vox.c
+++ b/formats/format_vox.c
@@ -130,10 +130,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(vox_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Dialogic VOX (ADPCM) File Format",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Dialogic VOX (ADPCM) File Format");
diff --git a/formats/format_wav.c b/formats/format_wav.c
index 6cd4c54bc6576eb7b98876c29466402eee62d6d0..050df73eba3df7a02d500e4d6d6aaa6942c8b249 100644
--- a/formats/format_wav.c
+++ b/formats/format_wav.c
@@ -493,10 +493,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(wav_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Microsoft WAV format (8000Hz Signed Linear)",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Microsoft WAV format (8000Hz Signed Linear)");
diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c
index 0b93b6eb95b50c8b8ccf342a0e68ef447361a9c5..106d88cb74eb565a9de7fdcc08cb3bd5a5ef0adc 100644
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -546,10 +546,6 @@ static int load_module(void)
 static int unload_module(void)
 {
 	return ast_format_unregister(wav49_f.name);
-}	
+}
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Microsoft WAV format (Proprietary GSM)",
-	.load = load_module,
-	.unload = unload_module,
-	.load_pri = 10,
-);
+AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Microsoft WAV format (Proprietary GSM)");
diff --git a/funcs/func_curl.c b/funcs/func_curl.c
index e7c5b65ca5d72525e1b1c71f740c43df29aabf35..92d0b9729e2b0a2753d8fc7b6066d607d0eee988 100644
--- a/funcs/func_curl.c
+++ b/funcs/func_curl.c
@@ -638,5 +638,9 @@ static int load_module(void)
 	return res;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Load external URL");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Load external URL",
+		.load = load_module,
+		.unload = unload_module,
+		.load_pri = AST_MODPRI_REALTIME_DEPEND2,
+	);
 
diff --git a/funcs/func_devstate.c b/funcs/func_devstate.c
index 6e4a674d0d8c1c49ad6a89588a4313b9bcd0dee6..396657768c7cfa54272aee9b8808a49f71bb92eb 100644
--- a/funcs/func_devstate.c
+++ b/funcs/func_devstate.c
@@ -349,4 +349,8 @@ static int load_module(void)
 	return res;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Gets or sets a device state in the dialplan");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Gets or sets a device state in the dialplan",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_DEVSTATE_PROVIDER,
+);
diff --git a/include/asterisk/config.h b/include/asterisk/config.h
index c5f79730d3fa2311f9497a1e655722d8c2c7de85..f7279f141ed53bc1bbfbf75be7bcc0d40566f3b0 100644
--- a/include/asterisk/config.h
+++ b/include/asterisk/config.h
@@ -43,6 +43,8 @@ enum {
 	CONFIG_FLAG_FILEUNCHANGED = (1 << 1),
 	/*! Don't attempt to cache mtime on this config file. */
 	CONFIG_FLAG_NOCACHE       = (1 << 2),
+	/*! Don't attempt to load from realtime (typically called from a realtime driver dependency) */
+	CONFIG_FLAG_NOREALTIME    = (1 << 3),
 };
 
 #define	CONFIG_STATUS_FILEMISSING	(void *)0
diff --git a/include/asterisk/module.h b/include/asterisk/module.h
index 0beed8d2cbc63af7256c781108c75700aa7b377b..24f66fc36972b68e17551a765e0093f9506406ec 100644
--- a/include/asterisk/module.h
+++ b/include/asterisk/module.h
@@ -193,6 +193,20 @@ enum ast_module_flags {
 	AST_MODFLAG_LOAD_ORDER = (1 << 1),
 };
 
+enum ast_module_load_priority {
+	AST_MODPRI_REALTIME_DEPEND =    10,  /*!< Dependency for a realtime driver */
+	AST_MODPRI_REALTIME_DEPEND2 =   20,  /*!< Second level dependency for a realtime driver (func_curl needs res_curl, but is needed by res_config_curl) */
+	AST_MODPRI_REALTIME_DRIVER =    30,  /*!< A realtime driver, which provides configuration services for other modules */
+	AST_MODPRI_CHANNEL_DEPEND =     50,  /*!< Channel driver dependency (may depend upon realtime, e.g. MOH) */
+	AST_MODPRI_CHANNEL_DRIVER =     60,  /*!< Channel drivers (provide devicestate) */
+	AST_MODPRI_APP_DEPEND =         70,  /*!< Dependency for an application */
+	AST_MODPRI_DEVSTATE_PROVIDER =  80,  /*!< Applications and other modules that _provide_ devicestate (e.g. meetme) */
+	AST_MODPRI_DEVSTATE_PLUGIN =    90,  /*!< Plugin for a module that provides devstate (e.g. res_calendar_*) */
+	AST_MODPRI_CDR_DRIVER =        100,  /*!< CDR or CEL backend */
+	AST_MODPRI_DEFAULT =           128,  /*!< Modules not otherwise defined (such as most apps) will load here */
+	AST_MODPRI_DEVSTATE_CONSUMER = 150,  /*!< Certain modules, which consume devstate, need to load after all others (e.g. app_queue) */
+};
+
 struct ast_module_info {
 
 	/*!
@@ -245,7 +259,7 @@ struct ast_module *ast_module_ref(struct ast_module *);
 void ast_module_unref(struct ast_module *);
 
 #if defined(__cplusplus) || defined(c_plusplus)
-#define AST_MODULE_INFO(keystr, flags_to_set, desc, load_func, unload_func, reload_func)	\
+#define AST_MODULE_INFO(keystr, flags_to_set, desc, load_func, unload_func, reload_func, load_pri)	\
 	static struct ast_module_info __mod_info = {	\
 		NULL,					\
 		load_func,				\
@@ -258,6 +272,7 @@ void ast_module_unref(struct ast_module *);
 		keystr,					\
 		flags_to_set,				\
 		AST_BUILDOPT_SUM,			\
+		load_pri,           \
 	};						\
 	static void  __attribute__((constructor)) __reg_module(void) \
 	{ \
@@ -270,10 +285,11 @@ void ast_module_unref(struct ast_module *);
 	static const __attribute__((unused)) struct ast_module_info *ast_module_info = &__mod_info
 
 #define AST_MODULE_INFO_STANDARD(keystr, desc)		\
-	AST_MODULE_INFO(keystr, AST_MODFLAG_DEFAULT, desc,	\
+	AST_MODULE_INFO(keystr, AST_MODFLAG_LOAD_ORDER, desc,	\
 			load_module,			\
 			unload_module,		\
-			NULL			\
+			NULL,			\
+			AST_MODPRI_DEFAULT \
 		       )
 #else /* plain C */
 
@@ -364,9 +380,10 @@ static void __restore_globals(void)
 	static const struct ast_module_info *ast_module_info = &__mod_info
 
 #define AST_MODULE_INFO_STANDARD(keystr, desc)		\
-	AST_MODULE_INFO(keystr, AST_MODFLAG_DEFAULT, desc,	\
+	AST_MODULE_INFO(keystr, AST_MODFLAG_LOAD_ORDER, desc,	\
 			.load = load_module,			\
 			.unload = unload_module,		\
+			.load_pri = AST_MODPRI_DEFAULT, \
 		       )
 #endif	/* plain C */
 
diff --git a/main/asterisk.c b/main/asterisk.c
index 0fd1711699b28f030372220748236471ec1ae28e..e82223d5885b1a7156a45e45e4cf95572a813a9d 100644
--- a/main/asterisk.c
+++ b/main/asterisk.c
@@ -2826,7 +2826,7 @@ static void ast_readconfig(void)
 	struct ast_variable *v;
 	char *config = DEFAULT_CONFIG_FILE;
 	char hostname[MAXHOSTNAMELEN] = "";
-	struct ast_flags config_flags = { 0 };
+	struct ast_flags config_flags = { CONFIG_FLAG_NOREALTIME };
 	struct {
 		unsigned int dbdir:1;
 		unsigned int keydir:1;
diff --git a/main/config.c b/main/config.c
index f65c69e5377b8ba9febfe9710193705c19377b16..1ed46b77c1779f5a7859add053bbc8b7b5a18a97 100644
--- a/main/config.c
+++ b/main/config.c
@@ -1896,7 +1896,7 @@ int read_config_maps(void)
 	struct ast_config *config, *configtmp;
 	struct ast_variable *v;
 	char *driver, *table, *database, *stringp, *tmp;
-	struct ast_flags flags = { 0 };
+	struct ast_flags flags = { CONFIG_FLAG_NOREALTIME };
 
 	clear_config_maps();
 
@@ -2060,7 +2060,7 @@ struct ast_config *ast_config_internal_load(const char *filename, struct ast_con
 
 	cfg->include_level++;
 
-	if (strcmp(filename, extconfig_conf) && strcmp(filename, "asterisk.conf") && config_engine_list) {
+	if (!ast_test_flag(&flags, CONFIG_FLAG_NOREALTIME) && config_engine_list) {
 		struct ast_config_engine *eng;
 
 		eng = find_engine(filename, db, sizeof(db), table, sizeof(table));
diff --git a/main/loader.c b/main/loader.c
index 0249af9d81e4790033aa7aa7f75c07a7347b2612..17bb1f8211494df69fe2e243c5eda48e75b643e6 100644
--- a/main/loader.c
+++ b/main/loader.c
@@ -899,9 +899,9 @@ static int mod_load_cmp(void *a, void *b)
 	struct ast_module *a_mod = (struct ast_module *) a;
 	struct ast_module *b_mod = (struct ast_module *) b;
 	int res = -1;
-	/* if load_pri is not set, default is 255.  Lower is better*/
-	unsigned char a_pri = ast_test_flag(a_mod->info, AST_MODFLAG_LOAD_ORDER) ? a_mod->info->load_pri : 255;
-	unsigned char b_pri = ast_test_flag(b_mod->info, AST_MODFLAG_LOAD_ORDER) ? b_mod->info->load_pri : 255;
+	/* if load_pri is not set, default is 128.  Lower is better*/
+	unsigned char a_pri = ast_test_flag(a_mod->info, AST_MODFLAG_LOAD_ORDER) ? a_mod->info->load_pri : 128;
+	unsigned char b_pri = ast_test_flag(b_mod->info, AST_MODFLAG_LOAD_ORDER) ? b_mod->info->load_pri : 128;
 	if (a_pri == b_pri) {
 		res = 0;
 	} else if (a_pri < b_pri) {
diff --git a/pbx/pbx_lua.c b/pbx/pbx_lua.c
index e292117a381af2b4e992f3e8ce0ef4bd535f3f3f..c37dba6fa96a7f97136f8b27fa9541bb81f0cdd5 100644
--- a/pbx/pbx_lua.c
+++ b/pbx/pbx_lua.c
@@ -84,7 +84,7 @@ static void lua_create_application_metatable(lua_State *L);
 static void lua_create_autoservice_functions(lua_State *L);
 static void lua_create_hangup_function(lua_State *L);
 
-void lua_state_destroy(void *data);
+static void lua_state_destroy(void *data);
 static lua_State *lua_get_state(struct ast_channel *chan);
 
 static int exists(struct ast_channel *chan, const char *context, const char *exten, int priority, const char *callerid, const char *data);
@@ -108,7 +108,7 @@ static const struct ast_datastore_info lua_datastore = {
 /*!
  * \brief The destructor for lua_datastore
  */
-void lua_state_destroy(void *data)
+static void lua_state_destroy(void *data)
 {
 	if (data)
 		lua_close(data);
@@ -1467,7 +1467,7 @@ static int load_module(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Lua PBX Switch",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Lua PBX Switch",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
diff --git a/res/res_adsi.c b/res/res_adsi.c
index b7e832750679ff9cff13b55a7487a2d9538d33b2..226105d87b29f5ab51f4646d108eb2a5d0133761 100644
--- a/res/res_adsi.c
+++ b/res/res_adsi.c
@@ -1141,8 +1141,9 @@ static int unload_module(void)
 	return -1;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "ADSI Resource",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "ADSI Resource",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_APP_DEPEND,
 	       );
diff --git a/res/res_agi.c b/res/res_agi.c
index bd8ad4bfd36f599d3b8e0565080fa31b72b90226..8d5fd812a5786d66b66ecd33d5109f467d0928cd 100644
--- a/res/res_agi.c
+++ b/res/res_agi.c
@@ -3848,7 +3848,8 @@ static int load_module(void)
 	return ast_register_application_xml(app, agi_exec);
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Asterisk Gateway Interface (AGI)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Asterisk Gateway Interface (AGI)",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_APP_DEPEND,
 		);
diff --git a/res/res_calendar.c b/res/res_calendar.c
index 2e3c8e4a1e7ea2e2a3952514199f3880ccdd2271..2de99593352c6d2d62f1963dad211cdd7be524ab 100644
--- a/res/res_calendar.c
+++ b/res/res_calendar.c
@@ -1693,8 +1693,9 @@ static int load_module(void)
 
 	return AST_MODULE_LOAD_SUCCESS;
 }
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Asterisk Calendar integration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Asterisk Calendar integration",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_DEVSTATE_PROVIDER,
 	);
diff --git a/res/res_calendar_caldav.c b/res/res_calendar_caldav.c
index 583b4b1de96c92cac881bd3a0f6f4a7ec1141b7e..664f25b87ee6bd96f155302d14979fc03283ef08 100644
--- a/res/res_calendar_caldav.c
+++ b/res/res_calendar_caldav.c
@@ -690,7 +690,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk CalDAV Calendar Integration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk CalDAV Calendar Integration",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_DEVSTATE_PLUGIN,
 	);
diff --git a/res/res_calendar_ews.c b/res/res_calendar_ews.c
index ea06b7a8da9b6310c708100b8d983c7808b12bcb..931e368547861661cacd6f8a58565ce2516d051f 100644
--- a/res/res_calendar_ews.c
+++ b/res/res_calendar_ews.c
@@ -832,7 +832,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk MS Exchange Web Service Calendar Integration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk MS Exchange Web Service Calendar Integration",
 	.load = load_module,
 	.unload = unload_module,
+	.load_pri = AST_MODPRI_DEVSTATE_PLUGIN,
 );
diff --git a/res/res_calendar_exchange.c b/res/res_calendar_exchange.c
index 59e44c511d37ca63f57c61a26ff44a681669a809..b1707c5e2ad914f21ad9bc51d8f8fdfbc7a25d24 100644
--- a/res/res_calendar_exchange.c
+++ b/res/res_calendar_exchange.c
@@ -753,7 +753,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk MS Exchange Calendar Integration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk MS Exchange Calendar Integration",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_DEVSTATE_PLUGIN,
 	);
diff --git a/res/res_calendar_icalendar.c b/res/res_calendar_icalendar.c
index 34a8b101b3366968838a5925f921a154e817b6d8..2eda352456e1540baa9b64ab73c7a4db2568f882 100644
--- a/res/res_calendar_icalendar.c
+++ b/res/res_calendar_icalendar.c
@@ -481,7 +481,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk iCalendar .ics file integration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk iCalendar .ics file integration",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_DEVSTATE_PLUGIN,
 	);
diff --git a/res/res_config_curl.c b/res/res_config_curl.c
index 95b1589e2f490bb39e4ebf774e074667b30b0891..0ff6694dcb632bb0422a04a134210f0dd673bccd 100644
--- a/res/res_config_curl.c
+++ b/res/res_config_curl.c
@@ -608,6 +608,38 @@ static struct ast_config_engine curl_engine = {
 	.require_func = require_curl,
 };
 
+static int reload_module(void)
+{
+	struct ast_flags flags = { CONFIG_FLAG_NOREALTIME };
+	struct ast_config *cfg;
+	struct ast_variable *var;
+
+	if (!(cfg = ast_config_load("res_curl.conf", flags))) {
+		return 0;
+	} else if (cfg == CONFIG_STATUS_FILEINVALID) {
+		ast_log(LOG_WARNING, "res_curl.conf could not be parsed!\n");
+		return 0;
+	}
+
+	if (!(var = ast_variable_browse(cfg, "globals")) && !(var = ast_variable_browse(cfg, "global")) && !(var = ast_variable_browse(cfg, "general"))) {
+		ast_log(LOG_WARNING, "[globals] not found in res_curl.conf\n");
+		ast_config_destroy(cfg);
+		return 0;
+	}
+
+	for (; var; var = var->next) {
+		if (strncmp(var->name, "CURLOPT(", 8)) {
+			char name[256];
+			snprintf(name, sizeof(name), "CURLOPT(%s)", var->name);
+			pbx_builtin_setvar_helper(NULL, name, var->value);
+		} else {
+			pbx_builtin_setvar_helper(NULL, var->name, var->value);
+		}
+	}
+	ast_config_destroy(cfg);
+	return 0;
+}
+
 static int unload_module(void)
 {
 	ast_config_engine_deregister(&curl_engine);
@@ -624,9 +656,23 @@ static int load_module(void)
 		}
 	}
 
+	if (!ast_module_check("func_curl.so")) {
+		if (ast_load_resource("func_curl.so") != AST_MODULE_LOAD_SUCCESS) {
+			ast_log(LOG_ERROR, "Cannot load func_curl, so res_config_curl cannot be loaded\n");
+			return AST_MODULE_LOAD_DECLINE;
+		}
+	}
+
+	reload_module();
+
 	ast_config_engine_register(&curl_engine);
 	ast_verb(1, "res_config_curl loaded.\n");
 	return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Realtime Curl configuration");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Realtime Curl configuration",
+		.load = load_module,
+		.unload = unload_module,
+		.reload = reload_module,
+		.load_pri = AST_MODPRI_REALTIME_DRIVER,
+	);
diff --git a/res/res_config_ldap.c b/res/res_config_ldap.c
index 8496d801a30679f0672bc636ae18f84beabf5e2c..77ad8422b1f87e577df2c6f14a6006a6e05effd0 100644
--- a/res/res_config_ldap.c
+++ b/res/res_config_ldap.c
@@ -1778,8 +1778,9 @@ static char *realtime_ldap_status(struct ast_cli_entry *e, int cmd, struct ast_c
 	return CLI_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "LDAP realtime interface",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "LDAP realtime interface",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_REALTIME_DRIVER,
 );
diff --git a/res/res_config_odbc.c b/res/res_config_odbc.c
index f06ab25c2de3174bedebb06664870487ba62da60..74987230355b555142a1e84668e757410e122274 100644
--- a/res/res_config_odbc.c
+++ b/res/res_config_odbc.c
@@ -1146,8 +1146,9 @@ static int reload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Realtime ODBC configuration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Realtime ODBC configuration",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload_module,
+		.load_pri = AST_MODPRI_REALTIME_DRIVER,
 		);
diff --git a/res/res_config_pgsql.c b/res/res_config_pgsql.c
index 3bed287e677d7cde61dfe1074678e8f3484898ba..14a98a3b2d26a4693a2c7ee325f7e818719359da 100644
--- a/res/res_config_pgsql.c
+++ b/res/res_config_pgsql.c
@@ -1599,8 +1599,9 @@ static char *handle_cli_realtime_pgsql_status(struct ast_cli_entry *e, int cmd,
 }
 
 /* needs usecount semantics defined */
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "PostgreSQL RealTime Configuration Driver",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "PostgreSQL RealTime Configuration Driver",
 		.load = load_module,
 		.unload = unload_module,
-		.reload = reload
+		.reload = reload,
+		.load_pri = AST_MODPRI_REALTIME_DRIVER,
 	       );
diff --git a/res/res_config_sqlite.c b/res/res_config_sqlite.c
index 2007a81f630e2399a9a0263e1af4b41acc03d5c2..744a07bac728652e7837465bbf79b033397d63b8 100644
--- a/res/res_config_sqlite.c
+++ b/res/res_config_sqlite.c
@@ -1866,7 +1866,8 @@ static int load_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Realtime SQLite configuration",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Realtime SQLite configuration",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_REALTIME_DRIVER,
 );
diff --git a/res/res_crypto.c b/res/res_crypto.c
index 06feefd07b103e24dcc2aa5d133101079659bbef..cb87eeec3c5403d3f827a8c81a7ace9c042b078c 100644
--- a/res/res_crypto.c
+++ b/res/res_crypto.c
@@ -637,8 +637,9 @@ static int unload_module(void)
 }
 
 /* needs usecount semantics defined */
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Cryptographic Digital Signatures",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Cryptographic Digital Signatures",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND, /*!< Since we don't have a config file, we could move up to REALTIME_DEPEND, if necessary */
 	);
diff --git a/res/res_curl.c b/res/res_curl.c
index d2783ca108d790174a8b04cc371c3c4434a4be83..411c06e11bcd11c7bb0c798e2c6bcd3cd460b3ca 100644
--- a/res/res_curl.c
+++ b/res/res_curl.c
@@ -65,9 +65,13 @@ static int load_module(void)
 	if (curl_global_init(CURL_GLOBAL_ALL)) {
 		ast_log(LOG_ERROR, "Unable to initialize the CURL library. Cannot load res_curl\n");
 		return AST_MODULE_LOAD_DECLINE;
-	}	
+	}
 
 	return res;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "cURL Resource Module");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "cURL Resource Module",
+		.load = load_module,
+		.unload = unload_module,
+		.load_pri = AST_MODPRI_REALTIME_DEPEND,
+	);
diff --git a/res/res_fax.c b/res/res_fax.c
index 159eec7cdd4f5f6e2f82174491dfb14ed3eb942a..8695414eafb7605f32c4e2d90e4515a081941c09 100644
--- a/res/res_fax.c
+++ b/res/res_fax.c
@@ -2478,7 +2478,8 @@ static int load_module(void)
 }
 
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Generic FAX Applications",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Generic FAX Applications",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_APP_DEPEND,
 	       );
diff --git a/res/res_jabber.c b/res/res_jabber.c
index ecded133258ff2a0349bc90663018703ac984ced..5238441f1b174909900f9cc213ba0bf11587590c 100644
--- a/res/res_jabber.c
+++ b/res/res_jabber.c
@@ -4729,8 +4729,9 @@ static int reload(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "AJI - Asterisk Jabber Interface",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "AJI - Asterisk Jabber Interface",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 	       );
diff --git a/res/res_monitor.c b/res/res_monitor.c
index febdab4a61ab471d40a15b520225ba154d865a4d..d508da13a6af17c917a77629a07eaa5bcde9d54e 100644
--- a/res/res_monitor.c
+++ b/res/res_monitor.c
@@ -930,7 +930,8 @@ static int unload_module(void)
 }
 
 /* usecount semantics need to be defined */
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Call Monitoring Resource",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Call Monitoring Resource",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 		);
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index 5650ddc4db5621273ed78be131325b0bd4521b2b..2361b2280ad540168bb19c4d4a893d9f1231311f 100644
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -1905,8 +1905,9 @@ static int unload_module(void)
 	return res;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Music On Hold Resource",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Music On Hold Resource",
 	.load = load_module,
 	.unload = unload_module,
 	.reload = reload,
+	.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 );
diff --git a/res/res_odbc.c b/res/res_odbc.c
index ed7aa986d08b5c853130b3aac9876a66d6951d63..ec1591c008d3c693e183588d0933f17f6ec211a6 100644
--- a/res/res_odbc.c
+++ b/res/res_odbc.c
@@ -1784,8 +1784,9 @@ static int load_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "ODBC resource",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "ODBC resource",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_REALTIME_DEPEND,
 	       );
diff --git a/res/res_rtp_asterisk.c b/res/res_rtp_asterisk.c
index 28f75c8b10eafedceb32f76daf49cfdeb1887168..09c5e6ba44fe3da5c1c5083f5fa0d74c635df25f 100644
--- a/res/res_rtp_asterisk.c
+++ b/res/res_rtp_asterisk.c
@@ -2775,8 +2775,9 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_DEFAULT, "Asterisk RTP Stack",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Asterisk RTP Stack",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload_module,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 		);
diff --git a/res/res_rtp_multicast.c b/res/res_rtp_multicast.c
index 19d21bcfbc9606ac6738d3c7e0e4aa6ea2aa47cc..56a8cd23cb32bb8bbf8277b83539bb0d05ad8d07 100644
--- a/res/res_rtp_multicast.c
+++ b/res/res_rtp_multicast.c
@@ -268,4 +268,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO_STANDARD(ASTERISK_GPL_KEY, "Multicast RTP Engine");
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Multicast RTP Engine",
+	.load = load_module,
+	.unload = unload_module,
+	.load_pri = AST_MODPRI_CHANNEL_DEPEND,
+);
diff --git a/res/res_smdi.c b/res/res_smdi.c
index fe99cc9ea78ff9771380d522383bbc81dc7c8f25..19b049f17f68145d0e00c5fdf0ea6571e92df798 100644
--- a/res/res_smdi.c
+++ b/res/res_smdi.c
@@ -1471,8 +1471,9 @@ static int reload(void)
 		return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Simplified Message Desk Interface (SMDI) Resource",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Simplified Message Desk Interface (SMDI) Resource",
 		.load = load_module,
 		.unload = unload_module,
 		.reload = reload,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 	       );
diff --git a/res/res_speech.c b/res/res_speech.c
index 3f5f96048db0848b04cb13d729643462d9c7c4d5..46a846f0399c2edf2b22d7a1458fbf19ca93c60b 100644
--- a/res/res_speech.c
+++ b/res/res_speech.c
@@ -339,7 +339,8 @@ static int load_module(void)
 	return AST_MODULE_LOAD_SUCCESS;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Generic Speech Recognition API",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Generic Speech Recognition API",
 		.load = load_module,
 		.unload = unload_module,
+		.load_pri = AST_MODPRI_APP_DEPEND,
 		);
diff --git a/res/res_srtp.c b/res/res_srtp.c
index 8b753ff87875528c7d3f07b855f435a0e0afb299..546f0733d7657da73fd7c6ad53f71b1a405a57c2 100644
--- a/res/res_srtp.c
+++ b/res/res_srtp.c
@@ -397,7 +397,8 @@ static int unload_module(void)
 	return 0;
 }
 
-AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS, "Secure RTP (SRTP)",
+AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_GLOBAL_SYMBOLS | AST_MODFLAG_LOAD_ORDER, "Secure RTP (SRTP)",
 	.load = load_module,
 	.unload = unload_module,
+	.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 );
diff --git a/res/res_timing_dahdi.c b/res/res_timing_dahdi.c
index f8235db63d1b1b1ef117ca22685930cd2fb90ff2..8a2382834c81691b3c458f27398181bccd07f5cb 100644
--- a/res/res_timing_dahdi.c
+++ b/res/res_timing_dahdi.c
@@ -202,5 +202,5 @@ static int unload_module(void)
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "DAHDI Timing Interface",
 		.load = load_module,
 		.unload = unload_module,
-		.load_pri = 10,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 		);
diff --git a/res/res_timing_kqueue.c b/res/res_timing_kqueue.c
index 757fc528bffda81103ddf3bc4d93ee33e94066ad..1fef5fb993d336d67519074dd1862111efec0df5 100644
--- a/res/res_timing_kqueue.c
+++ b/res/res_timing_kqueue.c
@@ -390,5 +390,5 @@ static int unload_module(void)
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "KQueue Timing Interface",
 		.load = load_module,
 		.unload = unload_module,
-		.load_pri = 10,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 		);
diff --git a/res/res_timing_pthread.c b/res/res_timing_pthread.c
index 53ceeb5de7af9bc35f55df9e82e7d600a68069b7..d63b39d1fc6f98a4f037c5f40f3b303dc3d068aa 100644
--- a/res/res_timing_pthread.c
+++ b/res/res_timing_pthread.c
@@ -524,5 +524,5 @@ static int unload_module(void)
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "pthread Timing Interface",
 		.load = load_module,
 		.unload = unload_module,
-		.load_pri = 10,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 		);
diff --git a/res/res_timing_timerfd.c b/res/res_timing_timerfd.c
index 12bb493dc134734e7b89e75a1af9ec4bddcdc087..bffa007de2b61fda6af92e94d6028a08d24365e0 100644
--- a/res/res_timing_timerfd.c
+++ b/res/res_timing_timerfd.c
@@ -299,5 +299,5 @@ static int unload_module(void)
 AST_MODULE_INFO(ASTERISK_GPL_KEY, AST_MODFLAG_LOAD_ORDER, "Timerfd Timing Interface",
 		.load = load_module,
 		.unload = unload_module,
-		.load_pri = 10,
+		.load_pri = AST_MODPRI_CHANNEL_DEPEND,
 		);