diff --git a/formats/format_g723.c b/formats/format_g723.c
index c54a640b3c24fb375792f25d1d98f30106c738d9..195815a46cc406b72cecabf8687631907e13cc28 100755
--- a/formats/format_g723.c
+++ b/formats/format_g723.c
@@ -325,7 +325,7 @@ int unload_module()
 	tmp = glist;
 	while(tmp) {
 		if (tmp->owner)
-			ast_softhangup(tmp->owner);
+			ast_softhangup(tmp->owner, AST_SOFTHANGUP_APPUNLOAD);
 		tmpl = tmp;
 		tmp = tmp->next;
 		free(tmpl);
diff --git a/formats/format_gsm.c b/formats/format_gsm.c
index 1ac9869341c7d0f66fb65dcd0a477bf25a791c67..1ac981f7f47973212ca749adae373b803194d984 100755
--- a/formats/format_gsm.c
+++ b/formats/format_gsm.c
@@ -271,7 +271,7 @@ int unload_module()
 	tmp = glist;
 	while(tmp) {
 		if (tmp->owner)
-			ast_softhangup(tmp->owner);
+			ast_softhangup(tmp->owner, AST_SOFTHANGUP_APPUNLOAD);
 		tmpl = tmp;
 		tmp = tmp->next;
 		free(tmpl);
diff --git a/formats/format_mp3.c b/formats/format_mp3.c
index e1ee086519f3a8bff4886fbe175988ab3f1ec9bc..5c730f098cd74fc11d80ed23cbc41939e3420eda 100755
--- a/formats/format_mp3.c
+++ b/formats/format_mp3.c
@@ -269,7 +269,7 @@ int unload_module()
 	tmp = glist;
 	while(tmp) {
 		if (tmp->owner)
-			ast_softhangup(tmp->owner);
+			ast_softhangup(tmp->owner, AST_SOFTHANGUP_APPUNLOAD);
 		tmpl = tmp;
 		tmp = tmp->next;
 		free(tmpl);
diff --git a/formats/format_pcm.c b/formats/format_pcm.c
index befa05698a85ee2af619842a07da16b18e77c235..8576f69957e1cd8f1cc900cd481c76350f61f068 100755
--- a/formats/format_pcm.c
+++ b/formats/format_pcm.c
@@ -266,7 +266,7 @@ int unload_module()
 	tmp = glist;
 	while(tmp) {
 		if (tmp->owner)
-			ast_softhangup(tmp->owner);
+			ast_softhangup(tmp->owner, AST_SOFTHANGUP_APPUNLOAD);
 		tmpl = tmp;
 		tmp = tmp->next;
 		free(tmpl);
diff --git a/formats/format_vox.c b/formats/format_vox.c
index 67934219a308bcac559ae53bf2713e0cf71e7a0f..94957e7d721fe3193ed16ff59af89cdcf2789494 100755
--- a/formats/format_vox.c
+++ b/formats/format_vox.c
@@ -390,7 +390,7 @@ int unload_module()
 	tmp = glist;
 	while(tmp) {
 		if (tmp->owner)
-			ast_softhangup(tmp->owner);
+			ast_softhangup(tmp->owner, AST_SOFTHANGUP_APPUNLOAD);
 		tmpl = tmp;
 		tmp = tmp->next;
 		free(tmpl);
diff --git a/formats/format_wav_gsm.c b/formats/format_wav_gsm.c
index b1a8020d93b0ec603eb7995d79df1ce4f6d30e65..d7f718f6d735ceaa45621e48992bb834fb0c99e6 100755
--- a/formats/format_wav_gsm.c
+++ b/formats/format_wav_gsm.c
@@ -563,7 +563,7 @@ int unload_module()
 	tmp = glist;
 	while(tmp) {
 		if (tmp->owner)
-			ast_softhangup(tmp->owner);
+			ast_softhangup(tmp->owner, AST_SOFTHANGUP_APPUNLOAD);
 		tmpl = tmp;
 		tmp = tmp->next;
 		free(tmpl);
diff --git a/include/asterisk/module.h b/include/asterisk/module.h
index b270c111cd439c4392e23ac28eab26acfe0eb79f..93d059d95ba80dabeae66a665c108c8da8c41441 100755
--- a/include/asterisk/module.h
+++ b/include/asterisk/module.h
@@ -194,7 +194,7 @@ void ast_module_reload(void);
 	pthread_mutex_lock(&localuser_lock); \
 	u = localusers; \
 	while(u) { \
-		ast_softhangup(u->chan); \
+		ast_softhangup(u->chan, AST_SOFTHANGUP_APPUNLOAD); \
 		ul = u; \
 		u = u->next; \
 		free(ul); \
diff --git a/loader.c b/loader.c
index 03b6b018b08708ff4ec8720fab34e20dded51ce9..6835fd8d0ad09ceb61f71390f63f6e149db15b58 100755
--- a/loader.c
+++ b/loader.c
@@ -22,6 +22,7 @@
 #include <asterisk/logger.h>
 #include <asterisk/channel.h>
 #include <asterisk/term.h>
+#include <asterisk/manager.h>
 #include <dlfcn.h>
 #include <asterisk/md5.h>
 #define __USE_GNU
@@ -137,8 +138,8 @@ void ast_module_reload(void)
 {
 	struct module *m;
 
-	/* We'll do the logger the favor of calling its reload here first */
-	
+	/* We'll do the logger and manager the favor of calling its reload here first */
+	reload_manager();
 
 	ast_pthread_mutex_lock(&modlock);
 	m = module_list;
diff --git a/res/res_musiconhold.c b/res/res_musiconhold.c
index c696bd55a5b9fdde7e84b878762182be9415705e..2630ba7c2205b61b6ed73dd30885a92aaf6da443 100755
--- a/res/res_musiconhold.c
+++ b/res/res_musiconhold.c
@@ -100,8 +100,9 @@ static pthread_mutex_t moh_lock = AST_MUTEX_INITIALIZER;
 static void child_handler(int sig)
 {
 	int status;
-	if (wait4(-1,&status, WNOHANG, NULL)<1)		
-		ast_log(LOG_NOTICE, "Huh?  Child handler, but nobody there?\n");
+	if (wait4(-1,&status, WNOHANG, NULL)<1)	
+		if (option_debug)	
+			ast_log(LOG_DEBUG, "Huh?  Child handler, but nobody there?\n");
 }
 
 static int spawn_mp3(struct mohclass *class)
@@ -126,7 +127,9 @@ static int spawn_mp3(struct mohclass *class)
 	argv[3] = "--mono";
 	argv[4] = "-r";
 	argv[5] = "8000";
-	argc = 6;
+	argv[6] = "-b";
+	argv[7] = "2048";
+	argc = 8;
 	if (class->quiet) {
 		argv[argc++] = "-f";
 		argv[argc++] = "8192";