diff --git a/src/errors.h b/src/errors.h
index d7ed81a..7b1181a 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3539,8 +3539,6 @@
 EXTERN char e_cannot_lock_class_variable_str[]
 	INIT(= N_("E1392: Cannot (un)lock class variable \"%s\" in class \"%s\""));
 #endif
-EXTERN char e_string_or_none_required_for_argument_nr[]
-	INIT(= N_("E1393: String or v:none required for argument %d"));
 // E1393 - E1499 unused (reserved for Vim9 class support)
 EXTERN char e_cannot_mix_positional_and_non_positional_str[]
 	INIT(= N_("E1500: Cannot mix positional and non-positional arguments: %s"));
diff --git a/src/proto/typval.pro b/src/proto/typval.pro
index 10f6e67..db8f94e 100644
--- a/src/proto/typval.pro
+++ b/src/proto/typval.pro
@@ -14,7 +14,6 @@
 int check_for_string_arg(typval_T *args, int idx);
 int check_for_nonempty_string_arg(typval_T *args, int idx);
 int check_for_opt_string_arg(typval_T *args, int idx);
-int check_for_opt_string_or_none_arg(typval_T *args, int idx, int *is_none);
 int check_for_number_arg(typval_T *args, int idx);
 int check_for_opt_number_arg(typval_T *args, int idx);
 int check_for_float_or_nr_arg(typval_T *args, int idx);
diff --git a/src/strings.c b/src/strings.c
index f1c8af8..0aeea4b 100644
--- a/src/strings.c
+++ b/src/strings.c
@@ -1962,7 +1962,7 @@
 
     if (in_vim9script()
 	    && (check_for_string_arg(argvars, 0) == FAIL
-		|| check_for_opt_string_or_none_arg(argvars, 1, NULL) == FAIL
+		|| check_for_opt_string_arg(argvars, 1) == FAIL
 		|| (argvars[1].v_type != VAR_UNKNOWN
 		    && check_for_opt_number_arg(argvars, 2) == FAIL)))
 	return;
@@ -1971,24 +1971,28 @@
     if (head == NULL)
 	return;
 
-    if (check_for_opt_string_or_none_arg(argvars, 1, NULL) == FAIL)
+    if (check_for_opt_string_arg(argvars, 1) == FAIL)
 	return;
 
     if (argvars[1].v_type == VAR_STRING)
-	mask = tv_get_string_buf_chk(&argvars[1], buf2);
-
-    if (argvars[1].v_type != VAR_UNKNOWN && argvars[2].v_type != VAR_UNKNOWN)
     {
-	int	error = 0;
+	mask = tv_get_string_buf_chk(&argvars[1], buf2);
+	if (*mask == NUL)
+	    mask = NULL;
 
-	// leading or trailing characters to trim
-	dir = (int)tv_get_number_chk(&argvars[2], &error);
-	if (error)
-	    return;
-	if (dir < 0 || dir > 2)
+	if (argvars[2].v_type != VAR_UNKNOWN)
 	{
-	    semsg(_(e_invalid_argument_str), tv_get_string(&argvars[2]));
-	    return;
+	    int	error = 0;
+
+	    // leading or trailing characters to trim
+	    dir = (int)tv_get_number_chk(&argvars[2], &error);
+	    if (error)
+		return;
+	    if (dir < 0 || dir > 2)
+	    {
+		semsg(_(e_invalid_argument_str), tv_get_string(&argvars[2]));
+		return;
+	    }
 	}
     }
 
diff --git a/src/testdir/test_functions.vim b/src/testdir/test_functions.vim
index 85d1d22..49b688c 100644
--- a/src/testdir/test_functions.vim
+++ b/src/testdir/test_functions.vim
@@ -2231,14 +2231,14 @@
   call assert_fails('eval trim("  vim  ", " ", [])', 'E745:')
   call assert_fails('eval trim("  vim  ", " ", -1)', 'E475:')
   call assert_fails('eval trim("  vim  ", " ", 3)', 'E475:')
-  call assert_fails('eval trim("  vim  ", 0)', 'E1393:')
+  call assert_fails('eval trim("  vim  ", 0)', 'E1174:')
 
   let chars = join(map(range(1, 0x20) + [0xa0], {n -> n->nr2char()}), '')
   call assert_equal("x", trim(chars . "x" . chars))
 
-  call assert_equal("x", trim(chars . "x" . chars, v:none, 0))
-  call assert_equal("x" . chars, trim(chars . "x" . chars, v:none, 1))
-  call assert_equal(chars . "x", trim(chars . "x" . chars, v:none, 2))
+  call assert_equal("x", trim(chars . "x" . chars, '', 0))
+  call assert_equal("x" . chars, trim(chars . "x" . chars, '', 1))
+  call assert_equal(chars . "x", trim(chars . "x" . chars, '', 2))
 
   call assert_fails('let c=trim([])', 'E730:')
 endfunc
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 206f97f..1efc47a 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -4786,7 +4786,7 @@
 
 def Test_trim()
   v9.CheckDefAndScriptFailure(['trim(["a"])'], ['E1013: Argument 1: type mismatch, expected string but got list<string>', 'E1174: String required for argument 1'])
-  v9.CheckDefAndScriptFailure(['trim("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1393: String or v:none required for argument 2'])
+  v9.CheckDefAndScriptFailure(['trim("a", ["b"])'], ['E1013: Argument 2: type mismatch, expected string but got list<string>', 'E1174: String required for argument 2'])
   v9.CheckDefAndScriptFailure(['trim("a", "b", "c")'], ['E1013: Argument 3: type mismatch, expected number but got string', 'E1210: Number required for argument 3'])
   trim('')->assert_equal('')
   trim('', '')->assert_equal('')
diff --git a/src/typval.c b/src/typval.c
index b6371aa..08dd231 100644
--- a/src/typval.c
+++ b/src/typval.c
@@ -451,37 +451,6 @@
 }
 
 /*
- * Check for an optional string argument at 'idx', that can also be 'v:none' to
- * use the default value.
- *
- * If 'is_none' is non-NULL it is set to 0 and updated to 1 when "args[idx]" is
- * 'v:none'.
- */
-    int
-check_for_opt_string_or_none_arg(typval_T *args, int idx, int *is_none)
-{
-    if (is_none != NULL)
-	*is_none = 0;
-
-    if (args[idx].v_type == VAR_UNKNOWN)
-	return OK;
-
-    if (args[idx].v_type == VAR_SPECIAL
-	    && args[idx].vval.v_number == VVAL_NONE)
-    {
-	if (is_none != NULL)
-	    *is_none = 1;
-	return OK;
-    }
-
-    if (args[idx].v_type == VAR_STRING)
-	return OK;
-
-    semsg(_(e_string_or_none_required_for_argument_nr), idx + 1);
-    return FAIL;
-}
-
-/*
  * Give an error and return FAIL unless "args[idx]" is a number.
  */
     int
diff --git a/src/version.c b/src/version.c
index 0896c64..05b65c4 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2041,
+/**/
     2040,
 /**/
     2039,
