diff --git a/UPGRADE.txt b/UPGRADE.txt
index 3956438dcde52db16d51539dbc553a682ff00b34..df4216f695f53a3985bc3b4698937748b3f12ab4 100644
--- a/UPGRADE.txt
+++ b/UPGRADE.txt
@@ -20,8 +20,14 @@
 ===
 ===========================================================
 
-From 11.2.0 to 11.2.1:
+From 11.3 to 11.4:
+* Added the 'n' option to MeetMe to prevent application of the DENOISE function
+  to a channel joining a conference. Some channel drivers that vary the number
+  of audio samples in a voice frame will experience significant quality problems
+  if a denoiser is attached to the channel; this option gives them the ability
+  to remove the denoiser without having to unload func_speex.
 
+From 11.2.0 to 11.2.1:
 * Asterisk would previously not output certain error messages when a remote
   console attempted to connect to Asterisk and no instance of Asterisk was
   running. This error message is displayed on stderr; as a result, some
diff --git a/apps/app_meetme.c b/apps/app_meetme.c
index cf849b4ad0573bc34d37c9f8a70ce3cecf8e06ee..1cdf1d709c3028d194ef486a884e818947f904c0 100644
--- a/apps/app_meetme.c
+++ b/apps/app_meetme.c
@@ -139,6 +139,14 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 						channel's currently set music class, or <literal>default</literal>.</para>
 						<argument name="class" required="true" />
 					</option>
+					<option name="n">
+						<para>Disable the denoiser. By default, if <literal>func_speex</literal> is loaded, Asterisk
+						will apply a denoiser to channels in the MeetMe conference. However, channel
+						drivers that present audio with a varying rate will experience degraded
+						performance with a denoiser attached. This parameter allows a channel joining
+						the conference to choose not to have a denoiser attached without having to
+						unload <literal>func_speex</literal>.</para>
+					</option>
 					<option name="o">
 						<para>Set talker optimization - treats talkers who aren't speaking as
 						being muted, meaning (a) No encode is done on transmission and (b)
@@ -648,6 +656,8 @@ enum {
 #define CONFFLAG_INTROUSER_VMREC    (1ULL << 33)
 /*! If there's only one person left in a conference when someone leaves, kill the conference */
 #define CONFFLAG_KILL_LAST_MAN_STANDING ((uint64_t)1 << 34)
+/*! If set, don't enable a denoiser for the channel */
+#define CONFFLAG_DONT_DENOISE       (1ULL << 33)
 
 enum {
 	OPT_ARG_WAITMARKED = 0,
@@ -678,6 +688,7 @@ AST_APP_OPTIONS(meetme_opts, BEGIN_OPTIONS
 	AST_APP_OPTION('k', CONFFLAG_KILL_LAST_MAN_STANDING ),
 	AST_APP_OPTION_ARG('M', CONFFLAG_MOH, OPT_ARG_MOH_CLASS ),
 	AST_APP_OPTION('m', CONFFLAG_STARTMUTED ),
+	AST_APP_OPTION('n', CONFFLAG_DONT_DENOISE ),
 	AST_APP_OPTION('o', CONFFLAG_OPTIMIZETALKER ),
 	AST_APP_OPTION('P', CONFFLAG_ALWAYSPROMPT ),
 	AST_APP_OPTION_ARG('p', CONFFLAG_KEYEXIT, OPT_ARG_EXITKEYS ),
@@ -3208,7 +3219,8 @@ static int conf_run(struct ast_channel *chan, struct ast_conference *conf, struc
 	}
 
 	/* Reduce background noise from each participant */
-	if ((mod_speex = ast_module_helper("", "codec_speex", 0, 0, 0, 0))) {
+	if (!ast_test_flag64(confflags, CONFFLAG_DONT_DENOISE) &&
+		(mod_speex = ast_module_helper("", "func_speex", 0, 0, 0, 0))) {
 		ast_free(mod_speex);
 		ast_func_write(chan, "DENOISE(rx)", "on");
 	}