diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index d0717651e811b827f090c10e88e56047ecb31f17..22fedbf0488e4043a681194244502dc753b968fc 100755
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -263,6 +263,7 @@ static int reviewvm;
 static int calloper;
 static int saycidinfo;
 static int hearenv;
+static int skipaftercmd;
 static char dialcontext[80];
 static char callcontext[80];
 static char exitcontext[80];
@@ -3771,7 +3772,16 @@ static int vm_execmain(struct ast_channel *chan, void *data)
 					cmd = play_and_wait(chan, "vm-deleted");
 				else
 					cmd = play_and_wait(chan, "vm-undeleted");
+				if (skipaftercmd) {
+					if (vms.curmsg < vms.lastmsg) {
+                                	        vms.curmsg++;
+                                	        cmd = play_message(chan, vmu, &vms);
+                                	} else {
+                                        	cmd = play_and_wait(chan, "vm-nomore");
+                                	}
+                                }
 				break;
+	
 			case '8':
 				if(vms.lastmsg > -1)
 					cmd = forward_message(chan, context, vms.curdir, vms.curmsg, vmu, vmfmts);
@@ -3815,7 +3825,16 @@ static int vm_execmain(struct ast_channel *chan, void *data)
 					if (!cmd)
 						cmd = play_and_wait(chan, "vm-messages");
 				}
-				break;
+				if (skipaftercmd) {
+					if (vms.curmsg < vms.lastmsg) {
+                                       		 vms.curmsg++;
+                                       	 	cmd = play_message(chan, vmu, &vms);
+                                	} else {
+                                        	cmd = play_and_wait(chan, "vm-nomore");
+                                	}
+				}
+                                break;
+
 			case '*':
 				if (!vms.starting) {
 					cmd = play_and_wait(chan, "vm-onefor");
@@ -4131,6 +4150,7 @@ static int load_config(void)
 	char *astsaycid;
 	char *astcallop;
 	char *astreview;
+	char *astskipcmd;
 	char *asthearenv;
 	char *silencestr;
 	char *thresholdstr;
@@ -4291,7 +4311,14 @@ static int load_config(void)
 			asthearenv = "yes";
 		}
 		hearenv = ast_true(asthearenv);	
-		
+
+		skipaftercmd = 0;
+		if (!(astskipcmd = ast_variable_retrieve(cfg, "general", "nextaftercmd"))) {
+			ast_log(LOG_DEBUG,"We are not going to skip to the next msg after save/delete\n");
+			astskipcmd = "no";
+		}
+		skipaftercmd = ast_true(astskipcmd);
+
 		if ((dialoutcxt = ast_variable_retrieve(cfg, "general", "dialout"))) {
                         strncpy(dialcontext, dialoutcxt, sizeof(dialcontext) - 1);
                         ast_log(LOG_DEBUG, "found dialout context: %s\n", dialcontext);
diff --git a/configs/voicemail.conf.sample b/configs/voicemail.conf.sample
index b39f32ffb5e3f76b6bd54bdf18a9a5bc1085b086..5d6ba450f00805555381b7d40bf36454f62ed111 100755
--- a/configs/voicemail.conf.sample
+++ b/configs/voicemail.conf.sample
@@ -104,6 +104,8 @@ maxlogins=3
 			;     This does NOT affect option 3,3 from the advanced options menu
 ; delete=yes		; After notification, the voicemail is deleted from the server. [per-mailbox only]
 			;     This is intended for use with users who wish to receive their voicemail ONLY by email.
+; nextaftercmd=yes	; Skips to the next message after hitting 7 or 9 to delete/save current message.
+			;     [global option only at this time] 
 			
 [zonemessages]
 eastern=America/New_York|'vm-received' Q 'digits/at' IMp