diff --git a/src/errors.h b/src/errors.h
index 53bd0cd..ecd4eb9 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3228,3 +3228,7 @@
 EXTERN char e_critical_error_in_python3_initialization_check_your_installation[]
 	INIT(= N_("E1266: Critical error in python3 initialization, check your python3 installation"));
 #endif
+#ifdef FEAT_EVAL
+EXTERN char e_function_name_must_start_with_capital_str[]
+	INIT(= N_("E1267: Function name must start with a capital: %s"));
+#endif
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 86b0763..ebcd0fb 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -97,7 +97,7 @@
         echo 'foo'
       endfunc
   END
-  v9.CheckScriptFailure(lines, 'E128:')
+  v9.CheckScriptFailure(lines, 'E1267:')
 
   lines =<< trim END
       vim9script
@@ -105,7 +105,7 @@
         echo 'foo'
       enddef
   END
-  v9.CheckScriptFailure(lines, 'E128:')
+  v9.CheckScriptFailure(lines, 'E1267:')
 enddef
 
 def Test_autoload_name_mismatch()
@@ -685,11 +685,11 @@
         def _Inner()
           echo 'bad'
         enddef
-        Inner()
+        _Inner()
       enddef
       defcompile
   END
-  v9.CheckScriptFailure(lines, 'E128:')
+  v9.CheckScriptFailure(lines, 'E1267:')
 
   lines =<< trim END
       vim9script
@@ -697,11 +697,27 @@
         def g:inner()
           echo 'bad'
         enddef
-        Inner()
+        g:inner()
       enddef
       defcompile
   END
-  v9.CheckScriptFailure(lines, 'E128:')
+  v9.CheckScriptFailure(lines, 'E1267:')
+
+  lines =<< trim END
+      vim9script
+      def g:_Func()
+        echo 'bad'
+      enddef
+  END
+  v9.CheckScriptFailure(lines, 'E1267:')
+
+  lines =<< trim END
+      vim9script
+      def s:_Func()
+        echo 'bad'
+      enddef
+  END
+  v9.CheckScriptFailure(lines, 'E1267:')
 
   # nested function inside conditional
   lines =<< trim END
@@ -2772,7 +2788,7 @@
   lines =<< trim END
       vim9script
 
-      def s:func()
+      def s:Func()
         range(10)
           ->mapnew((_, _) => ({
             key: range(10)->mapnew((_, _) => {
diff --git a/src/userfunc.c b/src/userfunc.c
index 23131b7..0c54e35 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -3884,15 +3884,6 @@
     // In Vim9 script a user function is script-local by default, unless it
     // starts with a lower case character: dict.func().
     vim9script = ASCII_ISUPPER(*start) && in_vim9script();
-    if (vim9script)
-    {
-	char_u *p;
-
-	// SomeScript#func() is a global function.
-	for (p = start; *p != NUL && *p != '('; ++p)
-	    if (*p == AUTOLOAD_CHAR)
-		vim9script = FALSE;
-    }
 
     /*
      * Copy the function name to allocated memory.
@@ -3904,7 +3895,17 @@
     else if (lead > 0 || vim9script)
     {
 	if (!vim9script)
+	{
+	    if (in_vim9script() && lead == 2 && !ASCII_ISUPPER(*lv.ll_name))
+	    {
+		semsg(_(in_vim9script()
+			   ? e_function_name_must_start_with_capital_str
+			   : e_function_name_must_start_with_capital_or_s_str),
+									start);
+		goto theend;
+	    }
 	    lead = 3;
+	}
 	if (vim9script || (lv.ll_exp_name != NULL
 					     && eval_fname_sid(lv.ll_exp_name))
 						       || eval_fname_sid(*pp))
@@ -3925,7 +3926,10 @@
     else if (!(flags & TFN_INT) && (builtin_function(lv.ll_name, len)
 				   || (in_vim9script() && *lv.ll_name == '_')))
     {
-	semsg(_(e_function_name_must_start_with_capital_or_s_str), start);
+	semsg(_(in_vim9script()
+			   ? e_function_name_must_start_with_capital_str
+			   : e_function_name_must_start_with_capital_or_s_str),
+									start);
 	goto theend;
     }
     if (!skip && !(flags & TFN_QUIET) && !(flags & TFN_NO_DEREF))
diff --git a/src/version.c b/src/version.c
index 2d0bb2d..cefbd40 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4324,
+/**/
     4323,
 /**/
     4322,
diff --git a/src/vim9compile.c b/src/vim9compile.c
index 080a53c..debead4 100644
--- a/src/vim9compile.c
+++ b/src/vim9compile.c
@@ -888,7 +888,7 @@
 	return NULL;
     if (!ASCII_ISUPPER(is_global ? name_start[2] : name_start[0]))
     {
-	semsg(_(e_function_name_must_start_with_capital_or_s_str), name_start);
+	semsg(_(e_function_name_must_start_with_capital_str), name_start);
 	return NULL;
     }
 
