diff --git a/apps/app_followme.c b/apps/app_followme.c
index a71a683d336a876df360e46aa77169d66f475b41..95b1ceafbed5af0049a8d3dc5348e67db9350f46 100644
--- a/apps/app_followme.c
+++ b/apps/app_followme.c
@@ -78,6 +78,11 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 						<para>Playback the unreachable status message if we've run out
 						of steps to reach the or the callee has elected not to be reachable.</para>
 					</option>
+					<option name="N">
+						<para>Don't answer the incoming call until we're ready to
+						connect the caller or give up. This will disable all the other
+						options while implicitly turning on the 'd' option.</para>
+					</option>
 					<option name="d">
 						<para>Disable the 'Please hold while we try to connect your call' announcement.</para>
 					</option>
@@ -162,7 +167,8 @@ enum {
 	FOLLOWMEFLAG_STATUSMSG = (1 << 0),
 	FOLLOWMEFLAG_RECORDNAME = (1 << 1),
 	FOLLOWMEFLAG_UNREACHABLEMSG = (1 << 2),
-	FOLLOWMEFLAG_DISABLEHOLDPROMPT = (1 << 3)
+	FOLLOWMEFLAG_DISABLEHOLDPROMPT = (1 << 3),
+	FOLLOWMEFLAG_NOANSWER = (1 << 4)
 };
 
 AST_APP_OPTIONS(followme_opts, {
@@ -170,6 +176,7 @@ AST_APP_OPTIONS(followme_opts, {
 	AST_APP_OPTION('a', FOLLOWMEFLAG_RECORDNAME ),
 	AST_APP_OPTION('n', FOLLOWMEFLAG_UNREACHABLEMSG ),
 	AST_APP_OPTION('d', FOLLOWMEFLAG_DISABLEHOLDPROMPT ),
+	AST_APP_OPTION('N', FOLLOWMEFLAG_NOANSWER ),
 });
 
 static int ynlongest = 0;
@@ -1091,30 +1098,36 @@ static int app_exec(struct ast_channel *chan, const char *data)
 	}
 	ast_mutex_unlock(&f->lock);
 
-	/* Answer the call */
-	if (chan->_state != AST_STATE_UP) {
-		ast_answer(chan);
-	}
-
-	if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_STATUSMSG)) 
-		ast_stream_and_wait(chan, targs.statusprompt, "");
-
 	snprintf(namerecloc,sizeof(namerecloc),"%s/followme.%s",ast_config_AST_SPOOL_DIR,chan->uniqueid);
 	duration = 5;
 
-	if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_RECORDNAME)) 
-		if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL) < 0)
-			goto outrun;
-
 	if (!ast_fileexists(namerecloc, NULL, chan->language))
 		ast_copy_string(namerecloc, "", sizeof(namerecloc));
-	if (!ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_DISABLEHOLDPROMPT)) {
-		if (ast_streamfile(chan, targs.plsholdprompt, chan->language))
-			goto outrun;
-		if (ast_waitstream(chan, "") < 0)
-			goto outrun;
+
+	if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER)) {
+		if (chan->_state != AST_STATE_UP) {
+			ast_indicate(chan, AST_CONTROL_RINGING);
+		}
+	} else {
+		/* Answer the call */
+		if (chan->_state != AST_STATE_UP)
+			ast_answer(chan);
+
+		if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_STATUSMSG)) 
+			ast_stream_and_wait(chan, targs.statusprompt, "");
+
+		if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_RECORDNAME)) 
+			if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL) < 0)
+				goto outrun;
+
+		if (!ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_DISABLEHOLDPROMPT)) {
+			if (ast_streamfile(chan, targs.plsholdprompt, chan->language))
+				goto outrun;
+			if (ast_waitstream(chan, "") < 0)
+				goto outrun;
+		}
+		ast_moh_start(chan, S_OR(targs.mohclass, NULL), NULL);
 	}
-	ast_moh_start(chan, S_OR(targs.mohclass, NULL), NULL);
 
 	targs.status = 0;
 	targs.chan = chan;
@@ -1128,8 +1141,15 @@ static int app_exec(struct ast_channel *chan, const char *data)
 	if (!ast_strlen_zero(namerecloc))
 		unlink(namerecloc);
 
-	if (targs.status != 100) {
+	if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER)) {
+		if (chan->_state != AST_STATE_UP) {
+			ast_answer(chan);
+		}
+	} else {
 		ast_moh_stop(chan);
+	}
+
+	if (targs.status != 100) {
 		if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_UNREACHABLEMSG)) 
 			ast_stream_and_wait(chan, targs.sorryprompt, "");
 		res = 0;
@@ -1146,7 +1166,6 @@ static int app_exec(struct ast_channel *chan, const char *data)
 		config.end_bridge_callback_data = chan;
 		config.end_bridge_callback_data_fixup = end_bridge_callback_data_fixup;
 
-		ast_moh_stop(caller);
 		/* Be sure no generators are left on it */
 		ast_deactivate_generator(caller);
 		/* Make sure channels are compatible */