diff --git a/src/errors.h b/src/errors.h
index 7e6d0db..9a5da9c 100644
--- a/src/errors.h
+++ b/src/errors.h
@@ -3218,8 +3218,8 @@
 	INIT(= N_("E1261: Cannot import .vim without using \"as\""));
 EXTERN char e_cannot_import_same_script_twice_str[]
 	INIT(= N_("E1262: Cannot import the same script twice: %s"));
-EXTERN char e_using_autoload_name_in_non_autoload_script_str[]
-	INIT(= N_("E1263: Using autoload name in a non-autoload script: %s"));
+EXTERN char e_cannot_use_name_with_hash_in_vim9_script_use_export_instead[]
+	INIT(= N_("E1263: cannot use name with # in Vim9 script, use export instead"));
 EXTERN char e_autoload_import_cannot_use_absolute_or_relative_path[]
 	INIT(= N_("E1264: Autoload import cannot use absolute or relative path: %s"));
 EXTERN char e_cannot_use_partial_here[]
diff --git a/src/testdir/test_vim9_func.vim b/src/testdir/test_vim9_func.vim
index 41ba2da..434d49b 100644
--- a/src/testdir/test_vim9_func.vim
+++ b/src/testdir/test_vim9_func.vim
@@ -46,7 +46,7 @@
 
   var lines =<< trim END
       vim9script
-      def script#OnlyCompiled()
+      export def OnlyCompiled()
         g:runtime = 'yes'
         invalid
       enddef
@@ -114,7 +114,7 @@
 
   var lines =<< trim END
       vim9script
-      def scriptX#Function()
+      export def NoFunction()
         # comment
         g:runtime = 'yes'
       enddef
@@ -126,7 +126,7 @@
   lines =<< trim END
       call script#Function()
   END
-  v9.CheckScriptFailure(lines, 'E746:', 2)
+  v9.CheckScriptFailure(lines, 'E117:', 1)
 
   &rtp = save_rtp
   delete(dir, 'rf')
diff --git a/src/testdir/test_vim9_import.vim b/src/testdir/test_vim9_import.vim
index 7d474e1..f37ff8b 100644
--- a/src/testdir/test_vim9_import.vim
+++ b/src/testdir/test_vim9_import.vim
@@ -1614,13 +1614,13 @@
 def Test_vim9_autoload_full_name()
   var lines =<< trim END
      vim9script
-     def some#gettest(): string
+     export def Gettest(): string
        return 'test'
      enddef
      g:some#name = 'name'
      g:some#dict = {key: 'value'}
 
-     def some#varargs(a1: string, ...l: list<string>): string
+     export def Varargs(a1: string, ...l: list<string>): string
        return a1 .. l[0] .. l[1]
      enddef
   END
@@ -1630,23 +1630,23 @@
   var save_rtp = &rtp
   exe 'set rtp^=' .. getcwd() .. '/Xdir'
 
-  assert_equal('test', g:some#gettest())
+  assert_equal('test', g:some#Gettest())
   assert_equal('name', g:some#name)
   assert_equal('value', g:some#dict.key)
   g:some#other = 'other'
   assert_equal('other', g:some#other)
 
-  assert_equal('abc', some#varargs('a', 'b', 'c'))
+  assert_equal('abc', some#Varargs('a', 'b', 'c'))
 
   # upper case script name works
   lines =<< trim END
      vim9script
-     def Other#getOther(): string
+     export def GetOther(): string
        return 'other'
      enddef
   END
   writefile(lines, 'Xdir/autoload/Other.vim')
-  assert_equal('other', g:Other#getOther())
+  assert_equal('other', g:Other#GetOther())
 
   delete('Xdir', 'rf')
   &rtp = save_rtp
@@ -2020,14 +2020,23 @@
 
 def Test_autoload_name_wrong()
   var lines =<< trim END
-     vim9script
      def Xscriptname#Func()
      enddef
   END
   writefile(lines, 'Xscriptname.vim')
-  v9.CheckScriptFailure(lines, 'E1263:')
-
+  v9.CheckScriptFailure(lines, 'E746:')
   delete('Xscriptname.vim')
+
+  mkdir('Xdir/autoload', 'p')
+  lines =<< trim END
+     vim9script
+     def somescript#Func()
+     enddef
+  END
+  writefile(lines, 'Xdir/autoload/somescript.vim')
+  assert_fails('source Xdir/autoload/somescript.vim', 'E1263:')
+
+  delete('Xdir', 'rf')
 enddef
 
 def Test_import_autoload_postponed()
@@ -2202,7 +2211,7 @@
 
   var lines =<< trim END
      vim9script
-     def debugit#test(): string
+     export def Test(): string
        return 'debug'
      enddef
   END
@@ -2210,7 +2219,7 @@
 
   lines =<< trim END
      vim9script
-     def profileit#test(): string
+     export def Test(): string
        return 'profile'
      enddef
   END
@@ -2218,10 +2227,10 @@
 
   lines =<< trim END
     vim9script
-    assert_equal('debug', debugit#test())
-    disass debugit#test
-    assert_equal('profile', profileit#test())
-    disass profileit#test
+    assert_equal('debug', debugit#Test())
+    disass debugit#Test
+    assert_equal('profile', profileit#Test())
+    disass profileit#Test
   END
   v9.CheckScriptSuccess(lines)
 
@@ -2233,7 +2242,7 @@
 def Test_vim9_aucmd_autoload()
   var lines =<< trim END
      vim9script
-     def foo#test()
+     export def Test()
          echomsg getreg('"')
      enddef
   END
@@ -2243,7 +2252,7 @@
   var save_rtp = &rtp
   exe 'set rtp^=' .. getcwd() .. '/Xdir'
   augroup test
-    autocmd TextYankPost * call foo#test()
+    autocmd TextYankPost * call foo#Test()
   augroup END
 
   normal Y
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index d6142a6..a3f28f1 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -3078,7 +3078,7 @@
 
   var lines =<< trim END
       vim9script noclear
-      def script#autoloaded()
+      export def Autoloaded()
       enddef
       def Broken()
         var x: any = ''
@@ -3091,7 +3091,7 @@
   lines =<< trim END
       vim9script
       def CallAutoloaded()
-        script#autoloaded()
+        script#Autoloaded()
       enddef
 
       function Legacy()
@@ -3196,7 +3196,7 @@
 
   let lines =<< trim END
     vim9script
-    def script#func()
+    export def Func()
     enddef
   END
   call mkdir('Xdir/autoload', 'p')
@@ -3206,7 +3206,7 @@
       vim9script
       set cpo+=M
       exe 'set rtp^=' .. getcwd() .. '/Xdir'
-      au CmdlineEnter : ++once timer_start(0, (_) => script#func())
+      au CmdlineEnter : ++once timer_start(0, (_) => script#Func())
       setline(1, 'some text')
   END
   call writefile(lines, 'XTest_redraw_cpo')
diff --git a/src/userfunc.c b/src/userfunc.c
index d930951..f3fe493 100644
--- a/src/userfunc.c
+++ b/src/userfunc.c
@@ -4232,6 +4232,11 @@
 		name = prefixed;
 	    }
 	}
+	else if (vim9script && vim_strchr(name, AUTOLOAD_CHAR) != NULL)
+	{
+	    emsg(_(e_cannot_use_name_with_hash_in_vim9_script_use_export_instead));
+	    goto ret_free;
+	}
     }
 
     // An error in a function call during evaluation of an expression in magic
@@ -4540,12 +4545,6 @@
 		    }
 		}
 	    }
-	    else if (vim9script && vim_strchr(name, AUTOLOAD_CHAR) != NULL)
-	    {
-		semsg(_(e_using_autoload_name_in_non_autoload_script_str),
-									 name);
-		goto erret;
-	    }
 	}
 	if (var_conflict)
 	{
diff --git a/src/version.c b/src/version.c
index b37d0a8..3799493 100644
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4264,
+/**/
     4263,
 /**/
     4262,
