diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 291d6f7d94de66ca720ea4c35a641933bf7781b6..92c2421e1c80dbc3d885f58b82424664577ea384 100644
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -5128,9 +5128,11 @@ static int forward_message(struct ast_channel *chan, char *context, struct vm_st
 	int valid_extensions = 0;
 	char *dir;
 	int curmsg;
-	char *urgent_str = urgent ? "Urgent" : "";
+	char urgent_str[7] = "";
 	char tmptxtfile[PATH_MAX];
 
+	ast_copy_string(urgent_str, urgent ? "Urgent" : "", sizeof(urgent_str));
+
 	if (vms == NULL) return -1;
 	dir = vms->curdir;
 	curmsg = vms->curmsg;
@@ -10559,15 +10561,17 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
 		case '4':
 			if (outsidecaller) {  /* only mark vm messages */
 				/* Mark Urgent */
-				if (!ast_strlen_zero(flag) && strcmp(flag, "Urgent")) {
+				if ((flag && ast_strlen_zero(flag)) || (!ast_strlen_zero(flag) && strcmp(flag, "Urgent"))) {
 					ast_verbose(VERBOSE_PREFIX_3 "marking message as Urgent\n");
 					ast_debug(1000, "This message is too urgent!\n");
 					res = ast_play_and_wait(chan, "vm-marked-urgent");
 					strcpy(flag, "Urgent");
-				} else {
+				} else if (flag) {
 					ast_verbose(VERBOSE_PREFIX_3 "UNmarking message as Urgent\n");
 					res = ast_play_and_wait(chan, "vm-urgent-removed");
 					strcpy(flag, "");
+				} else {
+					ast_play_and_wait(chan, "vm-sorry");
 				}
 				cmd = 0;
 			} else {
@@ -10610,8 +10614,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
 					ast_play_and_wait(chan, "vm-msgsaved");
 					cmd = '0';
 				} else if (cmd == '4') {
-					ast_play_and_wait(chan, "vm-marked-urgent");
-					strcpy(flag, "Urgent");
+					if (flag) {
+						ast_play_and_wait(chan, "vm-marked-urgent");
+						strcpy(flag, "Urgent");
+					}
 					ast_play_and_wait(chan, "vm-msgsaved");
 					cmd = '0';
 				} else {
@@ -10630,10 +10636,10 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
 			if (message_exists) {
 				cmd = ast_play_and_wait(chan, "vm-review");
 				if (!cmd && outsidecaller) {
-					if (!ast_strlen_zero(flag) && strcmp(flag, "Urgent")) {
+					if ((flag && ast_strlen_zero(flag)) || (!ast_strlen_zero(flag) && strcmp(flag, "Urgent"))) {
 						cmd = ast_play_and_wait(chan, "vm-review-urgent");
-					} else {
-						cmd = ast_play_and_wait(chan, "vm-review-unurgent");
+					} else if (flag) {
+						cmd = ast_play_and_wait(chan, "vm-review-nonurgent");
 					}
 				}
 			} else {