diff --git a/runtime/autoload/ada.vim b/runtime/autoload/ada.vim
index 8f525f48661962d65456aaf1dbc6a35683a7c16a..1f8234a575b7522b1cba31324566572ad08e9d6d 100644
--- a/runtime/autoload/ada.vim
+++ b/runtime/autoload/ada.vim
@@ -29,6 +29,8 @@
 if version < 700
    finish
 endif 
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Section: Constants {{{1
 "
@@ -619,6 +621,9 @@ lockvar  g:ada#Comment
 lockvar! g:ada#Keywords
 lockvar! g:ada#Ctags_Kinds
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/compiler/cs.vim b/runtime/compiler/cs.vim
index 7ba0b609fc913138d62f016369eabcd003bfd8d7..4cc17846789fd02b5f7186fabf8d61aa172af9cc 100644
--- a/runtime/compiler/cs.vim
+++ b/runtime/compiler/cs.vim
@@ -2,12 +2,14 @@
 " Compiler:	Microsoft Visual Studio C#
 " Maintainer:	Zhou YiChao (broken.zhou@gmail.com)
 " Previous Maintainer:	Joseph H. Yao (hyao@sina.com)
-" Last Change:	2011 Apr 21
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "cs"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat+=%f(%l\\,%v):\ %t%*[^:]:\ %m,
             \%tarning%*[^:]:\ %m
 
 CompilerSet makeprg=csc\ %
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/decada.vim b/runtime/compiler/decada.vim
index 8e267ece1399257996690c24a5cdc28a04b34c73..4670bbd9145d36cdbb430bf4cd36c2fad4f54691 100644
--- a/runtime/compiler/decada.vim
+++ b/runtime/compiler/decada.vim
@@ -15,6 +15,9 @@
 "    Help Page: compiler-decada
 "------------------------------------------------------------------------------
 
+let s:keepcpo= &cpo
+set cpo&vim
+
 if (exists("current_compiler")	    &&
    \ current_compiler == "decada")  ||
    \ version < 700
@@ -44,6 +47,9 @@ endif
 execute "CompilerSet makeprg="     . escape (g:decada.Make_Command, ' ')
 execute "CompilerSet errorformat=" . escape (g:decada.Error_Format, ' ')
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/compiler/g95.vim b/runtime/compiler/g95.vim
index af8f05c8a62c9e6abca9e469feda4fd46c7a39bf..ecb3212cbe6736e66418b9e87cd076087cf09dc7 100644
--- a/runtime/compiler/g95.vim
+++ b/runtime/compiler/g95.vim
@@ -1,7 +1,7 @@
 " Compiler: G95
 " Maintainer: H Xu <xuhdev@gmail.com>
 " Version: 0.1.3
-" Last Change: 2011 Apr 01
+" Last Change: 2012 Apr 30
 " Homepage: http://www.vim.org/scripts/script.php?script_id=3492
 "           https://bitbucket.org/xuhdev/compiler-g95.vim
 " License: Same as Vim
@@ -10,6 +10,8 @@ if exists('current_compiler')
     finish
 endif
 let current_compiler = 'g95'
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -21,3 +23,6 @@ CompilerSet errorformat=
             \%-Z%trror:\ %m,
             \%-Z%tarning\ (%n):\ %m,
             \%-C%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/gfortran.vim b/runtime/compiler/gfortran.vim
index 898026e3586895a7d367ca2805f51ce388af3885..1e4e5cf4f4956ede79ea19edf9795a0898c5a768 100644
--- a/runtime/compiler/gfortran.vim
+++ b/runtime/compiler/gfortran.vim
@@ -1,7 +1,7 @@
 " Compiler: GNU Fortran Compiler
 " Maintainer: H Xu <xuhdev@gmail.com>
 " Version: 0.1.3
-" Last Change: 19 March 2011
+" Last Change: 2012 Apr 30
 " Homepage: http://www.vim.org/scripts/script.php?script_id=3496
 "           https://bitbucket.org/xuhdev/compiler-gfortran.vim
 " License: Same as Vim
@@ -10,6 +10,8 @@ if exists('current_compiler')
     finish
 endif
 let current_compiler = 'gfortran'
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -20,3 +22,6 @@ CompilerSet errorformat=
             \%-Z%trror:\ %m,
             \%-Z%tarning:\ %m,
             \%-C%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/gnat.vim b/runtime/compiler/gnat.vim
index d7ec55b97dd1c78ed9085bb4125aed3301384b1e..3ad1eb4e3f7bb53f193d5f02dc6dab3e53e13685 100644
--- a/runtime/compiler/gnat.vim
+++ b/runtime/compiler/gnat.vim
@@ -17,11 +17,11 @@
 "    Help Page: compiler-gnat
 "------------------------------------------------------------------------------
 
-if (exists("current_compiler")	    &&
-   \ current_compiler == "gnat")    ||
-   \ version < 700
+if (exists("current_compiler")&& current_compiler == "gnat") || version < 700
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let current_compiler = "gnat"
 
@@ -62,6 +62,9 @@ endif
 execute "CompilerSet makeprg="     . escape (g:gnat.Get_Command('Make'), ' ')
 execute "CompilerSet errorformat=" . escape (g:gnat.Error_Format, ' ')
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/compiler/hp_acc.vim b/runtime/compiler/hp_acc.vim
index 685bd5b13610e23cbd72182b6445c1b76da568e4..15d5ce5f190c8e571cd9b691ac94b6a476b546ed 100644
--- a/runtime/compiler/hp_acc.vim
+++ b/runtime/compiler/hp_acc.vim
@@ -2,7 +2,7 @@
 " Compiler:	HP aCC
 " Maintainer:	Matthias Ulrich <matthias-ulrich@web.de>
 " URL:          http://www.subhome.de/vim/hp_acc.vim
-" Last Change:	2005 Nov 19
+" Last Change:	2012 Apr 30
 "
 "  aCC --version says: "HP ANSI C++ B3910B A.03.13"
 "  This compiler has been tested on:
@@ -19,6 +19,8 @@ if exists("current_compiler")
   finish
 endif
 let current_compiler = "hp_acc"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -30,4 +32,7 @@ CompilerSet errorformat=%A%trror\ %n\:\ \"%f\"\\,\ line\ %l\ \#\ %m,
          \%Z\ \ \ \ %p^%.%#,
          \%-C%.%#
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8:sw=4:cindent
diff --git a/runtime/compiler/ifort.vim b/runtime/compiler/ifort.vim
index 04763f992346aaed8a7269fdc4f19bc71146f2c7..3a60d0cd12a03403c7070adfdf84893307878c16 100644
--- a/runtime/compiler/ifort.vim
+++ b/runtime/compiler/ifort.vim
@@ -1,7 +1,7 @@
 " Compiler: Intel Fortran Compiler
 " Maintainer: H Xu <xuhdev@gmail.com>
 " Version: 0.1.1
-" Last Change: 19 March 2011
+" Last Change: 2012 Apr 30
 " Homepage: http://www.vim.org/scripts/script.php?script_id=3497
 "           https://bitbucket.org/xuhdev/compiler-ifort.vim
 " License: Same as Vim
@@ -10,6 +10,8 @@ if exists('current_compiler')
     finish
 endif
 let current_compiler = 'ifort'
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -20,3 +22,6 @@ CompilerSet errorformat=
             \%A%f(%l):\ %tarning\ \#%n:\ %m,
             \%-Z%p^,
             \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/intel.vim b/runtime/compiler/intel.vim
index 918382646ee0a23950892c1f84469854bde4b5c0..254d13b6d8456c8d9313b4c4a2ebd3e92bc0b331 100644
--- a/runtime/compiler/intel.vim
+++ b/runtime/compiler/intel.vim
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:     Intel C++ 7.1
 " Maintainer:   David Harrison <david_jr@users.sourceforge.net>
-" Last Change:  2004 May 16
+" Last Change:  2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "intel"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%E%f(%l):\ error:\ %m,
 		    \%-Z\ \ %p^,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/irix5_c.vim b/runtime/compiler/irix5_c.vim
index 87bb9e11d968aa3f7864cc59065b509362da00c5..f440e74f05d044794dcb8da1417b466ba2511789 100644
--- a/runtime/compiler/irix5_c.vim
+++ b/runtime/compiler/irix5_c.vim
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 5.3 cc
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "irix5_c"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=\%Ecfe:\ Error:\ %f\\,\ line\ %l:\ %m,
 		     \%-Z\ %p^,
 		     \-G\\s%#,
 		     \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/irix5_cpp.vim b/runtime/compiler/irix5_cpp.vim
index f5057682c3338779e8dd06702c204f0a23e0119b..0112dc1cbc93e7355a36a0d56cfa234bc1934dc2 100644
--- a/runtime/compiler/irix5_cpp.vim
+++ b/runtime/compiler/irix5_cpp.vim
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 5.3 CC or NCC
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "irix5_cpp"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%E\"%f\"\\,\ line\ %l:\ error(%n):\ ,
 		      \%-Z\ \ %p%^,
 		      \%+C\ %\\{10}%.%#,
 		      \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/mips_c.vim b/runtime/compiler/mips_c.vim
index b57eac0234fddb7ae660a9d361ae0e373e6202d3..a0ebfe7ba2f483160f099896db0b84c37f3089a5 100644
--- a/runtime/compiler/mips_c.vim
+++ b/runtime/compiler/mips_c.vim
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 6.5 MIPS C (cc)
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mips_c"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
 		    \%-Z\ \ %p^,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/mipspro_c89.vim b/runtime/compiler/mipspro_c89.vim
index 258a80043ff701f43a7fc8c5c7a0500f21eb3ab5..20eb70d3fe1d0ede19b31489cb00209529cc439f 100644
--- a/runtime/compiler/mipspro_c89.vim
+++ b/runtime/compiler/mipspro_c89.vim
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 6.5 MIPSPro C (c89)
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mipspro_c89"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -20,3 +22,6 @@ CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
 		    \%+C\ \ %m,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/mipspro_cpp.vim b/runtime/compiler/mipspro_cpp.vim
index 1f6074a10318b457cf09ce51736042cdd9226866..2f43af8455c498239f16fed5ac26e1e67ffa038c 100644
--- a/runtime/compiler/mipspro_cpp.vim
+++ b/runtime/compiler/mipspro_cpp.vim
@@ -1,12 +1,14 @@
 " Vim compiler file
 " Compiler:	SGI IRIX 6.5 MIPSPro C++ (CC)
 " Maintainer:	David Harrison <david_jr@users.sourceforge.net>
-" Last Change:	2004 Mar 27
+" Last Change:	2012 Apr 30
 
 if exists("current_compiler")
   finish
 endif
 let current_compiler = "mipspro_cpp"
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -19,3 +21,6 @@ CompilerSet errorformat=%Ecc\-%n\ %.%#:\ ERROR\ File\ =\ %f\%\\,\ Line\ =\ %l,
 		    \%-Z\ \ %p^,
 		    \%-G\\s%#,
 		    \%-G%.%#
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/compiler/tex.vim b/runtime/compiler/tex.vim
index 5828a91ab91c66820d91969906ba9e9f972d9ac5..e43be8dbd637bc2e6787e8b4df40976c72e936cb 100644
--- a/runtime/compiler/tex.vim
+++ b/runtime/compiler/tex.vim
@@ -1,11 +1,13 @@
 " Vim compiler file
 " Compiler:     TeX
 " Maintainer:   Artem Chuprina <ran@ran.pp.ru>
-" Last Change:  2004 Mar 27
+" Last Change:  2012 Apr 30
 
 if exists("current_compiler")
 	finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 if exists(":CompilerSet") != 2		" older Vim always used :setlocal
   command -nargs=* CompilerSet setlocal <args>
@@ -30,9 +32,6 @@ else
 	let current_compiler = 'make'
 endif
 
-let s:cpo_save = &cpo
-set cpo-=C
-
 " Value errorformat are taken from vim help, see :help errorformat-LaTeX, with
 " addition from Srinath Avadhanula <srinath@fastmail.fm>
 CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m,
@@ -64,5 +63,5 @@ CompilerSet errorformat=%E!\ LaTeX\ %trror:\ %m,
 	\%+Q%*[^()])%r,
 	\%+Q[%\\d%*[^()])%r
 
-let &cpo = s:cpo_save
-unlet s:cpo_save
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/doc/options.txt b/runtime/doc/options.txt
index 1080431c2c4b80479445700fb26267d05ebfc60d..b5360edb332b38d396144383b9f2bb7ae45d457d 100644
--- a/runtime/doc/options.txt
+++ b/runtime/doc/options.txt
@@ -1,4 +1,4 @@
-*options.txt*	For Vim version 7.3.  Last change: 2012 Apr 26
+*options.txt*	For Vim version 7.3.  Last change: 2012 Apr 28
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -7119,6 +7119,8 @@ A jump table for the options with a short description can be found at |Q_op|.
 	the file should contain words with similar meaning, separated by
 	non-keyword characters (white space is preferred).  Maximum line
 	length is 510 bytes.
+	To obtain a file to be used here, check out this ftp site:
+	ftp://ftp.ox.ac.uk/pub/wordlists/  First get the README file.
 	To include a comma in a file name precede it with a backslash.  Spaces
 	after a comma are ignored, otherwise spaces are included in the file
 	name.  See |option-backslash| about using backslashes.
diff --git a/runtime/doc/todo.txt b/runtime/doc/todo.txt
index cdd74fbc47d2b78ab68958be962c9f1ee6767abd..d1df4cb277e9433815a2d7957d324023e4ecd2ff 100644
--- a/runtime/doc/todo.txt
+++ b/runtime/doc/todo.txt
@@ -1,4 +1,4 @@
-*todo.txt*      For Vim version 7.3.  Last change: 2012 Apr 26
+*todo.txt*      For Vim version 7.3.  Last change: 2012 Apr 30
 
 
 		  VIM REFERENCE MANUAL	  by Bram Moolenaar
@@ -34,8 +34,6 @@ not be repeated below, unless there is extra information.
 							*known-bugs*
 -------------------- Known bugs and current work -----------------------
 
-Go through list of maintainers that didn't respond. (Thilo Six, Mar 19)
-
 Go through more coverity reports.
 
 Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
@@ -43,11 +41,6 @@ Discussion about canonicalization of Hebrew. (Ron Aaron, 2011 April 10)
 Stack trace of crash: http://vpaste.net/GBt9S
 (Alexandre Provencio)
 
-Patch for IBM z/OS makefile. (Stephen Bovy, 2012 Apr 26)
-
-Test 77 fails if cksum uses tabs instead of spaces. (Michael Soyka, 2012 Apr
-25)
-
 Once syntax and other runtime files have been fixed: add "set cp" to
 check.vim.  Use a function to run both with 'cp' and 'nocp'.
 
@@ -63,10 +56,12 @@ Stocker, 2012 Jan 5)
 
 Patch for crash involving curwin->w_s. (Christian Brabandt, 2012 Apr 20)
 What is the cause?  Leaks memory?  Other solution?
-More debug info Apr 26.
+More debug info Apr 26.  Patch with proper fix Apr 26.  Update 28 Apr.
 
 Issue 54: document behavior of -complete, also expands arg.
 
+Cursor on wrong line after ":copen". (John Beckett, 2012 Apr 30)
+
 Syntax update problem in one buffer opened in two windows, bottom window is
 not correctly updated. (Paul Harris, 2012 Feb 27)
 
@@ -86,6 +81,8 @@ When running Vim in silent ex mode, an existing swapfile causes Vim to wait
 for a user action without a prompt. (Maarten Billemont, 2012 Feb 3)
 Do give the prompt? Quit with an error?
 
+Patch for undofile(). (Christian Brabandt, 2012 Apr 27)
+
 Patch for: (Christian Brabandt, 2011 Aug 22)
 -   Make it possible to enter "r<C-E>" and "r<C-Y>" (get character from line
     below/above).
@@ -94,6 +91,9 @@ Patch for: (Christian Brabandt, 2011 Aug 24, updated patch)
 8   ":sign unplace * file={filename}" should work.  Also: ":sign unplace *
     buffer={bufnr}".  So one can remove all signs for one file/buffer.
 
+Patch for auto copy selecting to + register. (by Christian Brabant, in email
+from Sergey Vakulenko, 2012 Apr 27)
+
 Patch to add "onselected" callback for completion. (Taro Muraoka, 2011 Sep 24)
 Another for CompleteFuncOk. (Florian Klein, 2012 Jan 31)
 Name it "CompleteFuncDone".
@@ -284,6 +284,10 @@ When setting a local option value from the global value, add a script ID that
 indicates this, so that ":verbose set" can give a hint.  Check with options in
 the help file.
 
+Patch for IBM z/OS makefile. (Stephen Bovy, 2012 Apr 26)
+Patch for configure (Stephen Bovy, 2012 Apr 28)
+Updates later.
+
 After patch 7.3.097 still get E15. (Yukihiro Nakadaira, 2011 Jan 18)
 Also for another example (ZyX, 2011 Jan 24)
 
diff --git a/runtime/ftplugin/abaqus.vim b/runtime/ftplugin/abaqus.vim
index cbebcbfa48f1d1661270ab7304d18e139903bc8a..b263d0c3189685c2dea440fd554108e15b986b4a 100644
--- a/runtime/ftplugin/abaqus.vim
+++ b/runtime/ftplugin/abaqus.vim
@@ -1,7 +1,7 @@
 " Vim filetype plugin file
 " Language:     Abaqus finite element input file (www.abaqus.com)
 " Maintainer:   Carl Osterwisch <osterwischc@asme.org>
-" Last Change:  2012 Mar 11
+" Last Change:  2012 Apr 30
 
 " Only do this when not done yet for this buffer
 if exists("b:did_ftplugin") | finish | endif
@@ -51,7 +51,7 @@ if has("gui_win32") && !exists("b:browsefilter")
     \ "Abaqus Results (*.dat)\t*.dat\n" .
     \ "Abaqus Messages (*.pre *.msg *.sta)\t*.pre;*.msg;*.sta\n" .
     \ "All Files (*.*)\t*.*\n"
-    let b:undo_ftplugin .= "|unlet b:browsefilter"
+    let b:undo_ftplugin .= "|unlet! b:browsefilter"
 endif
 
 " Define patterns for the matchit plugin
@@ -62,7 +62,7 @@ if exists("loaded_matchit") && !exists("b:match_words")
     \ '\*assembly:\*end\s*assembly,' .
     \ '\*instance:\*end\s*instance,' .
     \ '\*step:\*end\s*step'
-    let b:undo_ftplugin .= "|unlet b:match_ignorecase b:match_words"
+    let b:undo_ftplugin .= "|unlet! b:match_ignorecase b:match_words"
 endif
 
 " Define keys used to move [count] keywords backward or forward.
@@ -85,6 +85,13 @@ endfunction
 let b:undo_ftplugin .= "|unmap <buffer> [[|unmap <buffer> ]]"
     \ . "|unmap <buffer> <LocalLeader><LocalLeader>"
 
+" Undo must be done in nocompatible mode for <LocalLeader>.
+let b:undo_ftplugin = "let s:cpo_save = &cpoptions|"
+    \ . "set cpoptions&vim|"
+    \ . b:undo_ftplugin
+    \ . "|let &cpoptions = s:cpo_save"
+    \ . "|unlet s:cpo_save"
+
 " Restore saved compatibility options
 let &cpoptions = s:cpo_save
 unlet s:cpo_save
diff --git a/runtime/ftplugin/php.vim b/runtime/ftplugin/php.vim
index 93de5b90f45168b3722602df9acda0e1cb167730..a2f8b4d8d30924cfa02b4682f2b737c3489a0505 100644
--- a/runtime/ftplugin/php.vim
+++ b/runtime/ftplugin/php.vim
@@ -8,8 +8,8 @@ if exists("b:did_ftplugin") | finish | endif
 
 " Make sure the continuation lines below do not cause problems in
 " compatibility mode.
-let s:save_cpo = &cpo
-set cpo-=C
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Define some defaults in case the included ftplugins don't set them.
 let s:undo_ftplugin = ""
@@ -79,5 +79,5 @@ let b:undo_ftplugin = "setlocal commentstring< include< omnifunc<" .
 	    \	      s:undo_ftplugin
 
 " Restore the saved compatibility options.
-let &cpo = s:save_cpo
-unlet s:save_cpo
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/ftplugin/python.vim b/runtime/ftplugin/python.vim
index e7c6d6b01e1f39c66d98327331739a294baa7356..2b091a1745f45edaefca4094d44aa03c44e5947d 100644
--- a/runtime/ftplugin/python.vim
+++ b/runtime/ftplugin/python.vim
@@ -5,6 +5,8 @@
 
 if exists("b:did_ftplugin") | finish | endif
 let b:did_ftplugin = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 setlocal cinkeys-=0#
 setlocal indentkeys-=0#
@@ -41,3 +43,6 @@ if has("gui_win32") && !exists("b:browsefilter")
     let b:browsefilter = "Python Files (*.py)\t*.py\n" .
 		       \ "All Files (*.*)\t*.*\n"
 endif
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/indent/ada.vim b/runtime/indent/ada.vim
index a9b461ccc5d9e1ae074164a50185312dda415964..c7f886436228912ba6b7b6d41b5bfa72c0dfb527 100644
--- a/runtime/indent/ada.vim
+++ b/runtime/indent/ada.vim
@@ -28,6 +28,8 @@
 if exists("b:did_indent") || version < 700
    finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let b:did_indent = 45
 
@@ -292,6 +294,9 @@ function GetAdaIndent()
    return ind
 endfunction GetAdaIndent
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/indent/python.vim b/runtime/indent/python.vim
index 0c04e81105fa251d1509c29dc1f5df9ee40b9043..838865f87f7087852b83f12dded594da34a0ff8b 100644
--- a/runtime/indent/python.vim
+++ b/runtime/indent/python.vim
@@ -2,13 +2,15 @@
 " Language:		Python
 " Maintainer:		Bram Moolenaar <Bram@vim.org>
 " Original Author:	David Bustos <bustos@caltech.edu>
-" Last Change:		2006 Jun 18
+" Last Change:		2012 Apr 30
 
 " Only load this indent file when no other was loaded.
 if exists("b:did_indent")
   finish
 endif
 let b:did_indent = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Some preliminary settings
 setlocal nolisp		" Make sure lisp indenting doesn't supersede us
@@ -190,4 +192,7 @@ function GetPythonIndent(lnum)
 
 endfunction
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:sw=2
diff --git a/runtime/lang/menu_af_af.latin1.vim b/runtime/lang/menu_af_af.latin1.vim
index b32e8e989dbf81a02baefabbc873e2bf3381de0a..7b16b0fcfb3342b82fd002028bb872d5602ca85e 100644
--- a/runtime/lang/menu_af_af.latin1.vim
+++ b/runtime/lang/menu_af_af.latin1.vim
@@ -1,12 +1,14 @@
 " Menu Translations:	Afrikaas
 " Maintainer:		Danie Roux <droux@tuks.co.za>
-" Last Change:		2003 Mar 30
+" Last Change:		2012 Apr 30
 
 " Quit when menu translations have already been done.
 if exists("did_menu_trans")
   finish
 endif
 let did_menu_trans = 1
+let s:keepcpo= &cpo
+set cpo&vim
 
 " The translations below are in latin1, but they work for cp1252 and
 " iso-8859-15 without conversion as well.
@@ -150,3 +152,6 @@ menutrans o&ff\ (this\ file)	&Af\ (die\ le
 menutrans Co&lor\ test		Toets\ die\ &kleure
 menutrans &Highlight\ test	Toets\ die\ verligting
 menutrans &Convert\ to\ HTML	Verwissel\ na\ HTML
+
+let s:keepcpo= &cpo
+set cpo&vim
diff --git a/runtime/syntax/ada.vim b/runtime/syntax/ada.vim
index 4f04bd0218e47f7d2a4c73b0c56444f318496868..c9d2b06e18c763b2a8f8f2141a8d2c261217476c 100644
--- a/runtime/syntax/ada.vim
+++ b/runtime/syntax/ada.vim
@@ -32,6 +32,8 @@
 if exists("b:current_syntax") || version < 700
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 let b:current_syntax = "ada"
 
@@ -352,6 +354,9 @@ endif
 " this speeds things up greatly.
 syntax sync minlines=1 maxlines=1
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 finish " 1}}}
 
 "------------------------------------------------------------------------------
diff --git a/runtime/syntax/autoit.vim b/runtime/syntax/autoit.vim
index 47210f55b436967826f8cf407272525407d49280..1b9ab7458e722dbd8071ebef1407a1bf18d15894 100644
--- a/runtime/syntax/autoit.vim
+++ b/runtime/syntax/autoit.vim
@@ -6,6 +6,15 @@
 " Script URL:	http://www.vim.org/scripts/script.php?script_id=1239
 " ChangeLog:	Please visit the script URL for detailed change information
 
+" Quit when a syntax file was already loaded.
+if exists("b:current_syntax")
+  finish
+endif
+let s:keepcpo= &cpo
+set cpo&vim
+
+let b:current_syntax = "autoit"
+
 " AutoIt is not case dependent
 syn case ignore
 
@@ -1108,4 +1117,8 @@ hi def link autoitOption Type
 hi def link autoitStyle Type
 hi def link autoitConst Type
 hi def link autoitSend Type
+
 syn sync minlines=50
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/syntax/cmake.vim b/runtime/syntax/cmake.vim
index d6e8cb45a914cbca9f1bab49f8771a36e14f42f4..e241605e0b104b7383eadad397d3127e5dd55d59 100644
--- a/runtime/syntax/cmake.vim
+++ b/runtime/syntax/cmake.vim
@@ -18,6 +18,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case ignore
 syn match cmakeEscaped /\(\\\\\|\\"\|\\n\|\\t\)/ contained
@@ -78,4 +80,7 @@ endif
 
 let b:current_syntax = "cmake"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 "EOF"
diff --git a/runtime/syntax/cucumber.vim b/runtime/syntax/cucumber.vim
index d85268143ceec49cb1600209f4401007954518f7..9e7a9d35b0517790b43e9baca38af789328c7f43 100644
--- a/runtime/syntax/cucumber.vim
+++ b/runtime/syntax/cucumber.vim
@@ -2,11 +2,13 @@
 " Language:     Cucumber
 " Maintainer:   Tim Pope <vimNOSPAM@tpope.org>
 " Filenames:    *.feature
-" Last Change:	2010 May 21
+" Last Change:	2012 Apr 30
 
 if exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case match
 syn sync minlines=20
@@ -123,4 +125,7 @@ hi def link cucumberThen              Type
 
 let b:current_syntax = "cucumber"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set sts=2 sw=2:
diff --git a/runtime/syntax/datascript.vim b/runtime/syntax/datascript.vim
index b51f41877fa0cc5228226e0844e47421ebcbfdec..76f977ac1372c765d3267826c6417308dc8e3662 100644
--- a/runtime/syntax/datascript.vim
+++ b/runtime/syntax/datascript.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	Datascript
 " Maintainer:	Dominique Pelle <dominique.pelle@gmail.com>
-" Last Change:	2010-08-01
+" Last Change:	2012 Apr 30
 "
 " DataScript is a formal language for modelling binary datatypes,
 " bitstreams or file formats. For more information, see:
@@ -12,6 +12,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn keyword dsPackage      import package
 syn keyword dsType         bit string
@@ -88,3 +90,6 @@ hi def link cCommentL           dsComment
 hi def link dsComment           Comment
 
 let b:current_syntax = "datascript"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/syntax/fvwm.vim b/runtime/syntax/fvwm.vim
index 29112fcc7ebd3c119b3a3bd068f675de12ca4bf3..2f96bab5bc1932338daa92fec599a2205264e411 100644
--- a/runtime/syntax/fvwm.vim
+++ b/runtime/syntax/fvwm.vim
@@ -12,6 +12,8 @@
 if exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Fvwm configuration files are case insensitive
 syn case ignore
@@ -635,3 +637,6 @@ hi def link fvwmShortcutKey	SpecialChar
 hi def link fvwmModuleName	Function
 
 let b:current_syntax = "fvwm"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
diff --git a/runtime/syntax/lsl.vim b/runtime/syntax/lsl.vim
index 3f2481678a60e45aba3fc9d00a9bddac3805f4c3..3b2baa06cec8cf63c0c164ea3818c3324ded42d3 100644
--- a/runtime/syntax/lsl.vim
+++ b/runtime/syntax/lsl.vim
@@ -1,12 +1,14 @@
 " Vim syntax file
 " Language:	Linden Scripting Language
 " Maintainer:	Timo Frenay <timo@frenay.net>
-" Last Change:	2008 Mar 29
+" Last Change:	2012 Apr 30
 
 " Quit when a syntax file was already loaded
 if exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Initializations
 syn case match
@@ -269,4 +271,7 @@ hi def link lslComment      Comment
 
 let b:current_syntax = "lsl"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
diff --git a/runtime/syntax/objc.vim b/runtime/syntax/objc.vim
index c575cf2ad702e17123e3300967884dd30d7ccfad..8829b4939c429adc23e64c0cb14f71fde6008838 100644
--- a/runtime/syntax/objc.vim
+++ b/runtime/syntax/objc.vim
@@ -3,7 +3,7 @@
 " Maintainer:	    Kazunobu Kuriyama <kazunobu.kuriyama@nifty.com>
 " Ex-maintainer:    Anthony Hodsdon <ahodsdon@fastmail.fm>
 " First Author:	    Valentino Kyriakides <1kyriaki@informatik.uni-hamburg.de>
-" Last Change:	    2007 Feb 21
+" Last Change:	    2012 Apr 30
 
 " For version 5.x: Clear all syntax items
 " For version 6.x: Quit when a syntax file was already loaded
@@ -12,6 +12,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 if &filetype != 'objcpp'
   " Read the C syntax to start with
@@ -107,4 +109,7 @@ endif
 
 let b:current_syntax = "objc"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim: ts=8
diff --git a/runtime/syntax/perl6.vim b/runtime/syntax/perl6.vim
index 6a3baba747919c2a04ee888d6a2c36b57b385221..9361f9a57b7a0ea759fa3aaf48925236668a5606 100644
--- a/runtime/syntax/perl6.vim
+++ b/runtime/syntax/perl6.vim
@@ -2,7 +2,7 @@
 " Language:     Perl 6
 " Maintainer:   Andy Lester <andy@petdance.com>
 " Homepage:     http://github.com/petdance/vim-perl/tree/master
-" Last Change:  2009-07-04
+" Last Change:  2012 Apr 30
 
 " Contributors: Luke Palmer <fibonaci@babylonia.flatirons.org>
 "               Moritz Lenz <moritz@faui2k3.org>
@@ -67,6 +67,8 @@ if version < 600
 elseif exists("b:current_syntax")
     finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " identifiers
 syn match p6Normal display "\K\%(\k\|[-']\K\@=\)*"
@@ -2246,4 +2248,7 @@ setlocal foldmethod=syntax
 
 let b:current_syntax = "perl6"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:ts=8:sts=4:sw=4:expandtab:ft=vim
diff --git a/runtime/syntax/po.vim b/runtime/syntax/po.vim
index 45865b5e072d13c2e9ccd749e4ee0cd90f8cd1f3..c09b9603572cd81f7fd462b0f8f78a8828641779 100644
--- a/runtime/syntax/po.vim
+++ b/runtime/syntax/po.vim
@@ -1,7 +1,7 @@
 " Vim syntax file
 " Language:	po (gettext)
 " Maintainer:	Dwayne Bailey <dwayne@translate.org.za>
-" Last Change:	2010 Sep 21
+" Last Change:	2012 Apr 30
 " Contributors: Dwayne Bailey (Most advanced syntax highlighting)
 "               Leonardo Fontenelle (Spell checking)
 "               Nam SungHyun <namsh@kldp.org> (Original maintainer)
@@ -13,6 +13,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn sync minlines=10
 
@@ -132,4 +134,7 @@ endif
 
 let b:current_syntax = "po"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set ts=8 sts=2 sw=2 noet:
diff --git a/runtime/syntax/sgmldecl.vim b/runtime/syntax/sgmldecl.vim
index 6a69fc5d201fd7c712c106daab9e2c4bb9fc124a..13551b21c11720d497df3d15e1bc119d7a34f7ac 100644
--- a/runtime/syntax/sgmldecl.vim
+++ b/runtime/syntax/sgmldecl.vim
@@ -12,6 +12,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case ignore
 
@@ -76,4 +78,8 @@ if version >= 508 || !exists("did_sgmldecl_syntax_init")
 endif
 
 let b:current_syntax = "sgmldecl"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:set tw=78 ts=4:
diff --git a/runtime/syntax/taskdata.vim b/runtime/syntax/taskdata.vim
index 79186e0ad6e83489baf9e9d47035f5b8b953a7e8..b37c70cc1f2d9577beb1409f1b03c3af2e37c264 100644
--- a/runtime/syntax/taskdata.vim
+++ b/runtime/syntax/taskdata.vim
@@ -11,6 +11,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 " Key Names for values.
 syn keyword taskdataKey		description due end entry imask mask parent
@@ -40,4 +42,7 @@ hi def link taskdataUndo 	Type
 
 let b:current_syntax = "taskdata"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:noexpandtab
diff --git a/runtime/syntax/taskedit.vim b/runtime/syntax/taskedit.vim
index c7e0ea75ade06b80481da6a83617b0e04558499a..170153c0eeddcc04671b5b5faba7a8b75ae9a686 100644
--- a/runtime/syntax/taskedit.vim
+++ b/runtime/syntax/taskedit.vim
@@ -11,6 +11,8 @@ if version < 600
 elseif exists("b:current_syntax")
   finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn match taskeditHeading	"^\s*#\s*Name\s\+Editable details\s*$" contained
 syn match taskeditHeading	"^\s*#\s*-\+\s\+-\+\s*$" contained
@@ -32,4 +34,7 @@ hi def link taskeditString	String
 
 let b:current_syntax = "taskedit"
 
+let &cpo = s:keepcpo
+unlet s:keepcpo
+
 " vim:noexpandtab
diff --git a/runtime/syntax/valgrind.vim b/runtime/syntax/valgrind.vim
index f23b7924b6960e56abb922526bdb363f4fa80861..48e9564acbd985d9cc6f9540ac41bd1d0922ffa4 100644
--- a/runtime/syntax/valgrind.vim
+++ b/runtime/syntax/valgrind.vim
@@ -2,7 +2,7 @@
 " Language: Valgrind Memory Debugger Output
 " Maintainer: Roger Luethi <rl@hellgate.ch>
 " Program URL: http://devel-home.kde.org/~sewardj/
-" Last Change: 2002 Apr 07
+" Last Change: 2012 Apr 30
 "
 " Notes: mostly based on strace.vim and xml.vim
 
@@ -10,6 +10,8 @@
 if exists("b:current_syntax")
 	finish
 endif
+let s:keepcpo= &cpo
+set cpo&vim
 
 syn case match
 syn sync minlines=50
@@ -97,3 +99,6 @@ hi def link valgrindBin		Comment
 hi def link valgrindSrc		Statement
 
 let b:current_syntax = "valgrind"
+
+let &cpo = s:keepcpo
+unlet s:keepcpo