diff --git a/apps/app_controlplayback.c b/apps/app_controlplayback.c
index b6dfd898e05cda1ed546b908315be10d3e7b9cfe..85bcf7b92972deae26b19dc3181baee4785b6030 100644
--- a/apps/app_controlplayback.c
+++ b/apps/app_controlplayback.c
@@ -78,6 +78,17 @@ static int is_on_phonepad(char key)
 	return key == 35 || key == 42 || (key >= 48 && key <= 57);
 }
 
+static int is_argument(const char *haystack, int needle)
+{
+	if (ast_strlen_zero(haystack))
+		return 0;
+
+	if (strchr(haystack, needle))
+		return -1;
+
+	return 0;
+}
+
 static int controlplayback_exec(struct ast_channel *chan, void *data)
 {
 	int res = 0;
@@ -114,10 +125,21 @@ static int controlplayback_exec(struct ast_channel *chan, void *data)
 
 	skipms = args.skip ? (atoi(args.skip) ? atoi(args.skip) : 3000) : 3000;
 
-	if (!args.fwd || !is_on_phonepad(*args.fwd))
-		args.fwd = "#";
-	if (!args.rev || !is_on_phonepad(*args.rev))
-		args.rev = "*";
+	if (!args.fwd || !is_on_phonepad(*args.fwd)) {
+		char *digit = "#";
+		if (!is_argument(args.rev, *digit) && !is_argument(args.stop, *digit) && !is_argument(args.pause, *digit) && !is_argument(args.restart, *digit))
+			args.fwd = digit;
+		else
+			args.fwd = NULL;
+	}
+	if (!args.rev || !is_on_phonepad(*args.rev)) {
+		char *digit = "*";
+		if (!is_argument(args.fwd, *digit) && !is_argument(args.stop, *digit) && !is_argument(args.pause, *digit) && !is_argument(args.restart, *digit))
+			args.rev = digit;
+		else
+			args.rev = NULL;
+	}
+	ast_log(LOG_WARNING, "args.fwd = %s, args.rew = %s\n", args.fwd, args.rev);
 	if (args.stop && !is_on_phonepad(*args.stop))
 		args.stop = NULL;
 	if (args.pause && !is_on_phonepad(*args.pause))