diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index d218d0f2eeb927f407840900cbcdd336230ad8eb..73dff86348c04eef51a9223b22ab9c356f038858 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -2386,21 +2386,12 @@ static int confbridge_exec(struct ast_channel *chan, const char *data)
 		user.tech_args.drop_silence = 1;
 	}
 
-	if (ast_test_flag(&user.u_profile, USER_OPT_JITTERBUFFER)) {
-		char *func_jb;
-		if ((func_jb = ast_module_helper("", "func_jitterbuffer", 0, 0, 0, 0))) {
-			ast_free(func_jb);
-			ast_func_write(chan, "JITTERBUFFER(adaptive)", "default");
-		}
+	if (ast_test_flag(&user.u_profile, USER_OPT_JITTERBUFFER) && ast_module_check("func_jitterbuffer.so")) {
+		ast_func_write(chan, "JITTERBUFFER(adaptive)", "default");
 	}
 
-	if (ast_test_flag(&user.u_profile, USER_OPT_DENOISE)) {
-		char *mod_speex;
-		/* Reduce background noise from each participant */
-		if ((mod_speex = ast_module_helper("", "codec_speex", 0, 0, 0, 0))) {
-			ast_free(mod_speex);
-			ast_func_write(chan, "DENOISE(rx)", "on");
-		}
+	if (ast_test_flag(&user.u_profile, USER_OPT_DENOISE) && ast_module_check("codec_speex.so")) {
+		ast_func_write(chan, "DENOISE(rx)", "on");
 	}
 
 	/* if this user has a intro, play it before entering */
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index 7ca9ba39f059e8f5418bbb24f5c9a870cba60bfb..5567fe0366bdf1e2d0723a8b7ff33dddfbc2d8ab 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -3198,7 +3198,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
 	struct timeval now;
 	struct ast_dsp *dsp = NULL;
 	struct ast_app *agi_app;
-	char *agifile, *mod_speex;
+	char *agifile;
 	const char *agifiledefault = "conf-background.agi", *tmpvar;
 	char meetmesecs[30] = "";
 	char exitcontext[AST_MAX_CONTEXT] = "";
@@ -3588,9 +3588,7 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
 	}
 
 	/* Reduce background noise from each participant */
-	if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) &&
-		(mod_speex = ast_module_helper("", "func_speex", 0, 0, 0, 0))) {
-		ast_free(mod_speex);
+	if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) && ast_module_check("func_speex.so")) {
 		ast_func_write(chan, "DENOISE(rx)", "on");
 	}
 
diff --git a/main/loader.c b/main/loader.c
index d5500076b4e66f0e7f040fdb13b0bb7d6da07a29..8250f1ffb21a6b739187f9ccceb6a19aa022b324 100644
--- a/main/loader.c
+++ b/main/loader.c
@@ -708,8 +708,9 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
 	int i, which=0, l = strlen(word);
 	char *ret = NULL;
 
-	if (pos != rpos)
+	if (pos != rpos) {
 		return NULL;
+	}
 
 	AST_DLLIST_LOCK(&module_list);
 	AST_DLLIST_TRAVERSE(&module_list, cur, entry) {
@@ -722,10 +723,11 @@ char *ast_module_helper(const char *line, const char *word, int pos, int state,
 	}
 	AST_DLLIST_UNLOCK(&module_list);
 
-	if (!ret) {
+	if (!ret && needsreload) {
 		for (i=0; !ret && reload_classes[i].name; i++) {
-			if (!strncasecmp(word, reload_classes[i].name, l) && ++which > state)
+			if (!strncasecmp(word, reload_classes[i].name, l) && ++which > state) {
 				ret = ast_strdup(reload_classes[i].name);
+			}
 		}
 	}