diff --git a/runtime/doc/builtin.txt b/runtime/doc/builtin.txt
index fa9db94..e24bac8 100644
--- a/runtime/doc/builtin.txt
+++ b/runtime/doc/builtin.txt
@@ -1,4 +1,4 @@
-*builtin.txt*	For Vim version 8.2.  Last change: 2022 May 27
+*builtin.txt*	For Vim version 8.2.  Last change: 2022 Jun 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -753,7 +753,7 @@
 		Return the arc cosine of {expr} measured in radians, as a
 		|Float| in the range of [0, pi].
 		{expr} must evaluate to a |Float| or a |Number| in the range
-		[-1, 1].
+		[-1, 1].  Otherwise acos() returns "nan".
 		Examples: >
 			:echo acos(0)
 <			1.570796 >
@@ -775,6 +775,7 @@
 		item.  Use |extend()| to concatenate |Lists|.
 		When {object} is a |Blob| then  {expr} must be a number.
 		Use |insert()| to add an item at another position.
+		Returns 1 if {object} is not a |List| or a |Blob|.
 
 		Can also be used as a |method|: >
 			mylist->add(val1)->add(val2)
@@ -877,11 +878,17 @@
 		The {winid} argument specifies the window ID, see |argc()|.
 		For the Vim command line arguments see |v:argv|.
 
+		Returns an empty string if {nr}th argument is not present in
+		the argument list.  Returns an empty List if the {winid}
+		argument is invalid.
+
 asin({expr})						*asin()*
 		Return the arc sine of {expr} measured in radians, as a |Float|
 		in the range of [-pi/2, pi/2].
 		{expr} must evaluate to a |Float| or a |Number| in the range
 		[-1, 1].
+		Returns "nan" if {expr} is outside the range [-1, 1].  Returns
+		0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo asin(0.8)
 <			0.927295 >
@@ -902,6 +909,7 @@
 		Return the principal value of the arc tangent of {expr}, in
 		the range [-pi/2, +pi/2] radians, as a |Float|.
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo atan(100)
 <			1.560797 >
@@ -918,6 +926,8 @@
 		Return the arc tangent of {expr1} / {expr2}, measured in
 		radians, as a |Float| in the range [-pi, pi].
 		{expr1} and {expr2} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr1} or {expr2} is not a |Float| or a
+		|Number|.
 		Examples: >
 			:echo atan2(-1, 1)
 <			-0.785398 >
@@ -1002,7 +1012,7 @@
 		{pattern} and {cmd} are not specified, then that autocmd group
 		is deleted.
 
-		Returns v:true on success and v:false on failure.
+		Returns |v:true| on success and |v:false| on failure.
 		Examples: >
 			" :autocmd! BufLeave *.vim
 			let acmd = #{event: 'BufLeave', pattern: '*.vim'}
@@ -1060,6 +1070,9 @@
 		If there are multiple commands for an autocmd event in a
 		group, then separate items are returned for each command.
 
+		Returns an empty List if an autocmd with the specified group
+		or event or pattern is not found.
+
 		Examples: >
 			" :autocmd MyGroup
 			echo autocmd_get(#{group: 'Mygroup'})
@@ -1080,7 +1093,8 @@
 <
 balloon_gettext()					*balloon_gettext()*
 		Return the current text in the balloon.  Only for the string,
-		not used for the List.
+		not used for the List.  Returns an empty string if balloon
+		is not present.
 
 balloon_show({expr})					*balloon_show()*
 		Show {expr} inside the balloon.  For the GUI {expr} is used as
@@ -1117,7 +1131,8 @@
 		Split String {msg} into lines to be displayed in a balloon.
 		The splits are made for the current window size and optimize
 		to show debugger output.
-		Returns a |List| with the split lines.
+		Returns a |List| with the split lines.  Returns an empty List
+		on error.
 		Can also be used as a |method|: >
 			GetText()->balloon_split()->balloon_show()
 
@@ -1171,7 +1186,8 @@
 			let bufnr = bufadd('someName')
 			call bufload(bufnr)
 			call setbufline(bufnr, 1, ['some', 'text'])
-<		Can also be used as a |method|: >
+<		Returns 0 on error.
+		Can also be used as a |method|: >
 			let bufnr = 'somename'->bufadd()
 
 bufexists({buf})					*bufexists()*
@@ -1326,6 +1342,8 @@
 		one.
 		Also see |line2byte()|, |go| and |:goto|.
 
+		Returns -1 if the {byte} value is invalid.
+
 		Can also be used as a |method|: >
 			GetOffset()->byte2line()
 
@@ -1397,6 +1415,8 @@
 			echo ceil(4.0)
 <			4.0
 
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
+
 		Can also be used as a |method|: >
 			Compute()->ceil()
 <
@@ -1413,6 +1433,7 @@
 		When a change was made it is the number of that change.  After
 		redo it is the number of the redone change.  After undo it is
 		one less than the number of the undone change.
+		Returns 0 if the undo list is empty.
 
 char2nr({string} [, {utf8}])					*char2nr()*
 		Return Number value of the first char in {string}.
@@ -1431,10 +1452,11 @@
 		    let list = map(split(str, '\zs'), {_, val -> char2nr(val)})
 <		Result: [65, 66, 67]
 
+		Returns 0 if {string} is not a |String|.
+
 		Can also be used as a |method|: >
 			GetChar()->char2nr()
 
-
 charclass({string})					*charclass()*
 		Return the character class of the first character in {string}.
 		The character class is one of:
@@ -1444,6 +1466,7 @@
 			3	emoji
 			other	specific Unicode class
 		The class is used in patterns and word motions.
+		Returns 0 if {string} is not a |String|.
 
 
 charcol({expr})						*charcol()*
@@ -1555,7 +1578,7 @@
 			col("$")		length of cursor line plus one
 			col("'t")		column of mark t
 			col("'" .. markname)	column of mark markname
-<		The first column is 1.  0 is returned for an error.
+<		The first column is 1.  Returns 0 if {expr} is invalid.
 		For an uppercase mark the column may actually be in another
 		buffer.
 		For the cursor position, when 'virtualedit' is active, the
@@ -1673,6 +1696,8 @@
 		|pum_getpos()|. It's also available in |v:event| during the
 		|CompleteChanged| event.
 
+		Returns an empty |Dictionary| on error.
+
 		Examples: >
 			" Get all items
 			call complete_info()
@@ -1758,6 +1783,7 @@
 cos({expr})						*cos()*
 		Return the cosine of {expr}, measured in radians, as a |Float|.
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo cos(100)
 <			0.862319 >
@@ -1774,6 +1800,7 @@
 		Return the hyperbolic cosine of {expr} as a |Float| in the range
 		[1, inf].
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo cosh(0.5)
 <			1.127626 >
@@ -1885,6 +1912,9 @@
 		processes is undefined. See |terminal-debugger|.
 		{only available on MS-Windows}
 
+		Returns |TRUE| if successfully interrupted the program.
+		Otherwise returns |FALSE|.
+
 		Can also be used as a |method|: >
 			GetPid()->debugbreak()
 
@@ -2355,6 +2385,7 @@
 		Return the exponential of {expr} as a |Float| in the range
 		[0, inf].
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			:echo exp(2)
 <			7.389056 >
@@ -2521,7 +2552,7 @@
 		{expr2} remains unchanged.
 		When {expr1} is locked and {expr2} is not empty the operation
 		fails.
-		Returns {expr1}.
+		Returns {expr1}.  Returns 0 on error.
 
 		Can also be used as a |method|: >
 			mylist->extend(otherlist)
@@ -2695,6 +2726,8 @@
 		{name} in {path} instead of the first one.
 		When {count} is negative return all the matches in a |List|.
 
+		Returns an empty string if the directory is not found.
+
 		This is quite similar to the ex-command `:find`.
 		{only available when compiled with the |+file_in_path|
 		feature}
@@ -2745,6 +2778,7 @@
 		Convert {expr} to a Number by omitting the part after the
 		decimal point.
 		{expr} must evaluate to a |Float| or a Number.
+		Returns 0 if {expr} is not a |Float| or a |Number|.
 		When the value of {expr} is out of range for a |Number| the
 		result is truncated to 0x7fffffff or -0x7fffffff (or when
 		64-bit Number support is enabled, 0x7fffffffffffffff or
@@ -2772,6 +2806,7 @@
 		Return the largest integral value less than or equal to
 		{expr} as a |Float| (round down).
 		{expr} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr} is not a |Float| or a |Number|.
 		Examples: >
 			echo floor(1.856)
 <			1.0  >
@@ -2794,6 +2829,8 @@
 		the magnitude of {expr2}.  If {expr2} is zero, the value
 		returned is zero.  The value returned is a |Float|.
 		{expr1} and {expr2} must evaluate to a |Float| or a |Number|.
+		Returns 0.0 if {expr1} or {expr2} is not a |Float| or a
+		|Number|.
 		Examples: >
 			:echo fmod(12.33, 1.22)
 <			0.13 >
@@ -2815,6 +2852,7 @@
 		appears in a filename, it depends on the value of 'isfname'.
 		A leading '+' and '>' is also escaped (special after |:edit|
 		and |:write|).  And a "-" by itself (special after |:cd|).
+		Returns an empty string on error.
 		Example: >
 			:let fname = '+some str%nge|name'
 			:exe "edit " .. fnameescape(fname)
@@ -2832,7 +2870,8 @@
 			:echo fnamemodify("main.c", ":p:h")
 <		results in: >
 			/home/mool/vim/vim/src
-<		If {mods} is empty then {fname} is returned.
+<		If {mods} is empty or an unsupported modifier is used then
+		{fname} is returned.
 		Note: Environment variables don't work in {fname}, use
 		|expand()| first then.
 
@@ -2889,6 +2928,7 @@
 		When used to draw the actual foldtext, the rest of the line
 		will be filled with the fold char from the 'fillchars'
 		setting.
+		Returns an empty string when there is no fold.
 		{not available when compiled without the |+folding| feature}
 
 foldtextresult({lnum})					*foldtextresult()*
@@ -2940,6 +2980,7 @@
 		been loaded (to avoid mistakenly loading the autoload script
 		when only intending to use the function name, use |function()|
 		instead). {name} cannot be a builtin function.
+		Returns 0 on error.
 
 		Can also be used as a |method|: >
 			GetFuncname()->funcref([arg])
@@ -3020,6 +3061,8 @@
 <		Invokes the function as with: >
 			call context.Callback('one', 500)
 <
+		Returns 0 on error.
+
 		Can also be used as a |method|: >
 			GetFuncname()->function([arg])
 
@@ -3073,6 +3116,7 @@
 			"func"	The function
 			"dict"	The dictionary
 			"args"	The list with arguments
+		Returns zero on error.
 		Preferably used as a |method|: >
 			myfunc->get(what)
 <
@@ -3315,7 +3359,7 @@
 			128	command (Macintosh only)
 		Only the modifiers that have not been included in the
 		character itself are obtained.  Thus Shift-a results in "A"
-		without a modifier.
+		without a modifier.  Returns 0 if no modifiers are used.
 
 							*getcharpos()*
 getcharpos({expr})
@@ -3665,7 +3709,7 @@
 
 getimstatus()						*getimstatus()*
 		The result is a Number, which is |TRUE| when the IME status is
-		active.
+		active and |FALSE| otherwise.
 		See 'imstatusfunc'.
 
 getjumplist([{winnr} [, {tabnr}]])			*getjumplist()*
@@ -3675,7 +3719,8 @@
 		With {winnr} only use this window in the current tab page.
 		{winnr} can also be a |window-ID|.
 		With {winnr} and {tabnr} use the window in the specified tab
-		page.
+		page.  If {winnr} or {tabnr} is invalid, an empty list is
+		returned.
 
 		The returned list contains two entries: a list with the jump
 		locations and the last used jump position number in the list.
@@ -3756,7 +3801,8 @@
 
 		If the optional {buf} argument is specified, returns the
 		local marks defined in buffer {buf}.  For the use of {buf},
-		see |bufname()|.
+		see |bufname()|.  If {buf} is invalid, an empty list is
+		returned.
 
 		Each item in the returned List is a |Dict| with the following:
 		    mark   name of the mark prefixed by "'"
@@ -3778,7 +3824,8 @@
 		as |setmatches()| can restore a list of matches saved by
 		|getmatches()|.
 		If {win} is specified, use the window with this number or
-		window ID instead of the current window.
+		window ID instead of the current window.  If {win} is invalid,
+		an empty list is returned.
 		Example: >
 			:echo getmatches()
 <			[{'group': 'MyGroup1', 'pattern': 'TODO',
@@ -3850,6 +3897,7 @@
 		use |getcharpos()|.
 		A very large column number equal to |v:maxcol| can be returned,
 		in which case it means "after the end of the line".
+		If {expr} is invalid, returns a list with all zeros.
 		This can be used to save and restore the position of a mark: >
 			let save_a_mark = getpos("'a")
 			...
@@ -6870,7 +6918,9 @@
 		The item can be passed to |reltimestr()| to convert it to a
 		string or |reltimefloat()| to convert to a Float.
 
-		Without an argument reltime() returns the current time.
+		Without an argument reltime() returns the current time (the
+		representation is system-dependend, it can not be used as the
+		wall-clock time, see |localtime()| for that).
 		With one argument is returns the time passed since the time
 		specified in the argument.
 		With two arguments it returns the time passed between {start}
@@ -10095,6 +10145,7 @@
 				current window (where |CTRL-W_l| goes to).
 		The number can be used with |CTRL-W_w| and ":wincmd w"
 		|:wincmd|.
+		When {arg} is invalid an error is given and zero is returned.
 		Also see |tabpagewinnr()| and |win_getid()|.
 		Examples: >
 			let window_count = winnr('$')
diff --git a/runtime/doc/channel.txt b/runtime/doc/channel.txt
index 6705c59..5d7e907 100644
--- a/runtime/doc/channel.txt
+++ b/runtime/doc/channel.txt
@@ -1,4 +1,4 @@
-*channel.txt*      For Vim version 8.2.  Last change: 2022 Apr 16
+*channel.txt*      For Vim version 8.2.  Last change: 2022 Jun 04
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
diff --git a/runtime/doc/popup.txt b/runtime/doc/popup.txt
index dd478ae..03dd3a2 100644
--- a/runtime/doc/popup.txt
+++ b/runtime/doc/popup.txt
@@ -1,4 +1,4 @@
-*popup.txt*  For Vim version 8.2.  Last change: 2022 May 29
+*popup.txt*  For Vim version 8.2.  Last change: 2022 Jun 06
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -999,7 +999,7 @@
 ==============================================================================
 4. Examples						*popup-examples*
 
-These examplese use |Vim9| script.
+These examples use |Vim9| script.
 
 TODO: more interesting examples
 
@@ -1043,6 +1043,10 @@
 	  " No shortcut, pass to generic filter
 	  return popup_filter_menu(a:id, a:key)
 	endfunc
+
+	func MyMenuHandler(id, result)
+	  echo $'Result: {a:result}'
+	endfunc
 <
 					*popup_beval_example*
 Example for using a popup window for 'ballooneval': >
diff --git a/runtime/doc/starting.txt b/runtime/doc/starting.txt
index ec095a4..f50462a 100644
--- a/runtime/doc/starting.txt
+++ b/runtime/doc/starting.txt
@@ -1,4 +1,4 @@
-*starting.txt*  For Vim version 8.2.  Last change: 2022 May 10
+*starting.txt*  For Vim version 8.2.  Last change: 2022 Jun 04
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index b5dd99e..8cf50b3 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 8.2.  Last change: 2022 Jun 03
+*todo.txt*      For Vim version 8.2.  Last change: 2022 Jun 05
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -40,7 +40,6 @@
 
 Prepare for Vim 9.0 release:
 - Update the user manual:
-  - Add import/export example to 52.1
   - Add more to usr_50.txt as an "advanced section" of usr_41.txt
   - Move some from vim9.txt to the user manual?  Keep the specification.
 - Use Vim9 for more runtime files.
@@ -82,8 +81,8 @@
 
 Popup windows:
 - Preview popup not properly updated when it overlaps with completion menu.
-    (Yegappan Lakshmanan, 2021 May 22
-- Srollbar thumb somtimes not visible  #10492
+  (Yegappan Lakshmanan, 2021 May 22)
+- Srollbar thumb sometimes not visible  #10492
 - Add a function to redraw a specific popup window.  Esp. to be used when
   editing the command line, when screen updating doesn't happen. (Shougo)
 - Add a flag to make a popup window focusable?
@@ -204,6 +203,10 @@
 - When 'encoding' is not utf-8, or the job is using another encoding, setup
   conversions.
 
+Autoconf: must use autoconf 2.69, later version generates lots of warnings
+    attempt in ~/tmp/configure.ac
+- try using autoconf 2.71 and fix all "obsolete" warnings
+
 Can deref_func_name() and deref_function_name() be merged?
 
 After patch 8.2.4915 w_botline is computed much more often. Can this be
@@ -217,7 +220,7 @@
 the terminal itself.  The $TERM value then is only relevant for whether this
 feature is supported or not.  Replaces the xterm mechanism to request each
 entry separately. #6609
-Multiplexers (screen, tmux) can request it to the underlaying terminal, and
+Multiplexers (screen, tmux) can request it to the underlying terminal, and
 pass it on with modifications.
 
 Can "CSI nr X" be used instead of outputting spaces?  Is it faster?  #8002
diff --git a/runtime/doc/usr_41.txt b/runtime/doc/usr_41.txt
index 214b8c7..6d13536 100644
--- a/runtime/doc/usr_41.txt
+++ b/runtime/doc/usr_41.txt
@@ -1,4 +1,4 @@
-*usr_41.txt*	For Vim version 8.2.  Last change: 2022 Jun 03
+*usr_41.txt*	For Vim version 8.2.  Last change: 2022 Jun 04
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
@@ -66,7 +66,8 @@
 	count is 4 ~
 
 In the first line the `vim9script` command makes clear this is a new, |Vim9|
-script file.  That matters for how the rest of the file is used.
+script file.  That matters for how the rest of the file is used.  It is
+recommended to put it in the very fist line, before any comments.
 							*vim9-declarations*
 The `var i = 1` command declares the "i" variable and initializes it.  The
 generic form is: >
@@ -1791,7 +1792,7 @@
 
 When the `read` command causes another error, the pattern "E484:" will not
 match in it.  Thus this exception will not be caught and result in the usual
-error message and excecution is aborted.
+error message and execution is aborted.
 
 You might be tempted to do this: >
 
diff --git a/runtime/doc/usr_50.txt b/runtime/doc/usr_50.txt
index e4abf05..2dff27e 100644
--- a/runtime/doc/usr_50.txt
+++ b/runtime/doc/usr_50.txt
@@ -15,8 +15,8 @@
 ==============================================================================
 *50.1*	Line continuation
 
-In legacy Vim script line contination is done by preceding a contination line
-with a backslash: >
+In legacy Vim script line continuation is done by preceding a continuation
+line with a backslash: >
 	let mylist = [
 			\ 'one',
 			\ 'two',
diff --git a/runtime/doc/usr_52.txt b/runtime/doc/usr_52.txt
index 0461d8e..2c3e13b 100644
--- a/runtime/doc/usr_52.txt
+++ b/runtime/doc/usr_52.txt
@@ -1,14 +1,12 @@
-*usr_52.txt*	For Vim version 8.2.  Last change: 2022 Jun 03
+*usr_52.txt*	For Vim version 8.2.  Last change: 2022 Jun 04
 
 		     VIM USER MANUAL - by Bram Moolenaar
 
 		       Write larger plugins
 
-TODO: this file needs to be updated
-
 When plugins do more than simple things, they tend to grow big.  This file
 explains how to make sure they still load fast and how to split them up in
-smaller parts
+smaller parts.
 
 |52.1|	Export and import
 |52.2|	Autoloading
@@ -29,45 +27,97 @@
 makes Vim9 script a lot faster, up to a 100 times.
 
 The basic idea is that a script file has items that are private, only used
-inside the script file, and items that are exported, used outside of the
-script file.  The exported items can then be used by scripts that import them.
-That makes very clear what is defined where.
+inside the script file, and items that are exported, which can be used by
+scripts that import them.  That makes very clear what is defined where.
 
 Let's start with an example, a script that exports one function and has one
 private function: >
 
-	vim9script  " This indicates a Vim9 script file.
+	vim9script
 
-	export def GetMessage(): string
-	   let result = ''
-	   ...
-	   result = GetPart(count)
-	   ...
+	export def GetMessage(count: string): string
+	   var nr = str2nr(count)
+	   var result = $'To {nr} we say '
+	   result ..= GetReply(nr)
 	   return result
 	enddef
 
-	def GetPart(nr: number): string
-	  if nr == 4
+	def GetReply(nr: number): string
+	  if nr == 42
 	     return 'yes'
+	  elseif nr = 22
+	     return 'maybe'
 	  else
 	     return 'no'
 	  endif
 	enddef
 
-The `vim9script` command must be the very first command in the file.  Without
-it Vim will assume legacy script syntax.
+The `vim9script` command is required, `export` only works in a |Vim9| script.
 
-The `export def GetMessage(): string` line starts with `export`, meaning that
-this function can be imported and called by other scripts. The line
-`def GetPart(...` does not start with `export`, this is a script-local
-function, it can only be used inside this script file.
+The `export def GetMessage(...` line starts with `export`, meaning that this
+function can be called by other scripts.  The line `def GetReply(...` does not
+start with `export`, this is a script-local function, it can only be used
+inside this script file.
 
-In the `export def GetMessage(): string` line you will notice the colon and
-the return type.  Vim9 functions, defined with `def`, require specifying the
-type of arguments and the return type.  That way Vim can compile the code
-efficiently.  The GetPart function defines an argument "nr" of type "number".
+Now about the script where this is imported.  In this example we use this
+layout, which works well for a plugin below the "pack" directory:
+	.../plugin/theplugin.vim
+	.../lib/getmessage.vim
 
-TODO: import/export example
+Assuming the "..." directory has been added to 'runtimepath', Vim will look
+for plugins in the "plugin" directory and source "theplugin.vim".  Vim does
+not recognize the "lib" directory, you can put any scripts there.
+
+The above script that exports GetMessage() goes in lib/getmessage.vim.  The
+GetMessage() function is used in plugin/theplugin.vim: >
+
+	vim9script
+
+	import "../lib/getmessage.vim"
+	command -nargs=1 ShowMessage echomsg getmessage.GetMessage(<f-args>)
+
+The `import` command uses a relative path, it starts with "../", which means
+to go one directory up.  For other kinds of paths see the `:import` command.
+
+How we can try out the command that the plugin provides: >
+	ShowMessage 1
+<	To 1 we say no ~
+>
+	ShowMessage 22
+<	To 22 we say maybe ~
+
+Notice that the function GetMessage() is prefixed with the imported script
+name "getmessage".  That way, for every imported function used, you know what
+script it was imported from.  If you import several scripts each of them could
+define a GetMessage() function: >
+
+	vim9script
+
+	import "../lib/getmessage.vim"
+	import "../lib/getother.vim"
+	command -nargs=1 ShowMessage echomsg getmessage.GetMessage(<f-args>)
+	command -nargs=1 ShowOther echomsg getother.GetMessage(<f-args>)
+
+If the imported script name is long or you use it in many places, you can
+shorten it by adding an "as" argument: >
+	import "../lib/getmessage.vim" as msg
+	command -nargs=1 ShowMessage echomsg msg.GetMessage(<f-args>)
+
+
+RELOADING
+
+One thing to keep in mind: the imported "lib/getmessage.vim" script will be
+sourced only once.  When it is imported a second time sourcing it will be
+skipped, since the items in it have already been created.  It does not matter
+if this import command is in another script, or in the same script that is
+sourced again.
+
+This is efficient when using a plugin, but when still developing a plugin it
+means that changing "lib/getmessage.vim" after it has been imported will have
+no effect.  You need to quit Vim and start it again. (Rationale: the items
+defined in the script could be used in a compiled function, sourcing the
+script again may break those functions).
+
 
 USING GLOBALS
 
@@ -83,8 +133,6 @@
 ==============================================================================
 *52.2*	Autoloading
 
-TODO: autoloading with import/export
-
 After splitting your large script into pieces, all the lines will still be
 loaded and executed the moment the script is used.  Every `import` loads the
 imported script to find the items defined there.  Although that is good for
@@ -92,27 +140,39 @@
 functionality is not often used.
 
 Instead of having `import` load the script immediately, it can be postponed
-until needed. >
-	import autoload "./LoadLater.vim"
+until needed.  Using the example above, only one change needs to be made in
+the plugin/theplugin.vim script: >
+	import autoload "../lib/getmessage.vim"
 
-Now you can use exported items as usual: "LoadLater.GetMonth(4)".
-However, the type will not be checked. Not even the existence of the
-GetMonth() function is checked until it is used.  You will have to decide what
-is more important for your script.  You can also add the "autoload" argument
-later, after you have checked everything works.
+Nothing in the rest of the script needs to change.  However, the types will
+not be checked.  Not even the existence of the GetMessage() function is
+checked until it is used.  You will have to decide what is more important for
+your script: fast startup or getting errors early.  You can also add the
+"autoload" argument later, after you have checked everything works.
 
-Another form is to use a script name that is not an absolute or relative
-path: >
+
+AUTOLOAD DIRECTORY
+
+Another form is to use autoload with a script name that is not an absolute or
+relative path: >
 	import autload "monthlib.vim"
 
 This will search for the script "monthlib.vim" in the autoload directories of
-'runtimepath'.  With Unix the directory often is "~/.vim/autoload".
+'runtimepath'.  With Unix one of the directories often is "~/.vim/autoload".
 
-The main advantage of this is that this script can be shared with other
+The main advantage of this is that this script can be easily shared with other
 scripts.  You do need to make sure that the script name is unique, since Vim
 will search all the "autoload" directories in 'runtimepath', and if you are
-using several plugins, these may add several directories to 'runtimepath',
-each of which might have an "autoload" directory.
+using several plugins with a plugin manager, it may add a directory to
+'runtimepath', each of which might have an "autoload" directory.
+
+Without autoload: >
+	import "monthlib.vim"
+
+Vim will search for the script "monthlib.vim" in the import directories of
+'runtimepath'.  Note that in this case adding or removing "autoload" changes
+where the script is found.  With a relative or absolute path the location does
+not change.
 
 ==============================================================================
 *52.3*	Autoloading without import/export
@@ -256,13 +316,13 @@
 Vim9 script.  For example in your .vimrc you want to initialize a plugin.  The
 best way to do this is to use `:import`.  For example: >
 
-	import Init as NiceInit from 'myNicePlugin.vim'
-	call NiceInit('today')
+	import 'myNicePlugin.vim'
+	call myNicePlugin.NiceInit('today')
 
-This finds the exported function "Init" in the Vim9 script file and makes it
-available as script-local item "NiceInit". `:import` always uses the script
-namespace, even when "s:" is not given.  If "myNicePlugin.vim" was already
-sourced it is not sourced again.
+This finds the exported function "NiceInit" in the Vim9 script file and makes
+it available as script-local item "myNicePlugin.NiceInit". `:import` always
+uses the script namespace, even when "s:" is not given.  If "myNicePlugin.vim"
+was already sourced it is not sourced again.
 
 Besides avoiding putting any items in the global namespace (where name clashes
 can cause unexpected errors), this also means the script is sourced only once,
