diff --git a/app.c b/app.c
index 0b277b5ceb41e697017d4f41a9721cd7d86406ea..5e57a86fbd01589dbc4d056d5c2faf0ad36e0af6 100755
--- a/app.c
+++ b/app.c
@@ -710,10 +710,12 @@ int ast_play_and_record(struct ast_channel *chan, char *playfile, char *recordfi
 	for (x=0;x<fmtcnt;x++) {
 		if (!others[x])
 			break;
-		if (totalsilence)
-			ast_stream_rewind(others[x], totalsilence-200);
-		else
-			ast_stream_rewind(others[x], 200);
+		if (res > 0) {
+			if (totalsilence)
+				ast_stream_rewind(others[x], totalsilence-200);
+			else
+				ast_stream_rewind(others[x], 200);
+		}
 		ast_truncstream(others[x]);
 		ast_closestream(others[x]);
 	}
@@ -722,14 +724,11 @@ int ast_play_and_record(struct ast_channel *chan, char *playfile, char *recordfi
 			ast_log(LOG_WARNING, "Unable to restore format %s to channel '%s'\n", ast_getformatname(rfmt), chan->name);
 		}
 	}
-	if (outmsg) {
-		if (outmsg > 1) {
+	if (outmsg > 1) {
 		/* Let them know recording is stopped */
-			ast_streamfile(chan, "auth-thankyou", chan->language);
+		if(!ast_streamfile(chan, "auth-thankyou", chan->language))
 			ast_waitstream(chan, "");
-		}
 	}
-
 	return res;
 }
 
diff --git a/apps/app_voicemail.c b/apps/app_voicemail.c
index 31c02dbb293eaf601ec41b5948cb7a7673f4d6c2..424306c42e2e69aa52ed222c82b9db099151d647 100755
--- a/apps/app_voicemail.c
+++ b/apps/app_voicemail.c
@@ -4609,7 +4609,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
 			cmd = ast_play_and_record(chan, playfile, recordfile, maxtime, fmt, duration, silencethreshold, maxsilence);
  			if (cmd == -1)
  			/* User has hung up, no options to give */
- 				return res;
+ 				return cmd;
  			if (cmd == '0') {
  				break;
  			} else if (cmd == '*') {
@@ -4704,7 +4704,7 @@ static int play_record_review(struct ast_channel *chan, char *playfile, char *re
  		}
  	}
  	if (outsidecaller)  
- 		ast_play_and_wait(chan, "vm-goodbye");
+		ast_play_and_wait(chan, "vm-goodbye");
  	if (cmd == 't')
  		cmd = 0;
  	return cmd;