diff --git a/cmd/tools/vretry.v b/cmd/tools/vretry.v
index aa23e773d74ae3..e3af7c8f2280a5 100644
--- a/cmd/tools/vretry.v
+++ b/cmd/tools/vretry.v
@@ -12,7 +12,9 @@ mut:
 
 fn main() {
 	mut context := Context{}
-	mut fp := flag.new_flag_parser(os.args#[1..])
+	args := os.args#[1..]
+	// dump(args)
+	mut fp := flag.new_flag_parser(args)
 	fp.application('v retry')
 	fp.version('0.0.1')
 	fp.description('Run the command CMD in a loop, until it succeeds, or until a predetermined amount of seconds pass.')
@@ -32,6 +34,7 @@ fn main() {
 		exit(1)
 	}
 	cmd := command_args.join(' ')
+	// dump(cmd)
 
 	spawn fn (context Context) {
 		time.sleep(context.timeout)
diff --git a/cmd/tools/vretry_test.v b/cmd/tools/vretry_test.v
index 193b03fd11a78b..d727293ff24622 100644
--- a/cmd/tools/vretry_test.v
+++ b/cmd/tools/vretry_test.v
@@ -53,9 +53,10 @@ fn test_retry() {
 	assert res.output == run(pass_cmd).output
 
 	// Include flags on the cmd as well.
-	pass_cmd_with_flags := '${vexe} run cmd/tools/check_retry.vsh --list -x arguments'
+	pass_cmd_with_flags := '${vexe} run cmd/tools/check_retry.vsh --list -x -- -b js arguments'
 	res = run('${vexe} retry -r 3 -- ${pass_cmd_with_flags}')
 	dump_on_ci(res)
 	assert res.exit_code == 0
-	assert res.output == run(pass_cmd_with_flags).output
+	output_trimmed := res.output.trim_space()
+	assert output_trimmed == "['--list', '-x', '--', '-b', 'js', 'arguments']"
 }
diff --git a/vlib/v/pref/pref.v b/vlib/v/pref/pref.v
index 4a441b62542857..f1d61d72347da3 100644
--- a/vlib/v/pref/pref.v
+++ b/vlib/v/pref/pref.v
@@ -343,6 +343,9 @@ pub fn parse_args_and_show_errors(known_external_commands []string, args []strin
 	for i := 0; i < args.len; i++ {
 		arg := args[i]
 		match arg {
+			'--' {
+				break
+			}
 			'-wasm-validate' {
 				res.wasm_validate = true
 			}