diff --git a/runtime/doc/autocmd.txt b/runtime/doc/autocmd.txt
index 317518ded240052389503189ef3ce6b137a14b48..d09e95f222198521eea0de58d7814f37497e74f0 100644
--- a/runtime/doc/autocmd.txt
+++ b/runtime/doc/autocmd.txt
@@ -1,4 +1,4 @@
-*autocmd.txt*   For Vim version 7.0c.  Last change: 2006 Apr 04
+*autocmd.txt*   For Vim version 7.0c.  Last change: 2006 Apr 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -506,8 +506,8 @@ FileChangedRO			Before making the first change to a read-only
 				the change was caused by an autocommand.
 				This event is triggered when making the first
 				change in a buffer or the first change after
-				'readonly' was set,
-				just before the change is applied to the text.
+				'readonly' was set, just before the change is
+				applied to the text.
 				WARNING: If the autocommand moves the cursor
 				the effect of the change is undefined.
 							*E788*
diff --git a/runtime/doc/eval.txt b/runtime/doc/eval.txt
index b830ca04bf589be9b6cf17cb25678562efe77641..040007a15aa3c096084cff37f3ad1c5d0a9f3d2d 100644
--- a/runtime/doc/eval.txt
+++ b/runtime/doc/eval.txt
@@ -1,4 +1,4 @@
-*eval.txt*      For Vim version 7.0c.  Last change: 2006 Apr 04
+*eval.txt*      For Vim version 7.0c.  Last change: 2006 Apr 06
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -819,7 +819,7 @@ Number.  Note that this doesn't recognize multi-byte encodings.
 Index zero gives the first character.  This is like it works in C.  Careful:
 text column numbers start with one!  Example, to get the character under the
 cursor: >
-	:let c = getline(line("."))[col(".") - 1]
+	:let c = getline(".")[col(".") - 1]
 
 If the length of the String is less than the index, the result is an empty
 String.  A negative index always results in an empty string (reason: backwards
@@ -4562,7 +4562,7 @@ strpart({src}, {start}[, {len}])			*strpart()*
 			strpart("abcdefg", 3)       == "defg"
 <		Note: To get the first character, {start} must be 0.  For
 		example, to get three bytes under and after the cursor: >
-			strpart(getline(line(".")), col(".") - 1, 3)
+			strpart(getline("."), col(".") - 1, 3)
 <
 strridx({haystack}, {needle} [, {start}])			*strridx()*
 		The result is a Number, which gives the byte index in
diff --git a/runtime/doc/syntax.txt b/runtime/doc/syntax.txt
index a0a5b8d5d6f88361df1d30dac4cb3006ae6d86e5..13a53973f1360ba35336ce7d983b0f1ee0842eaf 100644
--- a/runtime/doc/syntax.txt
+++ b/runtime/doc/syntax.txt
@@ -1,4 +1,4 @@
-*syntax.txt*	For Vim version 7.0c.  Last change: 2006 Apr 04
+*syntax.txt*	For Vim version 7.0c.  Last change: 2006 Apr 06
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -2581,7 +2581,7 @@ somewhere else with "P".
 
 Do you want to draw with the mouse?  Try the following: >
    :function! GetPixel()
-   :   let c = getline(line("."))[col(".") - 1]
+   :   let c = getline(".")[col(".") - 1]
    :   echo c
    :   exe "noremap <LeftMouse> <LeftMouse>r".c
    :   exe "noremap <LeftDrag>	<LeftMouse>r".c
diff --git a/runtime/doc/tags b/runtime/doc/tags
index 4134a1da1d00fb23c712c53a114871d043d7d8cd..3daf3ba4d85b3d25b22968ecdc1def312257a95d 100644
--- a/runtime/doc/tags
+++ b/runtime/doc/tags
@@ -5611,7 +5611,6 @@ hebrew	hebrew.txt	/*hebrew*
 hebrew.txt	hebrew.txt	/*hebrew.txt*
 help	various.txt	/*help*
 help-context	help.txt	/*help-context*
-help-tags	tags	1
 help-translated	various.txt	/*help-translated*
 help-xterm-window	various.txt	/*help-xterm-window*
 help.txt	help.txt	/*help.txt*
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index d24c5c2eaf0aa9814fa0585ee2a8e9e19423027a..bf7f42881e089ea4469231fc91624c4835fc3143 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.0c.  Last change: 2006 Apr 06
+*todo.txt*      For Vim version 7.0c.  Last change: 2006 Apr 07
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -30,6 +30,13 @@ be worked on, but only if you sponsor Vim development.  See |sponsor|.
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
+Handle postponed prefix with COMPOUNDPERMITFLAG or COMPOUNDFORBIDFLAG.
+    WFP_COMPPERMIT and WFP_COMPFORBID
+
+":mkspell" still takes too long in Hungarian dictionary.
+
+Use ~/tmp/hungarian*.txt to test dictionary with.
+
 New Hungarian dictionary. (Laci Nemeth)
 -   implement use of <compoptions> in .spl file:
 -   implement CHECKCOMPOUNDREP: when a compound word seems to be OK apply REP
diff --git a/runtime/doc/version7.txt b/runtime/doc/version7.txt
index 1005781616467d56e73c0a30b11619364fddc791..1cac881cf72b39ff5b52b440db84cb3808ebe736 100644
--- a/runtime/doc/version7.txt
+++ b/runtime/doc/version7.txt
@@ -1,4 +1,4 @@
-*version7.txt*  For Vim version 7.0c.  Last change: 2006 Apr 06
+*version7.txt*  For Vim version 7.0c.  Last change: 2006 Apr 07
 
 
 		  VIM REFERENCE MANUAL    by Bram Moolenaar
@@ -160,6 +160,7 @@ as <line1>.  The items can no longer be abbreviated.
 When executing a FileChangedRO autocommand it is no longer allowed to switch
 to another buffer or edit another file.  This is to prevent crashes (the event
 is triggered deep down in the code where changing buffers is not anticipated).
+It is possible to reload the buffer.
 
 ==============================================================================
 NEW FEATURES						*new-7*
@@ -951,6 +952,7 @@ sensors syntax and ftplugin file. (Nikolai Weibull)
 services syntax and ftplugin file. (Nikolai Weibull)
 setserial syntax and ftplugin file. (Nikolai Weibull)
 sieve syntax and ftplugin file. (Nikolai Weibull)
+SiSU syntax file (Ralph Amissah)
 Sive syntax file. (Nikolai Weibull)
 slp config, reg and spi syntax and ftplugin files. (Nikolai Weibull)
 SML indent file. (Saikat Guha)
@@ -2394,4 +2396,19 @@ When using the menu in the tab pages line, "New Tab" opens the new tab before
 where the click was.  Beyond the labels the new tab appears at the end instead
 of after the current tab page.
 
+Inside a mapping with an expression getchar() could not be used.
+
+When vgetc is used recursively vgetc_busy protects it from being used
+recursively.  But after a ":normal" command the protection was reset.
+
+":s/a/b/n" didn't work when 'modifiable' was off.
+
+When $VIMRUNTIME includes a multi-byte character then rgb.txt could not be
+found. (Yukihiro Nakadaira)
+
+":mkspell" didn't work correctly for non-ASCII affix flags when conversion is
+needed on the spell file.
+
+glob('/dir/\$ABC/*') didn't work.
+
  vim:tw=78:ts=8:ft=help:norl:
diff --git a/runtime/lang/menu_de_de.latin1.vim b/runtime/lang/menu_de_de.latin1.vim
index a08a41c80dddfd4f23936d70a0841730880d6c0b..3d2858182cb5f625c0a751cb66c398b9568d992d 100644
--- a/runtime/lang/menu_de_de.latin1.vim
+++ b/runtime/lang/menu_de_de.latin1.vim
@@ -1,7 +1,7 @@
 " Menu Translations:	German / Deutsch
 " Maintainer:		Georg Dahn <gorgyd@yahoo.co.uk>
 " Originally By:	Marcin Dalecki <dalecki@cs.net.pl>
-"            		Johannes Zellner <johannes@zellner.org>
+"			Johannes Zellner <johannes@zellner.org>
 " Last Change:	Sat, 11 Mar 2006 22:40:00 CEST
 " vim:set foldmethod=marker tabstop=8:
 
@@ -20,12 +20,12 @@ endif
 " {{{ FILE / DATEI
 menutrans &File				&Datei
 menutrans &Open\.\.\.<Tab>:e		&Öffnen\.\.\.<Tab>:e
-menutrans Sp&lit-Open\.\.\.<Tab>:sp	In\ geteiltem\ &Fenster\ Öffnen\.\.\.<Tab>:sp
-menutrans Open\ Tab\.\.\.<Tab>:tabnew	In\ neuem\ &Tab\ Öffnen\.\.\.<Tab>:tabnew
+menutrans Sp&lit-Open\.\.\.<Tab>:sp	In\ geteiltem\ &Fenster\ öffnen\.\.\.<Tab>:sp
+menutrans Open\ Tab\.\.\.<Tab>:tabnew	In\ neuem\ &Tab\ öffnen\.\.\.<Tab>:tabnew
 menutrans &New<Tab>:enew		&Neue\ Datei<Tab>:enew
 menutrans &Close<Tab>:close		S&chließen<Tab>:close
 menutrans &Save<Tab>:w			&Speichern<Tab>:w
-menutrans Save\ &As\.\.\.<Tab>:sav	Speichern\ &Als\.\.\.<Tab>:sav
+menutrans Save\ &As\.\.\.<Tab>:sav	Speichern\ &als\.\.\.<Tab>:sav
 menutrans &Print			&Drucken
 menutrans Sa&ve-Exit<Tab>:wqa		Speichern\ und\ Be&enden<Tab>:wqa
 menutrans E&xit<Tab>:qa			&Beenden<Tab>:qa
@@ -44,10 +44,10 @@ menutrans Rep&eat<Tab>\.		&Wiederholen<Tab>\.
 menutrans Cu&t<Tab>"+x			&Ausschneiden<Tab>"+x
 menutrans &Copy<Tab>"+y			&Kopieren<Tab>"+y
 menutrans &Paste<Tab>"+gP		Ein&fügen<Tab>"+gP
-menutrans Put\ &Before<Tab>[p		Da&vor\ Einfügen<Tab>[p
-menutrans Put\ &After<Tab>]p		Da&nach\ Einfügen<Tab>]p
-menutrans &Delete<Tab>x 		&Löschen<Tab>x
-menutrans &Select\ All<Tab>ggVG		Alles\ &Markieren<Tab>ggVG
+menutrans Put\ &Before<Tab>[p		Da&vor\ einfügen<Tab>[p
+menutrans Put\ &After<Tab>]p		Da&nach\ einfügen<Tab>]p
+menutrans &Delete<Tab>x			&Löschen<Tab>x
+menutrans &Select\ All<Tab>ggVG		Alles\ &markieren<Tab>ggVG
 menutrans &Find\.\.\.			&Suchen\.\.\.
 menutrans Find\ and\ Rep&lace\.\.\.	Suchen\ und\ &Ersetzen\.\.\.
 
@@ -55,6 +55,7 @@ menutrans Find\ and\ Rep&lace\.\.\.	Suchen\ und\ &Ersetzen\.\.\.
 " XXX &E would conflict with 'Suchen\ und\ &Ersetzen', see above
 menutrans Settings\ &Window				E&instellungen\.\.\.
 menutrans &Global\ Settings				&Globale\ Einstellungen
+menutrans Startup\ &Settings                            &Starteinstellungen
 
 menutrans Toggle\ Pattern\ &Highlight<Tab>:set\ hls!	&Hervorhebungen\ ein-\ und\ ausschalten<Tab>:set\ hls!
 menutrans Toggle\ &Ignore-case<Tab>:set\ ic!		Großschreibung\ &ignorieren\ oder\ benutzen<Tab>:set\ ic!
@@ -66,7 +67,7 @@ menutrans &Virtual\ Edit				&Virtueller\ Editier-Modus
 menutrans Never						Nie
 menutrans Block\ Selection				Block-Auswahl
 menutrans Insert\ mode					Einfüge-Modus
-menutrans Block\ and\ Insert				Block-\ und\ Einfüge-Modus
+menutrans Block\ and\ Insert				Block-Auswahl\ und\ Einfüge-Modus
 menutrans Always					Immer
 menutrans Toggle\ Insert\ &Mode<Tab>:set\ im!		Einfüge-&Modus\ ein-\ und\ ausschalten<Tab>:set\ im!
 menutrans Toggle\ Vi\ C&ompatible<Tab>:set\ cp!		Vi-Kompatibilität\ ein-\ und\ ausschalten<Tab>:set\ cp!
@@ -94,19 +95,19 @@ menutrans Toggle\ &C-indenting<Tab>:set\ cin!		&C-Einr
 " other options
 menutrans &Shiftwidth					&Schiebeweite
 menutrans Soft\ &Tabstop				&Tabulator
-menutrans Te&xt\ Width\.\.\.				Te&xt\ Breite\.\.\.
-menutrans &File\ Format\.\.\.				&Datei\ Format\.\.\.
+menutrans Te&xt\ Width\.\.\.				Te&xtbreite\.\.\.
+menutrans &File\ Format\.\.\.				&Dateiformat\.\.\.
 menutrans C&olor\ Scheme				F&arbschema\.\.\.
-menutrans &Keymap					&Tastatur-Belegung
+menutrans &Keymap					&Tastaturbelegung
 " }}} EDIT / EDITIEREN
 
 " {{{  TOOLS / WERKZEUGE
 if has("spell")
     menutrans &Spelling					&Rechtschreibung
-    menutrans &Spell\ Check\ On				&Rechtschreibprüfung\ An
-    menutrans Spell\ Check\ &Off			Rechtschreibprüfung\ &Aus
-    menutrans To\ &Next\ error<Tab>]s			Zum\ &Nächsten\ Fehler<Tab>]s
-    menutrans To\ &Previous\ error<Tab>[s		Zum\ &Letzten\ Fehler<Tab>[s
+    menutrans &Spell\ Check\ On				&Rechtschreibprüfung\ an
+    menutrans Spell\ Check\ &Off			Rechtschreibprüfung\ &aus
+    menutrans To\ &Next\ error<Tab>]s			Zum\ &nächsten\ Fehler<Tab>]s
+    menutrans To\ &Previous\ error<Tab>[s		Zum\ &vorherigen\ Fehler<Tab>[s
     menutrans Suggest\ &Corrections<Tab>z=		&Korrekturvorschläge<Tab>z=
     menutrans &Repeat\ correction<Tab>:spellrepall	&Wiederhole\ Korrektur<Tab>:spellrepall
     menutrans Set\ language\ to\ "en"			Verwende\ Wörterbuch\ "en"
@@ -115,7 +116,7 @@ if has("spell")
     menutrans Set\ language\ to\ "en_gb"		Verwende\ Wörterbuch\ "en_gb"
     menutrans Set\ language\ to\ "en_nz"		Verwende\ Wörterbuch\ "en_nz"
     menutrans Set\ language\ to\ "en_us"		Verwende\ Wörterbuch\ "en_us"
-    menutrans Set\ language\ to\ "de"   		Verwende\ Wörterbuch\ "de"
+    menutrans Set\ language\ to\ "de"			Verwende\ Wörterbuch\ "de"
     menutrans &Find\ More\ Languages			&Suche\ nach\ Wörterbüchern
 endif
 if has("folding")
@@ -138,29 +139,29 @@ if has("folding")
   menutrans Ma&rker					Ma&rkierungen
   " create and delete folds
   " TODO accelerators
-  menutrans Create\ &Fold<Tab>zf			Faltung\ Erzeugen<Tab>zf
-  menutrans &Delete\ Fold<Tab>zd			Faltung\ Löschen<Tab>zd
-  menutrans Delete\ &All\ Folds<Tab>zD			Alle\ Faltungen\ Löschen<Tab>zD
+  menutrans Create\ &Fold<Tab>zf			Faltung\ erzeugen<Tab>zf
+  menutrans &Delete\ Fold<Tab>zd			Faltung\ löschen<Tab>zd
+  menutrans Delete\ &All\ Folds<Tab>zD			Alle\ Faltungen\ löschen<Tab>zD
   " moving around in folds
-  menutrans Fold\ column\ &width			&Breite\ der\ Faltungs-Spalte
+  menutrans Fold\ column\ &width			&Breite\ der\ Faltungsspalte
 endif  " has folding
 
 if has("diff")
   menutrans &Diff					&Differenz
   menutrans &Update					&Aktualisieren
-  menutrans &Get\ Block					Block\ &Einfügen
-  menutrans &Put\ Block					Block\ &Übertragen
+  menutrans &Get\ Block					Block\ &einfügen
+  menutrans &Put\ Block					Block\ &übertragen
 endif
 
 menutrans &Tools					&Werkzeuge
 menutrans &Jump\ to\ this\ tag<Tab>g^]			&Springe\ zum\ Tag<Tab>g^]
-menutrans Jump\ &back<Tab>^T				Springe\ &Zurück<Tab>^T
-menutrans Build\ &Tags\ File				Erstelle\ &Tags\ Datei
+menutrans Jump\ &back<Tab>^T				Springe\ &zurück<Tab>^T
+menutrans Build\ &Tags\ File				Erstelle\ &Tag-Datei
 menutrans &Make<Tab>:make				&Erstellen<Tab>:make
-menutrans &List\ Errors<Tab>:cl				&Fehler\ Anzeigen<Tab>:cl
-menutrans L&ist\ Messages<Tab>:cl!			&Hinweise\ Anzeigen<Tab>:cl!
-menutrans &Next\ Error<Tab>:cn				Zum\ &Nächsten\ Fehler<Tab>:cn
-menutrans &Previous\ Error<Tab>:cp			Zum\ &Vorherigen\ Fehler<Tab>:cp
+menutrans &List\ Errors<Tab>:cl				&Fehler\ anzeigen<Tab>:cl
+menutrans L&ist\ Messages<Tab>:cl!			&Hinweise\ anzeigen<Tab>:cl!
+menutrans &Next\ Error<Tab>:cn				Zum\ &nächsten\ Fehler<Tab>:cn
+menutrans &Previous\ Error<Tab>:cp			Zum\ &vorherigen\ Fehler<Tab>:cp
 menutrans &Older\ List<Tab>:cold			&Ältere\ Liste<Tab>:cold
 menutrans N&ewer\ List<Tab>:cnew			&Neuere\ Liste<Tab>:cnew
 
@@ -178,8 +179,8 @@ menutrans Conve&rt\ back<Tab>:%!xxd\ -r			Zur
 " {{{ SYNTAX / SYNTAX
 menutrans &Syntax				&Syntax
 menutrans &Show\ filetypes\ in\ menu		Dateitypen\ an&zeigen
-menutrans Set\ '&syntax'\ only			Nur\ '&syntax'\ Setzen
-menutrans Set\ '&filetype'\ too			Auch\ '&filetype'\ Setzen
+menutrans Set\ '&syntax'\ only			Nur\ '&syntax'\ setzen
+menutrans Set\ '&filetype'\ too			Auch\ '&filetype'\ setzen
 menutrans &Off					&Aus
 menutrans &Manual				&Manuell
 menutrans A&utomatic				A&utomatisch
@@ -202,11 +203,11 @@ menutrans &Previous					&Vorheriger
 menutrans &Window			&Ansicht
 menutrans &New<Tab>^Wn			&Neu<Tab>^Wn
 menutrans S&plit<Tab>^Ws		Aufs&palten<Tab>^Ws
-menutrans Split\ &Vertically<Tab>^Wv	&Vertikal\ Aufspalten<Tab>^Wv
+menutrans Split\ &Vertically<Tab>^Wv	&Vertikal\ aufspalten<Tab>^Wv
 menutrans Split\ File\ E&xplorer	Ver&zeichnis
 menutrans Sp&lit\ To\ #<Tab>^W^^	Aufspa&lten\ in\ #<Tab>^W^^
 menutrans &Close<Tab>^Wc		&Schließen<Tab>^Wc
-menutrans Close\ &Other(s)<Tab>^Wo	&Andere\ Schließen<Tab>^Wo
+menutrans Close\ &Other(s)<Tab>^Wo	&Andere\ schließen<Tab>^Wo
 menutrans Ne&xt<Tab>^Ww			N&ächstes<Tab>^Ww
 menutrans P&revious<Tab>^WW		Vor&heriges<Tab>^WW
 menutrans &Equal\ Size<Tab>^W=		&Gleiche\ Höhen<Tab>^W=
@@ -259,9 +260,9 @@ if has("toolbar")
     delfun Do_toolbar_tmenu
   endif
   fun Do_toolbar_tmenu()
-    tmenu ToolBar.Open		Datei Öffnen
-    tmenu ToolBar.Save		Datei Speichern
-    tmenu ToolBar.SaveAll	Alle Dateien Speichern
+    tmenu ToolBar.Open		Datei öffnen
+    tmenu ToolBar.Save		Datei speichern
+    tmenu ToolBar.SaveAll	Alle Dateien speichern
     tmenu ToolBar.Print		Drucken
     tmenu ToolBar.Undo		Zurück
     tmenu ToolBar.Redo		Wiederholen
@@ -269,25 +270,25 @@ if has("toolbar")
     tmenu ToolBar.Copy		Kopieren
     tmenu ToolBar.Paste		Einfügen
     tmenu ToolBar.Find		Suchen...
-    tmenu ToolBar.FindNext	Suche Nächsten
-    tmenu ToolBar.FindPrev	Suche Vorherigen
+    tmenu ToolBar.FindNext	Suche nächsten
+    tmenu ToolBar.FindPrev	Suche vorherigen
     tmenu ToolBar.Replace	Suchen und Ersetzen...
     if 0	" disabled; These are in the Windows menu
       tmenu ToolBar.New		Neue Ansicht
-      tmenu ToolBar.WinSplit	Ansicht Aufspalten
-      tmenu ToolBar.WinMax	Ansicht Maximale Höhen
-      tmenu ToolBar.WinMin	Ansicht Minimale Höhen
-      tmenu ToolBar.WinClose	Ansicht Schließen
+      tmenu ToolBar.WinSplit	Ansicht aufspalten
+      tmenu ToolBar.WinMax	Ansicht maximale Höhen
+      tmenu ToolBar.WinMin	Ansicht minimale Höhen
+      tmenu ToolBar.WinClose	Ansicht schließen
     endif
-    tmenu ToolBar.LoadSesn	Sitzung Laden
-    tmenu ToolBar.SaveSesn	Sitzung Speichern
-    tmenu ToolBar.RunScript	Vim-Skript Ausführen
+    tmenu ToolBar.LoadSesn	Sitzung laden
+    tmenu ToolBar.SaveSesn	Sitzung speichern
+    tmenu ToolBar.RunScript	Vim-Skript ausführen
     tmenu ToolBar.Make		Erstellen
-    tmenu ToolBar.Shell		Shell Starten
-    tmenu ToolBar.RunCtags	Erstelle Tags Datei
+    tmenu ToolBar.Shell		Shell starten
+    tmenu ToolBar.RunCtags	Erstelle Tag-Datei
     tmenu ToolBar.TagJump	Springe zum Tag
     tmenu ToolBar.Help		Hilfe!
-    tmenu ToolBar.FindHelp	Hilfe Durchsuchen...
+    tmenu ToolBar.FindHelp	Hilfe durchsuchen...
   endfun
 endif
 " }}} TOOLBAR
diff --git a/src/ex_cmds.c b/src/ex_cmds.c
index bf03721786f69b656fb66f7d3c26144c48cdd35d..790b30ef1f24f84ee3422017312b0bfa59f6fe34 100644
--- a/src/ex_cmds.c
+++ b/src/ex_cmds.c
@@ -4287,6 +4287,13 @@ do_sub(eap)
     if (eap->skip)	    /* not executing commands, only parsing */
 	return;
 
+    if (!do_count && !curbuf->b_p_ma)
+    {
+	/* Substitusion is not allowed in non-'modifiable' buffer */
+	EMSG(_(e_modifiable));
+	return;
+    }
+
     if (search_regcomp(pat, RE_SUBST, which_pat, SEARCH_HIS, &regmatch) == FAIL)
     {
 	if (do_error)
diff --git a/src/ex_cmds.h b/src/ex_cmds.h
index 32e079d3b656c567a9b11abe4eba54f955af0118..278a096ff52a6e47e1b9cbf686027ee69189a93d 100644
--- a/src/ex_cmds.h
+++ b/src/ex_cmds.h
@@ -768,7 +768,7 @@ EX(CMD_rubyfile,	"rubyfile",	ex_rubyfile,
 EX(CMD_rviminfo,	"rviminfo",	ex_viminfo,
 			BANG|FILE1|TRLBAR|CMDWIN),
 EX(CMD_substitute,	"substitute",	do_sub,
-			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
+			RANGE|WHOLEFOLD|EXTRA|CMDWIN),
 EX(CMD_sNext,		"sNext",	ex_previous,
 			EXTRA|RANGE|NOTADR|COUNT|BANG|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_sargument,	"sargument",	ex_argument,
@@ -828,7 +828,7 @@ EX(CMD_sleep,		"sleep",	ex_sleep,
 EX(CMD_slast,		"slast",	ex_last,
 			EXTRA|BANG|EDITCMD|ARGOPT|TRLBAR),
 EX(CMD_smagic,		"smagic",	ex_submagic,
-			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
+			RANGE|WHOLEFOLD|EXTRA|CMDWIN),
 EX(CMD_smap,		"smap",		ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
 EX(CMD_smapclear,	"smapclear",	ex_mapclear,
@@ -840,7 +840,7 @@ EX(CMD_snext,		"snext",	ex_next,
 EX(CMD_sniff,		"sniff",	ex_sniff,
 			EXTRA|TRLBAR),
 EX(CMD_snomagic,	"snomagic",	ex_submagic,
-			RANGE|WHOLEFOLD|EXTRA|CMDWIN|MODIFY),
+			RANGE|WHOLEFOLD|EXTRA|CMDWIN),
 EX(CMD_snoremap,	"snoremap",	ex_map,
 			EXTRA|TRLBAR|NOTRLCOM|USECTRLV|CMDWIN),
 EX(CMD_snoremenu,	"snoremenu",	ex_menu,
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index ab616bb729fc35124dfbfa254d7d867164b544a2..3d6e217d5171ee1cdadbdc673eb36c572bacad87 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -1488,7 +1488,7 @@ check_changed_any(hidden)
 	 * may cause a redraw.  But wait_return() is a no-op when vgetc()
 	 * is busy (Quit used from window menu), then make sure we don't
 	 * cause a scroll up. */
-	if (vgetc_busy)
+	if (vgetc_busy > 0)
 	{
 	    msg_row = cmdline_row;
 	    msg_col = 0;
@@ -3696,20 +3696,20 @@ get_locale_val(what)
      * redefined and it doesn't use the arguments. */
     loc = setlocale(what, NULL);
 
-# if defined(__BORLANDC__)
+# ifdef WIN32
     if (loc != NULL)
     {
 	char_u	*p;
 
-	/* Borland returns something like "LC_CTYPE=<name>\n"
-	 * Let's try to fix that bug here... */
+	/* setocale() returns something like "LC_COLLATE=<name>;LC_..." when
+	 * one of the values (e.g., LC_CTYPE) differs. */
 	p = vim_strchr(loc, '=');
 	if (p != NULL)
 	{
 	    loc = ++p;
 	    while (*p != NUL)	/* remove trailing newline */
 	    {
-		if (*p < ' ')
+		if (*p < ' ' || *p == ';')
 		{
 		    *p = NUL;
 		    break;
@@ -3778,8 +3778,10 @@ get_mess_lang()
     p = (char_u *)get_locale_val(LC_MESSAGES);
 #  else
     /* This is necessary for Win32, where LC_MESSAGES is not defined and $LANG
-     * may be set to the LCID number. */
-    p = (char_u *)get_locale_val(LC_ALL);
+     * may be set to the LCID number.  LC_COLLATE is the best guess, LC_TIME
+     * and LC_MONETARY may be set differently for a Japanese working in the
+     * US. */
+    p = (char_u *)get_locale_val(LC_COLLATE);
 #  endif
 # else
     p = mch_getenv((char_u *)"LC_ALL");
diff --git a/src/hardcopy.c b/src/hardcopy.c
index e6c89a6168dc8426ae1dcaf84bc740e3fc24df09..2b5c70e2317847b784a62dc70eadf8ee27fbd482 100644
--- a/src/hardcopy.c
+++ b/src/hardcopy.c
@@ -2474,7 +2474,7 @@ mch_print_init(psettings, jobname, forceit)
     double      bottom;
 #ifdef FEAT_MBYTE
     int         props;
-    int         cmap;
+    int         cmap = 0;
     char_u	*p_encoding;
     struct prt_ps_encoding_S *p_mbenc;
     struct prt_ps_encoding_S *p_mbenc_first;
diff --git a/src/version.h b/src/version.h
index e3bccb55c2813f1d0c4954c7a0a3bbf215a662fe..993e7475c5ae8ab1cc0b4aa00a5a4056ec8c3cb7 100644
--- a/src/version.h
+++ b/src/version.h
@@ -35,6 +35,6 @@
  */
 #define VIM_VERSION_NODOT	"vim70c"
 #define VIM_VERSION_SHORT	"7.0c"
-#define VIM_VERSION_MEDIUM	"7.0c11 BETA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0c11 BETA (2006 Apr 6)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0c11 BETA (2006 Apr 6, compiled "
+#define VIM_VERSION_MEDIUM	"7.0c12 BETA"
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0c12 BETA (2006 Apr 7)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0c12 BETA (2006 Apr 7, compiled "