diff --git a/apps/app_playback.c b/apps/app_playback.c
index b4286d30646226d09b250af0feba40efbf7ddac0..21b3ab3eba197a97b288efe2ad697a546c3c5470 100644
--- a/apps/app_playback.c
+++ b/apps/app_playback.c
@@ -185,7 +185,7 @@ static int do_say(say_args_t *a, const char *s, const char *options, int depth)
 	AST_LIST_INSERT_HEAD(&head, n, entries);
 
 	/* scan the body, one piece at a time */
-	while ( ret <= 0 && (x = strsep(&rule, ",")) ) { /* exit on key */
+	while ( !ret && (x = strsep(&rule, ",")) ) { /* exit on key */
 		char fn[128];
 		const char *p, *fmt, *data; /* format and data pointers */
 
@@ -234,6 +234,10 @@ static int do_say(say_args_t *a, const char *s, const char *options, int depth)
 				strcpy(fn2 + l, data);
 				ret = do_say(a, fn2, options, depth);
 			}
+			
+			if (ret) {
+				break;
+			}
 		}
 	}
 	ast_var_delete(n);