diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 26f0c77bcfea5931c57882de54bf98c7513bec44..14e11fdc439dd966cc63b3102ecf8a4c607c8f12 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -5981,7 +5981,7 @@ static int leave_voicemail(struct ast_channel *chan, char *ext, struct leave_vm_
 		}
 		if (res == '0') {
 			goto transfer;
-		} else if (res > 0)
+		} else if (res > 0 && res != 't')
 			res = 0;
 
 		if (duration < vmu->minsecs)
@@ -10407,6 +10407,11 @@ static int vm_exec(struct ast_channel *chan, const char *data)
 	}
 
 	res = leave_voicemail(chan, args.argv0, &leave_options);
+	if (res == 't') {
+		ast_play_and_wait(chan, "vm-goodbye");
+		res = 0;
+	}
+
 	if (res == OPERATOR_EXIT) {
 		res = 0;
 	}
@@ -13189,10 +13194,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
 		/* Hang up or timeout, so delete the recording. */
 		ast_filedelete(tempfile, NULL);
 	}
-	if (cmd == 't')
-		cmd = 0;
-	else if (outsidecaller) /* won't play if time out occurs */
+
+	if (cmd != 't' && outsidecaller)
 		ast_play_and_wait(chan, "vm-goodbye");
+
 	return cmd;
 }