diff --git a/apps/app_followme.c b/apps/app_followme.c
index 333494fa0195595586fc0e53548964c9096cf811..f2f29f86b39d526c17e2983e6e800508c857b8b6 100644
--- a/apps/app_followme.c
+++ b/apps/app_followme.c
@@ -169,7 +169,7 @@ struct fm_args {
 	unsigned int pending_out_connected_update:1;
 	int status;
 	char context[AST_MAX_CONTEXT];
-	char namerecloc[AST_MAX_CONTEXT];
+	char namerecloc[PATH_MAX];
 	char takecall[MAX_YN_STRING];	/*!< Digit mapping to take a call */
 	char nextindp[MAX_YN_STRING];	/*!< Digit mapping to decline a call */
 	char callfromprompt[PATH_MAX];	/*!< Sound prompt name and path */
@@ -1151,7 +1151,6 @@ static int app_exec(struct ast_channel *chan, const char *data)
 	struct number *nm, *newnm;
 	int res = 0;
 	char *argstr;
-	char namerecloc[255];
 	struct ast_channel *caller;
 	struct ast_channel *outbound;
 	AST_DECLARE_APP_ARGS(args,
@@ -1223,7 +1222,6 @@ static int app_exec(struct ast_channel *chan, const char *data)
 		ast_clear_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER);
 	}
 
-	namerecloc[0] = '\0';
 	if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER)) {
 		ast_indicate(chan, AST_CONTROL_RINGING);
 	} else {
@@ -1238,14 +1236,14 @@ static int app_exec(struct ast_channel *chan, const char *data)
 		if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_RECORDNAME)) {
 			int duration = 5;
 
-			snprintf(namerecloc, sizeof(namerecloc), "%s/followme.%s",
+			snprintf(targs.namerecloc, sizeof(targs.namerecloc), "%s/followme.%s",
 				ast_config_AST_SPOOL_DIR, ast_channel_uniqueid(chan));
-			if (ast_play_and_record(chan, "vm-rec-name", namerecloc, 5, "sln", &duration,
+			if (ast_play_and_record(chan, "vm-rec-name", targs.namerecloc, 5, "sln", &duration,
 				NULL, ast_dsp_get_threshold_from_settings(THRESHOLD_SILENCE), 0, NULL) < 0) {
 				goto outrun;
 			}
-			if (!ast_fileexists(namerecloc, NULL, ast_channel_language(chan))) {
-				namerecloc[0] = '\0';
+			if (!ast_fileexists(targs.namerecloc, NULL, ast_channel_language(chan))) {
+				targs.namerecloc[0] = '\0';
 			}
 		}
 
@@ -1260,19 +1258,11 @@ static int app_exec(struct ast_channel *chan, const char *data)
 
 	targs.status = 0;
 	targs.chan = chan;
-	ast_copy_string(targs.namerecloc, namerecloc, sizeof(targs.namerecloc));
 	ast_channel_lock(chan);
 	ast_connected_line_copy_from_caller(&targs.connected_in, ast_channel_caller(chan));
 	ast_channel_unlock(chan);
 
 	findmeexec(&targs);
-
-	while ((nm = AST_LIST_REMOVE_HEAD(&targs.cnumbers, entry)))
-		ast_free(nm);
-
-	if (!ast_strlen_zero(namerecloc))
-		unlink(namerecloc);
-
 	if (targs.status != 100) {
 		if (ast_test_flag(&targs.followmeflags, FOLLOWMEFLAG_NOANSWER)) {
 			if (ast_channel_state(chan) != AST_STATE_UP) {
@@ -1337,8 +1327,15 @@ static int app_exec(struct ast_channel *chan, const char *data)
 	}
 
 outrun:
+	while ((nm = AST_LIST_REMOVE_HEAD(&targs.cnumbers, entry))) {
+		ast_free(nm);
+	}
+	if (!ast_strlen_zero(targs.namerecloc)) {
+		unlink(targs.namerecloc);
+	}
 	ast_party_connected_line_free(&targs.connected_in);
 	ast_party_connected_line_free(&targs.connected_out);
+
 	if (f->realtime) {
 		/* Not in list */
 		free_numbers(f);