updated for version 7.0140
diff --git a/src/Makefile b/src/Makefile
index cebbbc3..0340f79 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -119,12 +119,14 @@
 #	If you don't want to install everything, there are other targets:
 #		make installvim		only installs Vim, not the tools
 #		make installvimbin	only installs the Vim executable
-#		make installruntime	only installs the Vim help and
+#		make installruntime	installs most of the runtime files
+#		make installrtbase	only installs the Vim help and
 #							runtime files
 #		make installlinks	only installs the Vim binary links
 #		make installmanlinks	only installs the Vim manpage links
 #		make installmacros	only installs the Vim macros
-#		make installtutor	only installs the Vim tutor
+#		make installtutorbin	only installs the Vim tutor program
+#		make installtutor	only installs the Vim tutor files
 #		make installspell	only installs the spell files
 #		make installtools	only installs xxd
 #	If you install Vim, not to install for real but to prepare a package
@@ -1725,7 +1727,8 @@
 
 install_normal: installvim installtools $(INSTALL_LANGS) install-icons
 
-installvim: installvimbin installruntime installlinks installmanlinks installmacros installtutor installspell
+installvim: installvimbin installtutorbin \
+		installruntime installlinks installmanlinks
 
 installvimbin: $(VIMTARGET) $(DESTDIR)$(exec_prefix) $(DEST_BIN)
 	-if test -f $(DEST_BIN)/$(VIMTARGET); then \
@@ -1743,8 +1746,11 @@
 INSTALLMANARGS = $(VIMLOC) $(SCRIPTLOC) $(VIMRCLOC) $(HELPSOURCE) $(MANMOD) \
 		$(VIMNAME) $(VIMDIFFNAME) $(EVIMNAME)
 
+# Install most of the runtime files
+installruntime: installrtbase installmacros installtutor installspell
+	
 # install the help files; first adjust the contents for the final location
-installruntime: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \
+installrtbase: $(HELPSOURCE)/vim.1 $(DEST_VIM) $(DEST_RT) \
 		$(DEST_HELP) $(DEST_PRINT) $(DEST_COL) $(DEST_SYN) $(DEST_IND) \
 		$(DEST_FTP) $(DEST_AUTO) $(DEST_PLUG) $(DEST_TUTOR) \
 		$(DEST_SPELL) $(DEST_COMP)
@@ -1834,9 +1840,11 @@
 	      fi
 
 # install the tutor files
-installtutor: $(DEST_VIM) $(DEST_RT) $(DEST_TUTOR)
+installtutorbin: $(DEST_VIM)
 	$(INSTALL_DATA) vimtutor $(DEST_BIN)/$(VIMNAME)tutor
 	chmod $(SCRIPTMOD) $(DEST_BIN)/$(VIMNAME)tutor
+
+installtutor: $(DEST_RT) $(DEST_TUTOR)
 	-$(INSTALL_DATA) $(TUTORSOURCE)/README* $(TUTORSOURCE)/tutor* $(DEST_TUTOR)
 	chmod $(HELPMOD) $(DEST_TUTOR)/*
 
@@ -2539,7 +2547,19 @@
 #ICONS = $(addprefix $(RESDIR)/, $(ICON_APP) $(ICON_DOC) $(ICON_DOCTXT))
 
 install_macosx: gui_bundle
+# Remove the link to the runtime dir, don't want to copy all of that.
+	-rm $(APPDIR)/runtime
 	$(INSTALL_DATA_R) $(APPDIR) $(DESTDIR)$(prefix)
+# Install the runtime files.  Recursive!
+	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/runtime
+	-mkdir $(DESTDIR)$(prefix)/$(APPDIR)/bin
+	srcdir=`pwd`; $(MAKE) -f Makefile installruntime \
+		VIMEXE=$$srcdir/$(VIMTARGET) \
+		prefix=$(DESTDIR)$(prefix)/$(APPDIR) \
+		VIMRTLOC=$(DESTDIR)$(prefix)/$(APPDIR)/runtime
+# Put the link back.
+	ln -s `pwd`/../runtime $(APPDIR)
+# TODO: Create the vimtutor application.
 
 gui_bundle: $(APPDIR) bundle-dir bundle-executable bundle-info bundle-resource \
 	bundle-language
@@ -2549,12 +2569,9 @@
 
 bundle-dir: $(APPDIR)/Contents $(VIMTARGET)
 	-@srcdir=`pwd`; cd $(HELPSOURCE); $(MAKE) VIMEXE=$$srcdir/$(VIMTARGET) vimtags
-	cp -R ../runtime $(APPDIR)
-# When using CVS some CVS directories might have been copied.
-	cvs=`find $(APPDIR) \( -name CVS -o -name AAPDIR \) -print`; \
-	      if test -n "$$cvs"; then \
-		 rm -rf $$cvs; \
-	      fi
+# Make a link to the runtime directory, so that we can try out the executable
+# without installing it.
+	-ln -s `pwd`/../runtime $(APPDIR)
 
 bundle-executable: $(VIMTARGET)
 	cp $(VIMTARGET) $(APPDIR)/Contents/MacOS/$(VIMTARGET)
diff --git a/src/auto/configure b/src/auto/configure
index ecb7161..6e11978 100755
--- a/src/auto/configure
+++ b/src/auto/configure
@@ -2851,7 +2851,6 @@
 echo "${ECHO_T}no" >&6;;
 esac
 
-DEFAULT_VIMNAME=vim
 echo "$as_me:$LINENO: checking for Darwin (Mac OS X)" >&5
 echo $ECHO_N "checking for Darwin (Mac OS X)... $ECHO_C" >&6
 if test "`(uname) 2>/dev/null`" = Darwin; then
@@ -3274,7 +3273,6 @@
     if test "x$CARBON" = "xyes"; then
       if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then
 	with_x=no
-	DEFAULT_VIMNAME=Vim
       fi
     fi
   fi
@@ -3316,7 +3314,7 @@
   VIMNAME="$withval"; echo "$as_me:$LINENO: result: $VIMNAME" >&5
 echo "${ECHO_T}$VIMNAME" >&6
 else
-  VIMNAME="$DEFAULT_VIMNAME"; echo "$as_me:$LINENO: result: Defaulting to $VIMNAME" >&5
+  VIMNAME="vim"; echo "$as_me:$LINENO: result: Defaulting to $VIMNAME" >&5
 echo "${ECHO_T}Defaulting to $VIMNAME" >&6
 fi;
 
@@ -7521,7 +7519,7 @@
     do
       for j in qstyle.h;
       do
-       echo "configure: 7524: $i/$j" >&5
+       echo "configure: 7522: $i/$j" >&5
        if test -r "$i/$j"; then
          echo "taking that" >&5
          qt_incdir=$i
@@ -7541,7 +7539,7 @@
     do
       for j in kapplication.h;
       do
-       echo "configure: 7544: $i/$j" >&5
+       echo "configure: 7542: $i/$j" >&5
        if test -r "$i/$j"; then
          echo "taking that" >&5
          kde_incdir=$i
@@ -8080,6 +8078,9 @@
     echo "$as_me:$LINENO: result: yes" >&5
 echo "${ECHO_T}yes" >&6;
   GUITYPE=CARBONGUI
+  if test "$VIMNAME" = "vim"; then
+    VIMNAME=Vim
+  fi
     SKIP_GTK=YES;
   SKIP_GTK2=YES;
   SKIP_GNOME=YES;
@@ -11203,7 +11204,6 @@
 fi
 rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
 
-if test "x$MACOSX" != "xyes"; then
 
 for ac_header in strings.h
 do
@@ -11354,7 +11354,6 @@
 
 done
 
-fi
 
 echo "$as_me:$LINENO: checking if strings.h can be included after string.h" >&5
 echo $ECHO_N "checking if strings.h can be included after string.h... $ECHO_C" >&6
diff --git a/src/buffer.c b/src/buffer.c
index 1fb95fd..21b3bc4 100644
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1746,6 +1746,7 @@
 #endif
 #ifdef FEAT_COMPL_FUNC
     clear_string_option(&buf->b_p_cfu);
+    clear_string_option(&buf->b_p_ofu);
 #endif
 #ifdef FEAT_QUICKFIX
     clear_string_option(&buf->b_p_gp);
diff --git a/src/configure.in b/src/configure.in
index e9f21a2..74fc017 100644
--- a/src/configure.in
+++ b/src/configure.in
@@ -79,7 +79,6 @@
 dnl Check for Darwin and MacOS X
 dnl We do a check for MacOS X in the very beginning because there
 dnl are a lot of other things we need to change besides GUI stuff
-DEFAULT_VIMNAME=vim
 AC_MSG_CHECKING([for Darwin (Mac OS X)])
 if test "`(uname) 2>/dev/null`" = Darwin; then
   AC_MSG_RESULT(yes)
@@ -114,7 +113,6 @@
     if test "x$CARBON" = "xyes"; then
       if test -z "$with_x" -a "X$enable_gui" != Xmotif -a "X$enable_gui" != Xathena -a "X$enable_gui" != Xgtk -a "X$enable_gui" != Xgtk2; then
 	with_x=no
-	DEFAULT_VIMNAME=Vim
       fi
     fi
   fi
@@ -153,7 +151,7 @@
 AC_MSG_CHECKING(--with-vim-name argument)
 AC_ARG_WITH(vim-name, [  --with-vim-name=NAME    what to call the Vim executable],
 	VIMNAME="$withval"; AC_MSG_RESULT($VIMNAME),
-	VIMNAME="$DEFAULT_VIMNAME"; AC_MSG_RESULT(Defaulting to $VIMNAME))
+	VIMNAME="vim"; AC_MSG_RESULT(Defaulting to $VIMNAME))
 AC_SUBST(VIMNAME)
 AC_MSG_CHECKING(--with-ex-name argument)
 AC_ARG_WITH(ex-name, [  --with-ex-name=NAME     what to call the Ex executable],
@@ -1558,6 +1556,9 @@
   dnl already did this
   AC_MSG_RESULT(yes);
   GUITYPE=CARBONGUI
+  if test "$VIMNAME" = "vim"; then
+    VIMNAME=Vim
+  fi
   dnl skip everything else
   SKIP_GTK=YES;
   SKIP_GTK2=YES;
@@ -2257,10 +2258,7 @@
 		      AC_DEFINE(HAVE_PTHREAD_NP_H),
 	      AC_MSG_RESULT(no))
 
-dnl On Mac OS X strings.h exists but produces a warning message :-(
-if test "x$MACOSX" != "xyes"; then
-  AC_CHECK_HEADERS(strings.h)
-fi
+AC_CHECK_HEADERS(strings.h)
 
 dnl Check if strings.h and string.h can both be included when defined.
 AC_MSG_CHECKING([if strings.h can be included after string.h])
diff --git a/src/edit.c b/src/edit.c
index f399f30..d1a48de 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -819,7 +819,7 @@
 	    /*FALLTHROUGH*/
 
 	case Ctrl_O:	/* execute one command */
-#ifdef FEAT_INS_EXPAND
+#ifdef FEAT_COMPL_FUNC
 	    if (ctrl_x_mode == CTRL_X_OCCULT)
 		goto docomplete;
 #endif
@@ -1844,9 +1844,9 @@
 #ifdef FEAT_COMPL_FUNC
 	case CTRL_X_FUNCTION:
 	    return (c == Ctrl_U || c == Ctrl_P || c == Ctrl_N);
-#endif
 	case CTRL_X_OCCULT:
 	    return (c == Ctrl_O || c == Ctrl_P || c == Ctrl_N);
+#endif
 	case CTRL_X_SPELL:
 	    return (c == Ctrl_S || c == Ctrl_P || c == Ctrl_N);
     }
@@ -2360,10 +2360,10 @@
 	    case Ctrl_U:
 		ctrl_x_mode = CTRL_X_FUNCTION;
 		break;
-#endif
 	    case Ctrl_O:
 		ctrl_x_mode = CTRL_X_OCCULT;
 		break;
+#endif
 	    case 's':
 	    case Ctrl_S:
 		ctrl_x_mode = CTRL_X_SPELL;
@@ -2581,36 +2581,38 @@
 }
 
 #ifdef FEAT_COMPL_FUNC
-static int expand_by_function __ARGS((int col, char_u *base, char_u ***matches));
+static int expand_by_function __ARGS((int type, char_u *base, char_u ***matches));
 
 /*
- * Execute user defined complete function 'completefunc', and get matches in
- * "matches".
+ * Execute user defined complete function 'completefunc' or 'occultfunc', and
+ * get matches in "matches".
  * Return value is number of matches.
  */
     static int
-expand_by_function(col, base, matches)
-    int		col;
+expand_by_function(type, base, matches)
+    int		type;	    /* CTRL_X_OCCULT or CTRL_X_FUNCTION */
     char_u	*base;
     char_u	***matches;
 {
     list_T      *matchlist;
-    char_u	colbuf[30];
-    char_u	*args[3];
+    char_u	*args[2];
     listitem_T	*li;
     garray_T    ga;
     char_u	*p;
+    char_u	*funcname;
+    pos_T	pos;
 
-    if (*curbuf->b_p_cfu == NUL)
+    funcname = (type == CTRL_X_FUNCTION) ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+    if (*funcname == NUL)
 	return 0;
 
     /* Call 'completefunc' to obtain the list of matches. */
     args[0] = (char_u *)"0";
-    sprintf((char *)colbuf, "%d", col + (int)STRLEN(base));
-    args[1] = colbuf;
-    args[2] = base;
+    args[1] = base;
 
-    matchlist = call_func_retlist(curbuf->b_p_cfu, 3, args, FALSE);
+    pos = curwin->w_cursor;
+    matchlist = call_func_retlist(funcname, 2, args, FALSE);
+    curwin->w_cursor = pos;	/* restore the cursor position */
     if (matchlist == NULL)
 	return 0;
 
@@ -2634,30 +2636,6 @@
 }
 #endif /* FEAT_COMPL_FUNC */
 
-static int expand_occult __ARGS((linenr_T lnum, int col, char_u *base, char_u ***matches));
-
-/*
- * Perform occult completion'
- * Return value is number of candidates and array of candidates as "matchp".
- */
-    static int
-expand_occult(lnum, col, pat, matchp)
-    linenr_T	lnum;
-    int		col;
-    char_u	*pat;
-    char_u	***matchp;
-{
-    int	    num_matches;
-
-    /* Use tag completion for now. */
-    if (find_tags(pat, &num_matches, matchp,
-	    TAG_REGEXP | TAG_NAMES | TAG_NOIC |
-	    TAG_INS_COMP | (ctrl_x_mode ? TAG_VERBOSE : 0),
-	    TAG_MANY, curbuf->b_ffname) == FAIL)
-	return 0;
-    return num_matches;
-}
-
 /*
  * Get the next expansion(s), using "compl_pattern".
  * The search starts at position "ini" in curbuf and in the direction dir.
@@ -2870,20 +2848,13 @@
 
 #ifdef FEAT_COMPL_FUNC
 	case CTRL_X_FUNCTION:
-	    num_matches = expand_by_function(first_match_pos.col,
-						     compl_pattern, &matches);
+	case CTRL_X_OCCULT:
+	    num_matches = expand_by_function(type, compl_pattern, &matches);
 	    if (num_matches > 0)
 		ins_compl_add_matches(num_matches, matches, dir);
 	    break;
 #endif
 
-	case CTRL_X_OCCULT:
-	    num_matches = expand_occult(first_match_pos.lnum,
-				 first_match_pos.col, compl_pattern, &matches);
-	    if (num_matches > 0)
-		ins_compl_add_matches(num_matches, matches, dir);
-	    break;
-
 	case CTRL_X_SPELL:
 #ifdef FEAT_SYN_HL
 	    num_matches = expand_spelling(first_match_pos.lnum,
@@ -3302,7 +3273,7 @@
 		    compl_col = compl_startpos.col;
 		}
 		compl_length = curwin->w_cursor.col - (int)compl_col;
-		/* IObuf is used to add a "word from the next line" would we
+		/* IObuff is used to add a "word from the next line" would we
 		 * have enough space?  just being paranoic */
 #define	MIN_SPACE 75
 		if (compl_length > (IOSIZE - MIN_SPACE))
@@ -3486,27 +3457,31 @@
 	    compl_col = startcol;
 	    compl_length = curs_col - startcol;
 	}
-#ifdef FEAT_COMPL_FUNC
-	else if (ctrl_x_mode == CTRL_X_FUNCTION)
+	else if (ctrl_x_mode == CTRL_X_FUNCTION || ctrl_x_mode == CTRL_X_OCCULT)
 	{
+#ifdef FEAT_COMPL_FUNC
 	    /*
-	     * Call user defined function 'completefunc' with "a:findstart" is
-	     * 1 to obtain the length of text to use for completion.
+	     * Call user defined function 'completefunc' with "a:findstart"
+	     * set to 1 to obtain the length of text to use for completion.
 	     */
-	    char_u	colbuf[30];
-	    char_u	*args[3];
+	    char_u	*args[2];
 	    int		col;
+	    char_u	*funcname;
+	    pos_T	pos;
 
-	    /* Call 'completefunc' and get pattern length as a string */
-	    if (*curbuf->b_p_cfu == NUL)
+	    /* Call 'completefunc' or 'occultfunc' and get pattern length as a
+	     * string */
+	    funcname = ctrl_x_mode == CTRL_X_FUNCTION
+					  ? curbuf->b_p_cfu : curbuf->b_p_ofu;
+	    if (*funcname == NUL)
 		return FAIL;
 
 	    args[0] = (char_u *)"1";
-	    sprintf((char *)colbuf, "%d", (int)curs_col);
-	    args[1] = colbuf;
-	    args[2] = NULL;
+	    args[1] = NULL;
+	    pos = curwin->w_cursor;
+	    col = call_func_retnr(funcname, 2, args, FALSE);
+	    curwin->w_cursor = pos;	/* restore the cursor position */
 
-	    col = call_func_retnr(curbuf->b_p_cfu, 3, args, FALSE);
 	    if (col < 0)
 		return FAIL;
 	    compl_col = col;
@@ -3519,19 +3494,7 @@
 	    compl_length = curs_col - compl_col;
 	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
 	    if (compl_pattern == NULL)
-		return FAIL;
-	}
 #endif
-	else if (ctrl_x_mode == CTRL_X_OCCULT)
-	{
-	    /* TODO: let language-specific function handle locating the text
-	     * to be completed. */
-	    while (--startcol >= 0 && vim_isIDc(line[startcol]))
-		;
-	    compl_col += ++startcol;
-	    compl_length = (int)curs_col - startcol;
-	    compl_pattern = vim_strnsave(line + compl_col, compl_length);
-	    if (compl_pattern == NULL)
 		return FAIL;
 	}
 	else if (ctrl_x_mode == CTRL_X_SPELL)
diff --git a/src/ex_getln.c b/src/ex_getln.c
index cd40a68..c6190be 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -2150,7 +2150,8 @@
     return (char_u *)line_ga.ga_data;
 }
 
-#ifdef CURSOR_SHAPE
+# if defined(MCH_CURSOR_SHAPE) || defined(FEAT_GUI) \
+	|| defined(FEAT_MOUSESHAPE) || defined(PROTO)
 /*
  * Return TRUE if ccline.overstrike is on.
  */
diff --git a/src/gui_mac.c b/src/gui_mac.c
index 9253aa1..50e9669 100644
--- a/src/gui_mac.c
+++ b/src/gui_mac.c
@@ -4930,16 +4930,6 @@
 #endif
 	tempclip[scrapSize] = 0;
 
-	searchCR = (char *)tempclip;
-	while (searchCR != NULL)
-	{
-	    searchCR = strchr(searchCR, '\r');
-
-	    if (searchCR != NULL)
-		searchCR[0] = '\n';
-
-	}
-
 #if defined(FEAT_MBYTE) && defined(USE_CARBONIZED)
 	/* Convert from utf-16 (clipboard) */
 	size_t encLen = 0;
@@ -4951,6 +4941,17 @@
 	    tempclip = to;
 	}
 #endif
+
+	searchCR = (char *)tempclip;
+	while (searchCR != NULL)
+	{
+	    searchCR = strchr(searchCR, '\r');
+
+	    if (searchCR != NULL)
+		searchCR[0] = '\n';
+
+	}
+
 	clip_yank_selection(type, tempclip, scrapSize, cbd);
 
 	vim_free(tempclip);
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 5649aeb..03b7d71 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -105,6 +105,7 @@
 typedef int LPWINDOWPOS;
 typedef int LPWORD;
 typedef int LRESULT;
+typedef int HRESULT;
 # undef MSG
 typedef int MSG;
 typedef int NEWTEXTMETRIC;
diff --git a/src/if_mzsch.c b/src/if_mzsch.c
index dde31eb..186ee66 100644
--- a/src/if_mzsch.c
+++ b/src/if_mzsch.c
@@ -956,12 +956,12 @@
     void
 mzscheme_buffer_free(buf_T *buf)
 {
-    if (buf->mzscheme_ref)
+    if (buf->b_mzscheme_ref)
     {
         vim_mz_buffer *bp;
-	bp = buf->mzscheme_ref;
+	bp = buf->b_mzscheme_ref;
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->mzscheme_ref = NULL;
+	buf->b_mzscheme_ref = NULL;
 	scheme_gc_ptr_ok(bp);
     }
 }
@@ -972,12 +972,12 @@
     void
 mzscheme_window_free(win_T *win)
 {
-    if (win->mzscheme_ref)
+    if (win->w_mzscheme_ref)
     {
 	vim_mz_window *wp;
-	wp = win->mzscheme_ref;
+	wp = win->w_mzscheme_ref;
 	wp->win = INVALID_WINDOW_VALUE;
-	win->mzscheme_ref = NULL;
+	win->w_mzscheme_ref = NULL;
 	scheme_gc_ptr_ok(wp);
     }
 }
@@ -1462,21 +1462,21 @@
     vim_mz_window *self;
 
     /* We need to handle deletion of windows underneath us.
-     * If we add a "mzscheme_ref" field to the win_T structure,
+     * If we add a "w_mzscheme_ref" field to the win_T structure,
      * then we can get at it in win_free() in vim.
      *
      * On a win_free() we set the Scheme object's win_T *field
      * to an invalid value. We trap all uses of a window
      * object, and reject them if the win_T *field is invalid.
      */
-    if (win->mzscheme_ref)
-	return win->mzscheme_ref;
+    if (win->w_mzscheme_ref != NULL)
+	return win->w_mzscheme_ref;
 
     self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_window));
 
     vim_memset(self, 0, sizeof(vim_mz_window));
     scheme_dont_gc_ptr(self);	/* because win isn't visible to GC */
-    win->mzscheme_ref = self;
+    win->w_mzscheme_ref = self;
     self->win = win;
     self->tag = mz_window_type;
 
@@ -1787,17 +1787,17 @@
     vim_mz_buffer *self;
 
     /* We need to handle deletion of buffers underneath us.
-     * If we add a "mzscheme_buf" field to the buf_T structure,
+     * If we add a "b_mzscheme_ref" field to the buf_T structure,
      * then we can get at it in buf_freeall() in vim.
      */
-    if (buf->mzscheme_ref)
-        return buf->mzscheme_ref;
+    if (buf->b_mzscheme_ref)
+        return buf->b_mzscheme_ref;
 
     self = scheme_malloc_fail_ok(scheme_malloc, sizeof(vim_mz_buffer));
 
     vim_memset(self, 0, sizeof(vim_mz_buffer));
     scheme_dont_gc_ptr(self);	/* because buf isn't visible to GC */
-    buf->mzscheme_ref = self;
+    buf->b_mzscheme_ref = self;
     self->buf = buf;
     self->tag = mz_buffer_type;
 
@@ -2620,20 +2620,20 @@
     static vim_mz_buffer *
 get_vim_curr_buffer(void)
 {
-    if (!curbuf->mzscheme_ref)
+    if (curbuf->b_mzscheme_ref == NULL)
 	return (vim_mz_buffer *)buffer_new(curbuf);
     else
-	return (vim_mz_buffer *)curbuf->mzscheme_ref;
+	return (vim_mz_buffer *)curbuf->b_mzscheme_ref;
 }
 
 /* return MzScheme wrapper for curwin */
     static vim_mz_window *
 get_vim_curr_window(void)
 {
-    if (!curwin->mzscheme_ref)
+    if (curwin->w_mzscheme_ref == NULL)
 	return (vim_mz_window *)window_new(curwin);
     else
-	return (vim_mz_window *)curwin->mzscheme_ref;
+	return (vim_mz_window *)curwin->w_mzscheme_ref;
 }
 
     static void
diff --git a/src/if_perl.xs b/src/if_perl.xs
index 072ddcd..0f1dcd2 100644
--- a/src/if_perl.xs
+++ b/src/if_perl.xs
@@ -437,37 +437,50 @@
 
 /*
  * Create a new reference to an SV pointing to the SCR structure
- * The perl_private part of the SCR structure points to the SV,
- * so there can only be one such SV for a particular SCR structure.
- * When the last reference has gone (DESTROY is called),
- * perl_private is reset; When the screen goes away before
+ * The b_perl_private/w_perl_private part of the SCR structure points to the
+ * SV, so there can only be one such SV for a particular SCR structure.  When
+ * the last reference has gone (DESTROY is called),
+ * b_perl_private/w_perl_private is reset; When the screen goes away before
  * all references are gone, the value of the SV is reset;
  * any subsequent use of any of those reference will produce
  * a warning. (see typemap)
  */
-#define newANYrv(TYPE, TNAME)					\
-static SV *							\
-new ## TNAME ## rv(rv, ptr)					\
-    SV *rv;							\
-    TYPE *ptr;							\
-{								\
-    sv_upgrade(rv, SVt_RV);					\
-    if (!ptr->perl_private)					\
-    {								\
-	ptr->perl_private = newSV(0);				\
-	sv_setiv(ptr->perl_private, (IV)ptr);			\
-    }								\
-    else							\
-	SvREFCNT_inc(ptr->perl_private);			\
-    SvRV(rv) = ptr->perl_private;				\
-    SvROK_on(rv);						\
-    return sv_bless(rv, gv_stashpv("VI" #TNAME, TRUE));		\
+
+    static SV *
+newWINrv(rv, ptr)
+    SV	    *rv;
+    win_T   *ptr;
+{
+    sv_upgrade(rv, SVt_RV);
+    if (ptr->w_perl_private == NULL)
+    {
+	ptr->w_perl_private = newSV(0);
+	sv_setiv(ptr->w_perl_private, (IV)ptr);
+    }
+    else
+	SvREFCNT_inc(ptr->w_perl_private);
+    SvRV(rv) = ptr->w_perl_private;
+    SvROK_on(rv);
+    return sv_bless(rv, gv_stashpv("VIWIN", TRUE));
 }
 
-/* LINTED: avoid warning: cast from pointer to integer of different size */
-newANYrv(win_T, WIN)
-/* LINTED: avoid warning: cast from pointer to integer of different size */
-newANYrv(buf_T, BUF)
+    static SV *
+newBUFrv(rv, ptr)
+    SV	    *rv;
+    buf_T   *ptr;
+{
+    sv_upgrade(rv, SVt_RV);
+    if (ptr->b_perl_private == NULL)
+    {
+	ptr->b_perl_private = newSV(0);
+	sv_setiv(ptr->b_perl_private, (IV)ptr);
+    }
+    else
+	SvREFCNT_inc(ptr->b_perl_private);
+    SvRV(rv) = ptr->b_perl_private;
+    SvROK_on(rv);
+    return sv_bless(rv, gv_stashpv("VIBUF", TRUE));
+}
 
 /*
  * perl_win_free
@@ -477,8 +490,8 @@
 perl_win_free(wp)
     win_T *wp;
 {
-    if (wp->perl_private)
-	sv_setiv((SV *)wp->perl_private, 0);
+    if (wp->w_perl_private)
+	sv_setiv((SV *)wp->w_perl_private, 0);
     return;
 }
 
@@ -486,8 +499,8 @@
 perl_buf_free(bp)
     buf_T *bp;
 {
-    if (bp->perl_private)
-	sv_setiv((SV *)bp->perl_private, 0);
+    if (bp->b_perl_private)
+	sv_setiv((SV *)bp->b_perl_private, 0);
     return;
 }
 
@@ -915,7 +928,7 @@
 
     CODE:
     if (win_valid(win))
-	win->perl_private = 0;
+	win->w_perl_private = 0;
 
 SV *
 Buffer(win)
@@ -979,7 +992,7 @@
 
     CODE:
     if (buf_valid(vimbuf))
-	vimbuf->perl_private = 0;
+	vimbuf->b_perl_private = 0;
 
 void
 Name(vimbuf)
diff --git a/src/if_python.c b/src/if_python.c
index 1b5d0e3..623731a 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -1305,12 +1305,12 @@
 BufferNew(buf_T *buf)
 {
     /* We need to handle deletion of buffers underneath us.
-     * If we add a "python_ref" field to the buf_T structure,
+     * If we add a "b_python_ref" field to the buf_T structure,
      * then we can get at it in buf_freeall() in vim. We then
      * need to create only ONE Python object per buffer - if
      * we try to create a second, just INCREF the existing one
      * and return it. The (single) Python object referring to
-     * the buffer is stored in "python_ref".
+     * the buffer is stored in "b_python_ref".
      * Question: what to do on a buf_freeall(). We'll probably
      * have to either delete the Python object (DECREF it to
      * zero - a bad idea, as it leaves dangling refs!) or
@@ -1320,9 +1320,9 @@
 
     BufferObject *self;
 
-    if (buf->python_ref)
+    if (buf->b_python_ref != NULL)
     {
-	self = buf->python_ref;
+	self = buf->b_python_ref;
 	Py_INCREF(self);
     }
     else
@@ -1331,7 +1331,7 @@
 	if (self == NULL)
 	    return NULL;
 	self->buf = buf;
-	buf->python_ref = self;
+	buf->b_python_ref = self;
     }
 
     return (PyObject *)(self);
@@ -1343,7 +1343,7 @@
     BufferObject *this = (BufferObject *)(self);
 
     if (this->buf && this->buf != INVALID_BUFFER_VALUE)
-	this->buf->python_ref = NULL;
+	this->buf->b_python_ref = NULL;
 
     PyMem_DEL(self);
 }
@@ -1788,12 +1788,12 @@
 WindowNew(win_T *win)
 {
     /* We need to handle deletion of windows underneath us.
-     * If we add a "python_ref" field to the win_T structure,
+     * If we add a "w_python_ref" field to the win_T structure,
      * then we can get at it in win_free() in vim. We then
      * need to create only ONE Python object per window - if
      * we try to create a second, just INCREF the existing one
      * and return it. The (single) Python object referring to
-     * the window is stored in "python_ref".
+     * the window is stored in "w_python_ref".
      * On a win_free() we set the Python object's win_T* field
      * to an invalid value. We trap all uses of a window
      * object, and reject them if the win_T* field is invalid.
@@ -1801,9 +1801,9 @@
 
     WindowObject *self;
 
-    if (win->python_ref)
+    if (win->w_python_ref)
     {
-	self = win->python_ref;
+	self = win->w_python_ref;
 	Py_INCREF(self);
     }
     else
@@ -1812,7 +1812,7 @@
 	if (self == NULL)
 	    return NULL;
 	self->win = win;
-	win->python_ref = self;
+	win->w_python_ref = self;
     }
 
     return (PyObject *)(self);
@@ -1824,7 +1824,7 @@
     WindowObject *this = (WindowObject *)(self);
 
     if (this->win && this->win != INVALID_WINDOW_VALUE)
-	this->win->python_ref = NULL;
+	this->win->w_python_ref = NULL;
 
     PyMem_DEL(self);
 }
@@ -2144,11 +2144,11 @@
     void
 python_buffer_free(buf_T *buf)
 {
-    if (buf->python_ref)
+    if (buf->b_python_ref != NULL)
     {
-	BufferObject *bp = buf->python_ref;
+	BufferObject *bp = buf->b_python_ref;
 	bp->buf = INVALID_BUFFER_VALUE;
-	buf->python_ref = NULL;
+	buf->b_python_ref = NULL;
     }
 }
 
@@ -2156,11 +2156,11 @@
     void
 python_window_free(win_T *win)
 {
-    if (win->python_ref)
+    if (win->w_python_ref != NULL)
     {
-	WindowObject *wp = win->python_ref;
+	WindowObject *wp = win->w_python_ref;
 	wp->win = INVALID_WINDOW_VALUE;
-	win->python_ref = NULL;
+	win->w_python_ref = NULL;
     }
 }
 #endif
diff --git a/src/if_ruby.c b/src/if_ruby.c
index 4396b46..f09b220 100644
--- a/src/if_ruby.c
+++ b/src/if_ruby.c
@@ -388,17 +388,19 @@
 
 void ruby_buffer_free(buf_T *buf)
 {
-    if (buf->ruby_ref) {
-	rb_hash_aset(objtbl, rb_obj_id((VALUE) buf->ruby_ref), Qnil);
-	RDATA(buf->ruby_ref)->data = NULL;
+    if (buf->b_ruby_ref)
+    {
+	rb_hash_aset(objtbl, rb_obj_id((VALUE) buf->b_ruby_ref), Qnil);
+	RDATA(buf->b_ruby_ref)->data = NULL;
     }
 }
 
 void ruby_window_free(win_T *win)
 {
-    if (win->ruby_ref) {
-	rb_hash_aset(objtbl, rb_obj_id((VALUE) win->ruby_ref), Qnil);
-	RDATA(win->ruby_ref)->data = NULL;
+    if (win->w_ruby_ref)
+    {
+	rb_hash_aset(objtbl, rb_obj_id((VALUE) win->w_ruby_ref), Qnil);
+	RDATA(win->w_ruby_ref)->data = NULL;
     }
 }
 
@@ -532,12 +534,14 @@
 
 static VALUE buffer_new(buf_T *buf)
 {
-    if (buf->ruby_ref) {
-	return (VALUE) buf->ruby_ref;
+    if (buf->b_ruby_ref)
+    {
+	return (VALUE) buf->b_ruby_ref;
     }
-    else {
+    else
+    {
 	VALUE obj = Data_Wrap_Struct(cBuffer, 0, 0, buf);
-	buf->ruby_ref = (void *) obj;
+	buf->b_ruby_ref = (void *) obj;
 	rb_hash_aset(objtbl, rb_obj_id(obj), obj);
 	return obj;
     }
@@ -688,12 +692,14 @@
 
 static VALUE window_new(win_T *win)
 {
-    if (win->ruby_ref) {
-	return (VALUE) win->ruby_ref;
+    if (win->w_ruby_ref)
+    {
+	return (VALUE) win->w_ruby_ref;
     }
-    else {
+    else
+    {
 	VALUE obj = Data_Wrap_Struct(cVimWindow, 0, 0, win);
-	win->ruby_ref = (void *) obj;
+	win->w_ruby_ref = (void *) obj;
 	rb_hash_aset(objtbl, rb_obj_id(obj), obj);
 	return obj;
     }
diff --git a/src/if_tcl.c b/src/if_tcl.c
index 8f75e0d..30f7d98 100644
--- a/src/if_tcl.c
+++ b/src/if_tcl.c
@@ -113,9 +113,10 @@
 
 /*
  *  List of Tcl interpreters who reference a vim window or buffer.
- *  Each buffer and window has it's own list in the tcl_ref struct member.
- *  We need this because Tcl can create sub-interpreters with the "interp"
- *  command, and each interpreter can reference all windows and buffers.
+ *  Each buffer and window has it's own list in the w_tcl_ref or b_tcl_ref
+ *  struct member.  We need this because Tcl can create sub-interpreters with
+ *  the "interp" command, and each interpreter can reference all windows and
+ *  buffers.
  */
 struct ref
 {
@@ -932,7 +933,7 @@
 		err = TCL_ERROR;
 		break;
 	    }
-	    err = tclsetdelcmd(interp, buf->tcl_ref, (void *)buf, objv[2]);
+	    err = tclsetdelcmd(interp, buf->b_tcl_ref, (void *)buf, objv[2]);
 	    break;
 
 	default:
@@ -1058,7 +1059,7 @@
 		err = TCL_ERROR;
 		break;
 	    }
-	    err = tclsetdelcmd(interp, win->tcl_ref, (void *)win, objv[2]);
+	    err = tclsetdelcmd(interp, win->w_tcl_ref, (void *)win, objv[2]);
 	    break;
 
 	case WIN_CURSOR:
@@ -1465,7 +1466,8 @@
     static char *
 tclgetref(interp, refstartP, prefix, vimobj, proc)
     Tcl_Interp	*interp;
-    void	**refstartP;	/* ptr to tcl_ref member of win_T/buf_T struct */
+    void	**refstartP;	/* ptr to w_tcl_ref/b_tcl-ref member of
+				   win_T/buf_T struct */
     char	*prefix;	/* "win" or "buf" */
     void	*vimobj;	/* win_T* or buf_T* */
     Tcl_ObjCmdProc *proc;	/* winselfcmd or bufselfcmd */
@@ -1533,7 +1535,7 @@
     Tcl_Interp	*interp;
     win_T	*win;
 {
-    return tclgetref(interp, &(win->tcl_ref), "win", (void *)win, winselfcmd);
+    return tclgetref(interp, &(win->w_tcl_ref), "win", (void *)win, winselfcmd);
 }
 
     static char *
@@ -1541,7 +1543,7 @@
     Tcl_Interp	*interp;
     buf_T	*buf;
 {
-    return tclgetref(interp, &(buf->tcl_ref), "buf", (void *)buf, bufselfcmd);
+    return tclgetref(interp, &(buf->b_tcl_ref), "buf", (void *)buf, bufselfcmd);
 }
 
     static int
@@ -2095,12 +2097,12 @@
 	return;
 #endif
 
-    reflist = (struct ref*)(buf->tcl_ref);
+    reflist = (struct ref *)(buf->b_tcl_ref);
     if (reflist != &refsdeleted)
     {
-	buf->tcl_ref = (void *)&refsdeleted;
+	buf->b_tcl_ref = (void *)&refsdeleted;
 	tcldelallrefs(reflist);
-	buf->tcl_ref = NULL;
+	buf->b_tcl_ref = NULL;
     }
 }
 
@@ -2116,12 +2118,12 @@
 	return;
 #endif
 
-    reflist = (struct ref*)(win->tcl_ref);
+    reflist = (struct ref*)(win->w_tcl_ref);
     if (reflist != &refsdeleted)
     {
-	win->tcl_ref = (void *)&refsdeleted;
+	win->w_tcl_ref = (void *)&refsdeleted;
 	tcldelallrefs(reflist);
-	win->tcl_ref = NULL;
+	win->w_tcl_ref = NULL;
     }
 }
 #endif
diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c
index 63faf0c..d19f50d 100644
--- a/src/if_xcmdsrv.c
+++ b/src/if_xcmdsrv.c
@@ -1273,7 +1273,7 @@
 		ga_grow(&reply, 50 + STRLEN(p_enc));
 		sprintf(reply.ga_data, "%cr%c-E %s%c-s %s%c-r ",
 						   0, 0, p_enc, 0, serial, 0);
-		reply.ga_len = 14 + STRLEN(serial);
+		reply.ga_len = 14 + STRLEN(p_enc) + STRLEN(serial);
 #else
 		ga_grow(&reply, 50);
 		sprintf(reply.ga_data, "%cr%c-s %s%c-r ", 0, 0, serial, 0);
diff --git a/src/mbyte.c b/src/mbyte.c
index bf86b5e..abdb9e8 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -2987,16 +2987,12 @@
 # ifdef HAVE_NL_LANGINFO_CODESET
     if ((s = nl_langinfo(CODESET)) == NULL || *s == NUL)
 # endif
-# ifdef MACOS
-	s = "utf-8";
-# else
 #  if defined(HAVE_LOCALE_H) || defined(X_LOCALE)
 	if ((s = setlocale(LC_CTYPE, NULL)) == NULL || *s == NUL)
 #  endif
 	    if ((s = getenv("LC_ALL")) == NULL || *s == NUL)
 		if ((s = getenv("LC_CTYPE")) == NULL || *s == NUL)
 		    s = getenv("LANG");
-# endif
 
     if (s == NULL || *s == NUL)
 	return FAIL;
diff --git a/src/option.c b/src/option.c
index bbf564a..bfe3ed6 100644
--- a/src/option.c
+++ b/src/option.c
@@ -109,6 +109,7 @@
     , PV_NU
     , PV_NUW
     , PV_OFT
+    , PV_OFU
     , PV_PATH
     , PV_PI
     , PV_PVW
@@ -181,6 +182,7 @@
 #endif
 #ifdef FEAT_COMPL_FUNC
 static char_u	*p_cfu;
+static char_u	*p_ofu;
 #endif
 static int	p_eol;
 static int	p_et;
@@ -1601,6 +1603,15 @@
 			    (char_u *)NULL, PV_NONE,
 #endif
 			    {(char_u *)8L, (char_u *)4L}},
+    {"occultfunc", "ofu", P_STRING|P_ALLOCED|P_VI_DEF|P_SECURE,
+#ifdef FEAT_COMPL_FUNC
+			    (char_u *)&p_ofu, PV_OFU,
+			    {(char_u *)"", (char_u *)0L}
+#else
+			    (char_u *)NULL, PV_NONE,
+			    {(char_u *)0L, (char_u *)0L}
+#endif
+			    },
     {"open",	    NULL,   P_BOOL|P_VI_DEF,
 			    (char_u *)NULL, PV_NONE,
 			    {(char_u *)FALSE, (char_u *)0L}},
@@ -4740,6 +4751,7 @@
 #endif
 #ifdef FEAT_COMPL_FUNC
     check_string_option(&buf->b_p_cfu);
+    check_string_option(&buf->b_p_ofu);
 #endif
 #ifdef FEAT_KEYMAP
     check_string_option(&buf->b_p_keymap);
@@ -8447,6 +8459,7 @@
 #endif
 #ifdef FEAT_COMPL_FUNC
 	case PV_CFU:	return (char_u *)&(curbuf->b_p_cfu);
+	case PV_OFU:	return (char_u *)&(curbuf->b_p_ofu);
 #endif
 	case PV_EOL:	return (char_u *)&(curbuf->b_p_eol);
 	case PV_ET:	return (char_u *)&(curbuf->b_p_et);
@@ -8778,6 +8791,7 @@
 #endif
 #ifdef FEAT_COMPL_FUNC
 	    buf->b_p_cfu = vim_strsave(p_cfu);
+	    buf->b_p_ofu = vim_strsave(p_ofu);
 #endif
 	    buf->b_p_sts = p_sts;
 	    buf->b_p_sts_nopaste = p_sts_nopaste;
diff --git a/src/po/it.po b/src/po/it.po
index ee0becf..ed25f47 100644
--- a/src/po/it.po
+++ b/src/po/it.po
@@ -13,8 +13,8 @@
 msgstr ""
 "Project-Id-Version: vim 7.0\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2005-07-02 18:00+0200\n"
-"PO-Revision-Date:  2005-07-02 18:00+0200\n"
+"POT-Creation-Date: 2005-08-25 09:30+0200\n"
+"PO-Revision-Date:  2005-08-29 21:30+0200\n"
 "Last-Translator:   Vlad Sandrini   <marco@sandrini.biz>\n"
 "Language-Team:     Italian"
 "                   Antonio Colombo <azc10@yahoo.com>"
@@ -224,13 +224,8 @@
 msgstr " Completamento Keyword (^N^P)"
 
 #. ctrl_x_mode == 0, ^P/^N compl.
-msgid " ^X mode (^E^Y^L^]^F^I^K^D^U^V^N^P)"
-msgstr " modalità ^X (^E^Y^L^]^F^I^K^D^U^V^N^P)"
-
-#. Scroll has it's own msgs, in it's place there is the msg for local
-#. * ctrl_x_mode = 0 (eg continue_status & CONT_LOCAL)  -- Acevedo
-msgid " Keyword Local completion (^N^P)"
-msgstr " Completamento Keyword Locale (^N^P)"
+msgid " ^X mode (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
+msgstr " modalità ^X (^]^D^E^F^I^K^L^N^O^P^S^U^V^Y)"
 
 msgid " Whole line completion (^L^N^P)"
 msgstr " Completamento Linea Intera (^L^N^P)"
@@ -259,15 +254,24 @@
 msgid " User defined completion (^U^N^P)"
 msgstr " Completamento definito dall'utente (^U^N^P)"
 
+msgid " Occult completion (^O^N^P)"
+msgstr " Completamento nascosto (^O^N^P)"
+
+msgid " Spelling suggestion (^S^N^P)"
+msgstr " Suggerimento ortografico (^S^N^P)"
+
+msgid " Keyword Local completion (^N^P)"
+msgstr " Completamento Keyword Locale (^N^P)"
+
 msgid "Hit end of paragraph"
 msgstr "Giunto alla fine del paragrafo"
 
-msgid "'thesaurus' option is empty"
-msgstr "l'opzione 'thesaurus' è vuota"
-
 msgid "'dictionary' option is empty"
 msgstr "l'opzione 'dictionary' è vuota"
 
+msgid "'thesaurus' option is empty"
+msgstr "l'opzione 'thesaurus' è vuota"
+
 #, c-format
 msgid "Scanning dictionary: %s"
 msgstr "Scansione dizionario: %s"
@@ -669,6 +673,13 @@
 "\n"
 "# variabili globali:\n"
 
+msgid ""
+"\n"
+"\tLast set from "
+msgstr ""
+"\n"
+"\tImpostata l'ultima volta da "
+
 msgid "Entering Debug mode.  Type \"cont\" to continue."
 msgstr "Entro modalità Debug.  Batti \"cont\" per continuare."
 
@@ -779,90 +790,6 @@
 msgstr "E168: :finish usato fuori da file di comandi"
 
 #, c-format
-msgid "Page %d"
-msgstr "Pagina %d"
-
-msgid "No text to be printed"
-msgstr "Manca testo da stampare"
-
-#, c-format
-msgid "Printing page %d (%d%%)"
-msgstr "Sto stampando pagina %d (%d%%)"
-
-#, c-format
-msgid " Copy %d of %d"
-msgstr " Copia %d di %d"
-
-#, c-format
-msgid "Printed: %s"
-msgstr "Stampato: %s"
-
-msgid "Printing aborted"
-msgstr "Stampa non completata'"
-
-msgid "E455: Error writing to PostScript output file"
-msgstr "E455: Errore in scrittura a file PostScript di output"
-
-#, c-format
-msgid "E624: Can't open file \"%s\""
-msgstr "E624: Non riesco ad aprire il file \"%s\""
-
-#, c-format
-msgid "E457: Can't read PostScript resource file \"%s\""
-msgstr "E457: Non riesco a leggere file risorse PostScript \"%s\""
-
-#, c-format
-msgid "E618: file \"%s\" is not a PostScript resource file"
-msgstr "E618: file \"%s\" non è un file di risorse PostScript"
-
-#, c-format
-msgid "E619: file \"%s\" is not a supported PostScript resource file"
-msgstr "E619: file \"%s\" non è un file di risorse PostScript supportato"
-
-#, c-format
-msgid "E621: \"%s\" resource file has wrong version"
-msgstr "E621: il file di risorse \"%s\" ha una versione sbagliata"
-
-msgid "E673: Incompatible multi-byte encoding and character set."
-msgstr "E673: Codifica e set di caratteri multi-byte non compatibili."
-
-msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
-msgstr "E674: printmbcharset non può essere nullo con codifica multi-byte."
-
-msgid "E675: No default font specified for multi-byte printing."
-msgstr "E675: Font predefinito non specificato per stampa multi-byte."
-
-msgid "E324: Can't open PostScript output file"
-msgstr "E324: Non riesco ad aprire file PostScript di output"
-
-#, c-format
-msgid "E456: Can't open file \"%s\""
-msgstr "E456: Non riesco ad aprire il file \"%s\""
-
-msgid "E456: Can't find PostScript resource file \"prolog.ps\""
-msgstr "E456: Non trovo file risorse PostScript \"prolog.ps\""
-
-msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
-msgstr "E456: Non trovo file risorse PostScript \"cidfont.ps\""
-
-#, c-format
-msgid "E456: Can't find PostScript resource file \"%s.ps\""
-msgstr "E456: Non trovo file risorse PostScript \"%s.ps\""
-
-#, c-format
-msgid "E620: Unable to convert to print encoding \"%s\""
-msgstr "E620: Impossibile convertire a codifica di stampa \"%s\""
-
-msgid "Sending to printer..."
-msgstr "Invio a stampante..."
-
-msgid "E365: Failed to print PostScript file"
-msgstr "E365: Non riesco ad aprire file PostScript"
-
-msgid "Print job sent."
-msgstr "Richiesta di stampa inviata."
-
-#, c-format
 msgid "Current %slanguage: \"%s\""
 msgstr "Lingua %sin uso: \"%s\""
 
@@ -965,6 +892,14 @@
 msgstr "Riscrittura del file esistente \"%s\"?"
 
 #, c-format
+msgid "Swap file \"%s\" exists, overwrite anyway?"
+msgstr "Il file swap \"%s\" esiste già, sovrascrivo?"
+
+#, c-format
+msgid "E768: Swap file exists: %s (:silent! overrides)"
+msgstr "E768: File swap esistente: %s (:silent! per sovrascriverlo)"
+
+#, c-format
 msgid "E141: No file name for buffer %ld"
 msgstr "E141: Manca nome file per il buffer %ld"
 
@@ -1221,7 +1156,7 @@
 
 msgid "E183: User defined commands must start with an uppercase letter"
 msgstr ""
-"E183 I comandi definiti dall'utente devono iniziare con lettera maiuscola"
+"E183: I comandi definiti dall'utente devono iniziare con lettera maiuscola"
 
 #, c-format
 msgid "E184: No such user-defined command: %s"
@@ -2163,6 +2098,99 @@
 msgid "E256: Hangul automata ERROR"
 msgstr "E256: ERRORE processore Hangul"
 
+msgid "E550: Missing colon"
+msgstr "E550: Manca ':'"
+
+msgid "E551: Illegal component"
+msgstr "E551: Componente non valido"
+
+msgid "E552: digit expected"
+msgstr "E552: aspettavo un numero"
+
+#, c-format
+msgid "Page %d"
+msgstr "Pagina %d"
+
+msgid "No text to be printed"
+msgstr "Manca testo da stampare"
+
+#, c-format
+msgid "Printing page %d (%d%%)"
+msgstr "Sto stampando pagina %d (%d%%)"
+
+#, c-format
+msgid " Copy %d of %d"
+msgstr " Copia %d di %d"
+
+#, c-format
+msgid "Printed: %s"
+msgstr "Stampato: %s"
+
+msgid "Printing aborted"
+msgstr "Stampa non completata'"
+
+msgid "E455: Error writing to PostScript output file"
+msgstr "E455: Errore in scrittura a file PostScript di output"
+
+#, c-format
+msgid "E624: Can't open file \"%s\""
+msgstr "E624: Non riesco ad aprire il file \"%s\""
+
+#, c-format
+msgid "E457: Can't read PostScript resource file \"%s\""
+msgstr "E457: Non riesco a leggere file risorse PostScript \"%s\""
+
+#, c-format
+msgid "E618: file \"%s\" is not a PostScript resource file"
+msgstr "E618: file \"%s\" non è un file di risorse PostScript"
+
+#, c-format
+msgid "E619: file \"%s\" is not a supported PostScript resource file"
+msgstr "E619: file \"%s\" non è un file di risorse PostScript supportato"
+
+#, c-format
+msgid "E621: \"%s\" resource file has wrong version"
+msgstr "E621: il file di risorse \"%s\" ha una versione sbagliata"
+
+msgid "E673: Incompatible multi-byte encoding and character set."
+msgstr "E673: Codifica e set di caratteri multi-byte non compatibili."
+
+msgid "E674: printmbcharset cannot be empty with multi-byte encoding."
+msgstr "E674: printmbcharset non può essere nullo con codifica multi-byte."
+
+msgid "E675: No default font specified for multi-byte printing."
+msgstr "E675: Font predefinito non specificato per stampa multi-byte."
+
+msgid "E324: Can't open PostScript output file"
+msgstr "E324: Non riesco ad aprire file PostScript di output"
+
+#, c-format
+msgid "E456: Can't open file \"%s\""
+msgstr "E456: Non riesco ad aprire il file \"%s\""
+
+msgid "E456: Can't find PostScript resource file \"prolog.ps\""
+msgstr "E456: Non trovo file risorse PostScript \"prolog.ps\""
+
+msgid "E456: Can't find PostScript resource file \"cidfont.ps\""
+msgstr "E456: Non trovo file risorse PostScript \"cidfont.ps\""
+
+#, c-format
+msgid "E456: Can't find PostScript resource file \"%s.ps\""
+msgstr "E456: Non trovo file risorse PostScript \"%s.ps\""
+
+#, c-format
+msgid "E620: Unable to convert to print encoding \"%s\""
+msgstr "E620: Impossibile convertire a codifica di stampa \"%s\""
+
+msgid "Sending to printer..."
+msgstr "Invio a stampante..."
+
+msgid "E365: Failed to print PostScript file"
+msgstr "E365: Non riesco ad aprire file PostScript"
+
+msgid "Print job sent."
+msgstr "Richiesta di stampa inviata."
+
 msgid "Add a new database"
 msgstr "Aggiungi un nuovo database"
 
@@ -2612,8 +2640,8 @@
 msgid "E251: VIM instance registry property is badly formed.  Deleted!"
 msgstr "E251: Proprietà registry relative a VIM non adeguate.  Cancellate!"
 
-msgid "Unknown option"
-msgstr "Opzione inesistente"
+msgid "Unknown option argument"
+msgstr "Argomento di opzione sconosciuto"
 
 msgid "Too many edit arguments"
 msgstr "Troppi argomenti di edit"
@@ -2621,8 +2649,8 @@
 msgid "Argument missing after"
 msgstr "Argomento mancante dopo"
 
-msgid "Garbage after option"
-msgstr "Spazzatura dopo opzione"
+msgid "Garbage after option argument"
+msgstr "Spazzatura dopo argomento di opzione"
 
 msgid "Too many \"+command\", \"-c command\" or \"--cmd command\" arguments"
 msgstr "Troppi argomenti \"+command\", \"-c command\" o \"--cmd command\""
@@ -2630,6 +2658,10 @@
 msgid "Invalid argument for"
 msgstr "Argomento non valido per"
 
+#, c-format
+msgid "%d files to edit\n"
+msgstr "%d file da elaborare\n"
+
 msgid "This Vim was not compiled with the diff feature."
 msgstr "Vim non compilato con opzione 'diff'."
 
@@ -2651,10 +2683,6 @@
 msgid "Vim: Warning: Input is not from a terminal\n"
 msgstr "Vim: Attenzione: Input non proveniente da un terminale\n"
 
-#, c-format
-msgid "%d files to edit\n"
-msgstr "%d file da elaborare\n"
-
 #. just in case..
 msgid "pre-vimrc command line"
 msgstr "linea comandi prima di vimrc"
@@ -3549,8 +3577,9 @@
 msgid "E328: Menu only exists in another mode"
 msgstr "E328: I Menu esistono solo in un'altra modalità"
 
-msgid "E329: No menu of that name"
-msgstr "E329: Nessun Menu con quel nome"
+#, c-format
+msgid "E329: No menu \"%s\""
+msgstr "E329: Nessun Menu \"%s\""
 
 msgid "E330: Menu path must not lead to a sub-menu"
 msgstr "E330: Il percorso del Menu non deve condurre a un sotto-Menu"
@@ -3609,17 +3638,14 @@
 msgid "Interrupt: "
 msgstr "Interruzione: "
 
-msgid "Hit ENTER or type command to continue"
-msgstr "Batti INVIO o un comando per proseguire"
+msgid "Press ENTER or type command to continue"
+msgstr "Premi INVIO o un comando per proseguire"
 
 msgid "-- More --"
 msgstr "-- Ancora --"
 
-msgid " (RET/BS: line, SPACE/b: page, d/u: half page, q: quit)"
-msgstr " (RET/BS: linea, SPAZIO/b: pagina, d/u: mezza pagina, q: esci)"
-
-msgid " (RET: line, SPACE: page, d: half page, q: quit)"
-msgstr " (RET: linea, SPAZIO: pagina, d: mezza pagina, q: esci)"
+msgid " SPACE/d/j: screen/page/line down, b/u/k: up, q: quit "
+msgstr " SPAZIO/d/j: schermo/pagina/riga giù, b/u/k: su, q: abbandona"
 
 msgid "Question"
 msgstr "Domanda"
@@ -3657,6 +3683,12 @@
 msgid "E338: Sorry, no file browser in console mode"
 msgstr "E338: Spiacente, niente esplorazione file in modalità console"
 
+msgid "E766: Insufficient arguments for printf()"
+msgstr "E766: Argomenti non sufficienti per printf()"
+
+msgid "E767: Too many arguments to printf()"
+msgstr "E767: Troppi argomenti per printf()"
+
 msgid "W10: Warning: Changing a readonly file"
 msgstr "W10: Attenzione: Modifica a un file in sola-lettura"
 
@@ -3776,15 +3808,6 @@
 msgid "E347: No more file \"%s\" found in path"
 msgstr "E347: Nessun altro file \"%s\" trovato nel percorso"
 
-msgid "E550: Missing colon"
-msgstr "E550: Manca ':'"
-
-msgid "E551: Illegal component"
-msgstr "E551: Componente non valido"
-
-msgid "E552: digit expected"
-msgstr "E552: aspettavo un numero"
-
 #. Get here when the server can't be found.
 msgid "Cannot connect to Netbeans #2"
 msgstr "Non posso connettermi a Netbeans #2"
@@ -3964,13 +3987,6 @@
 msgid "E520: Not allowed in a modeline"
 msgstr "E520: Non consentito in una 'modeline'"
 
-msgid ""
-"\n"
-"\tLast set from "
-msgstr ""
-"\n"
-"\tImpostata l'ultima volta da "
-
 msgid "E521: Number required after ="
 msgstr "E521: Ci vuole un numero dopo ="
 
@@ -4482,6 +4498,10 @@
 msgstr "E71: Carattere non ammesso dopo %s%%"
 
 #, c-format
+msgid "E769: Missing ] after %s["
+msgstr "E769: Manca ] dopo %s["
+
+#, c-format
 msgid "E554: Syntax error in %s{...}"
 msgstr "E554: Errore sintattico in %s{...}"
 
@@ -4607,29 +4627,51 @@
 msgid "E758: Truncated spell file"
 msgstr "E758: File ortografico troncato"
 
+#, c-format
+msgid "Trailing text in %s line %d: %s"
+msgstr "Testo in eccesso in %s linea %d: %s"
+
+#, c-format
+msgid "Affix name too long in %s line %d: %s"
+msgstr "Nome affisso troppo lungo in %s linea %d: %s"
+
+msgid "E761: Format error in affix file FOL, LOW or UPP"
+msgstr "E761: Errore di formato nel file affissi FOL, LOW o UPP"
+
+msgid "E762: Character in FOL, LOW or UPP is out of range"
+msgstr "E762: Carattere fuori intervallo in FOL, LOW o UPP"
+
+msgid "Compressing word tree..."
+msgstr "Comprimo albero di parole..."
+
 msgid "E756: Spell checking is not enabled"
 msgstr "E756: Il controllo ortografico non è abilitato"
 
 #, c-format
-msgid "Warning: Cannot find word list \"%s\""
-msgstr "Attenzione: Non trovo lista parole \"%s\""
+msgid "Warning: Cannot find word list \"%s.%s.spl\" or \"%s.ascii.spl\""
+msgstr "Attenzione: Non trovo lista parole \"%s.%s.spl\" o \"%s.ascii.spl\""
 
 #, c-format
 msgid "Reading spell file \"%s\""
 msgstr "Lettura file ortografico \"%s\""
 
-msgid "E757: Wrong file ID in spell file"
-msgstr "E757: File ID errato nel file ortografico"
+msgid "E757: This does not look like a spell file"
+msgstr "E757: Questo non sembra un file ortografico"
+
+msgid "E771: Old spell file, needs to be updated"
+msgstr "E771: File ortografico obsoleto, necessario aggiornamento"
+
+msgid "E772: Spell file is for newer version of Vim"
+msgstr "E772: Il file ortografico è per versioni di Vim più recenti"
+
+msgid "E770: Unsupported section in spell file"
+msgstr "E770: Sezione non supportata nel file ortografico"
 
 #, c-format
 msgid "Warning: region %s not supported"
 msgstr "Attenzione: regione %s non supportata"
 
 #, c-format
-msgid "Affix name too long in %s line %d: %s"
-msgstr "Nome affisso troppo lungo in %s linea %d: %s"
-
-#, c-format
 msgid "Reading affix file %s ..."
 msgstr "Lettura file affissi %s ..."
 
@@ -4646,8 +4688,28 @@
 msgstr "Conversione in %s non supportata"
 
 #, c-format
-msgid "Trailing text in %s line %d: %s"
-msgstr "Testo in eccesso in %s linea %d: %s"
+msgid "Invalid value for FLAG in %s line %d: %s"
+msgstr "Valore di FLAG non valido in %s linea %d: %s"
+
+#, c-format
+msgid "FLAG after using flags in %s line %d: %s"
+msgstr "FLAG dopo l'uso di flags in %s linea %d: %s"
+
+#, c-format
+msgid "Character used for SLASH must be ASCII; in %s line %d: %s"
+msgstr "Il carattere usato per SLASH deve essere ASCII; in %s linea %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMAX value in %s line %d: %s"
+msgstr "Valore errato per COMPOUNDMAX in %s linea %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDMIN value in %s line %d: %s"
+msgstr "Valore errato per COMPOUNDMIN in %s linea %d: %s"
+
+#, c-format
+msgid "Wrong COMPOUNDSYLMAX value in %s line %d: %s"
+msgstr "Valore errato per COMPOUNDSYLMAX in %s linea %d: %s"
 
 #, c-format
 msgid "Expected Y or N in %s line %d: %s"
@@ -4658,16 +4720,8 @@
 msgstr "Affisso duplicato in %s linea %d: %s"
 
 #, c-format
-msgid "Duplicate FOL in %s line %d"
-msgstr "FOL duplicato in %s linea %d"
-
-#, c-format
-msgid "Duplicate LOW in %s line %d"
-msgstr "LOW duplicato in %s linea %d"
-
-#, c-format
-msgid "Duplicate UPP in %s line %d"
-msgstr "UPP duplicato in %s linea %d"
+msgid "Broken condition in %s line %d: %s"
+msgstr "Condizione non rispettata in %s linea %d: %s"
 
 #, c-format
 msgid "Expected REP count in %s line %d"
@@ -4682,8 +4736,24 @@
 msgstr "Carattere duplicato in MAP in %s linea %d"
 
 #, c-format
-msgid "Unrecognized item in %s line %d: %s"
-msgstr "Elemento non riconosciuto in %s linea %d: %s"
+msgid "Unrecognized or duplicate item in %s line %d: %s"
+msgstr "Elemento non riconosciuto o duplicato in %s linea %d: %s"
+
+#, c-format
+msgid "Missing FOL/LOW/UPP line in %s"
+msgstr "Linea FOL/LOW/UPP mancante in %s"
+
+msgid "COMPOUNDSYLMAX used without SYLLABLE"
+msgstr "COMPOUNDSYLMAX usato senza SYLLABLE"
+
+msgid "Too many postponed prefixes"
+msgstr "Troppi prefissi posposti"
+
+msgid "Too many compound flags"
+msgstr "Troppi flag composti"
+
+msgid "Too many posponed prefixes and/or compound flags"
+msgstr "Troppi prefissi posposti e/o flag composti"
 
 #, c-format
 msgid "Missing SOFO%s line in %s"
@@ -4694,8 +4764,16 @@
 msgstr "Linee sia SAL che SOFO in %s"
 
 #, c-format
-msgid "Missing FOL/LOW/UPP line in %s"
-msgstr "Linea FOL/LOW/UPP mancante in %s"
+msgid "Flag is not a number in %s line %d: %s"
+msgstr "Il flag non è un numero in %s linea %d: %s"
+
+#, c-format
+msgid "Illegal flag in %s line %d: %s"
+msgstr "Flag non ammesso in %s linea %d: %s"
+
+#, c-format
+msgid "%s value differs from what is used in another .aff file"
+msgstr "Il valore di %s è diverso da quello usato in un altro file .aff"
 
 #, c-format
 msgid "Reading dictionary file %s ..."
@@ -4714,8 +4792,16 @@
 msgstr "Parola duplicata in %s linea %d: %s"
 
 #, c-format
-msgid "Ignored %d words with non-ASCII characters"
-msgstr "%d parole con caratteri non-ASCII ignorate"
+msgid "First duplicate word in %s line %d: %s"
+msgstr "Prima parola duplicata in %s linea %d: %s"
+
+#, c-format
+msgid "%d duplicate word(s) in %s"
+msgstr "%d parole duplicate in %s"
+
+#, c-format
+msgid "Ignored %d word(s) with non-ASCII characters in %s"
+msgstr "%d parole con caratteri non-ASCII ignorate in %s"
 
 #, c-format
 msgid "Reading word file %s ..."
@@ -4750,6 +4836,10 @@
 msgstr "Flag non riconosciuti in %s linea %d: %s"
 
 #, c-format
+msgid "Ignored %d words with non-ASCII characters"
+msgstr "%d parole con caratteri non-ASCII ignorate"
+
+#, c-format
 msgid "Compressed %d of %d nodes; %d%% remaining"
 msgstr "%d di %d nodi compressi; ne restano %d%%"
 
@@ -4763,8 +4853,8 @@
 msgid "E755: Invalid region in %s"
 msgstr "E755: Regione non valida in %s"
 
-msgid "Compressing word tree..."
-msgstr "Comprimo albero di parole..."
+msgid "Warning: both compounding and NOBREAK specified"
+msgstr "Attenzione: specificati sia composizione sia NOBREAK"
 
 #, c-format
 msgid "Writing spell file %s ..."
@@ -4780,11 +4870,9 @@
 msgid "E764: 'spellfile' is not set"
 msgstr "E764: opzione 'spellfile' vuota"
 
-msgid "E761: Format error in affix file FOL, LOW or UPP"
-msgstr "E761: Errore di formato nel file affissi FOL, LOW o UPP"
-
-msgid "E762: Character in FOL, LOW or UPP is out of range"
-msgstr "E762: Carattere fuori intervallo in FOL, LOW o UPP"
+#, c-format
+msgid "E765: 'spellfile' does not have %ld enties"
+msgstr "E765: 'spellfile' non ha %ld elementi"
 
 msgid "E763: Word characters differ between spell files"
 msgstr "E763: Caratteri di parola differenti nei file ortografici"
@@ -4792,27 +4880,19 @@
 msgid "Sorry, no suggestions"
 msgstr "Spiacente, nessun suggerimento"
 
+#, c-format
+msgid "Sorry, only %ld suggestions"
+msgstr "Spiacente, solo %ld suggerimenti"
+
 #. avoid more prompt
 #, c-format
 msgid "Change \"%.*s\" to:"
 msgstr "Cambiare \"%.*s\" in:"
 
 #, c-format
-msgid "%2d \"%s\""
-msgstr "%2d \"%s\""
-
-#, c-format
 msgid " < \"%.*s\""
 msgstr " < \"%.*s\""
 
-#, c-format
-msgid " (%s%d - %d)"
-msgstr " (%s%d - %d)"
-
-#, c-format
-msgid " (%d)"
-msgstr " (%d)"
-
 msgid "E752: No previous spell replacement"
 msgstr "E752: Nessuna sostituzione ortografica precedente"
 
diff --git a/src/proto/gui_w32.pro b/src/proto/gui_w32.pro
index 491971c..31f44aa 100644
--- a/src/proto/gui_w32.pro
+++ b/src/proto/gui_w32.pro
@@ -82,11 +82,11 @@
 void gui_mch_drawsign __ARGS((int row, int col, int typenr));
 void *gui_mch_register_sign __ARGS((char_u *signfile));
 void gui_mch_destroy_sign __ARGS((void *sign));
+int multiline_balloon_available __ARGS((void));
 void gui_mch_disable_beval_area __ARGS((BalloonEval *beval));
 void gui_mch_enable_beval_area __ARGS((BalloonEval *beval));
 void gui_mch_post_balloon __ARGS((BalloonEval *beval, char_u *mesg));
 BalloonEval *gui_mch_create_beval_area __ARGS((void *target, char_u *mesg, void (*mesgCB)(BalloonEval *, int), void *clientData));
 void gui_mch_destroy_beval_area __ARGS((BalloonEval *beval));
 void netbeans_draw_multisign_indicator __ARGS((int row));
-int multiline_balloon_available __ARGS((void));
 /* vim: set ft=c : */
diff --git a/src/proto/search.pro b/src/proto/search.pro
index 15e8b30..8e222aa 100644
--- a/src/proto/search.pro
+++ b/src/proto/search.pro
@@ -26,7 +26,7 @@
 int current_word __ARGS((oparg_T *oap, long count, int include, int bigword));
 int current_sent __ARGS((oparg_T *oap, long count, int include));
 int current_block __ARGS((oparg_T *oap, long count, int include, int what, int other));
-int current_tagblock __ARGS((oparg_T *oap, long count, int include));
+int current_tagblock __ARGS((oparg_T *oap, long count_arg, int include));
 int current_par __ARGS((oparg_T *oap, long count, int include, int type));
 int current_quote __ARGS((oparg_T *oap, long count, int include, int quotechar));
 int linewhite __ARGS((linenr_T lnum));
diff --git a/src/quickfix.c b/src/quickfix.c
index bf0b0b8..d595c4f 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -187,7 +187,7 @@
 	char	*pattern;
     }		    fmt_pat[FMT_PATTERNS] =
 		    {
-			{'f', "\\f\\+"},
+			{'f', ".\\+"},	    /* only used when at end */
 			{'n', "\\d\\+"},
 			{'l', "\\d\\+"},
 			{'c', "\\d\\+"},
@@ -319,16 +319,25 @@
 			ptr += 10;
 		    }
 #endif
-		    if (*efmp == 'f' && efmp[1] != NUL
-					 && efmp[1] != '\\' && efmp[1] != '%')
+		    if (*efmp == 'f' && efmp[1] != NUL)
 		    {
-			/* A file name may contain spaces, but this isn't in
-			 * "\f".  For "%f:%l:%m" there may be a ":" in the
-			 * file name.  Use ".\{-1,}x" instead (x is the next
-			 * character), the requirement that :999: follows
-			 * should work. */
-			STRCPY(ptr, ".\\{-1,}");
-			ptr += 7;
+			if (efmp[1] != '\\' && efmp[1] != '%')
+			{
+			    /* A file name may contain spaces, but this isn't
+			     * in "\f".  For "%f:%l:%m" there may be a ":" in
+			     * the file name.  Use ".\{-1,}x" instead (x is
+			     * the next character), the requirement that :999:
+			     * follows should work. */
+			    STRCPY(ptr, ".\\{-1,}");
+			    ptr += 7;
+			}
+			else
+			{
+			    /* File name followed by '\\' or '%': include as
+			     * many file name chars as possible. */
+			    STRCPY(ptr, "\\f\\+");
+			    ptr += 4;
+			}
 		    }
 		    else
 		    {
diff --git a/src/spell.c b/src/spell.c
index 56c891d..2c21d94 100644
--- a/src/spell.c
+++ b/src/spell.c
@@ -7654,7 +7654,7 @@
 		break;
 	    if (*spf == NUL)
 	    {
-		EMSGN(_("E765: 'spellfile' does not have %ld enties"), index);
+		EMSGN(_("E765: 'spellfile' does not have %ld entries"), index);
 		return;
 	    }
 	}
diff --git a/src/structs.h b/src/structs.h
index 5473510..9c63407 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1288,6 +1288,7 @@
 #endif
 #ifdef FEAT_COMPL_FUNC
     char_u	*b_p_cfu;	/* 'completefunc' */
+    char_u	*b_p_ofu;	/* 'occultfunc' */
 #endif
     int		b_p_eol;	/* 'endofline' */
     int		b_p_et;		/* 'expandtab' */
@@ -1410,23 +1411,23 @@
 #endif
 
 #ifdef FEAT_MZSCHEME
-    void	*mzscheme_ref;	/* The MzScheme reference to this buffer */
+    void	*b_mzscheme_ref; /* The MzScheme reference to this buffer */
 #endif
 
 #ifdef FEAT_PERL
-    void	*perl_private;
+    void	*b_perl_private;
 #endif
 
 #ifdef FEAT_PYTHON
-    void	*python_ref;	/* The Python reference to this buffer */
+    void	*b_python_ref;	/* The Python reference to this buffer */
 #endif
 
 #ifdef FEAT_TCL
-    void	*tcl_ref;
+    void	*b_tcl_ref;
 #endif
 
 #ifdef FEAT_RUBY
-    void	*ruby_ref;
+    void	*b_ruby_ref;
 #endif
 
 #ifdef FEAT_SYN_HL
@@ -1810,31 +1811,30 @@
 
 
 #ifdef FEAT_MZSCHEME
-    void	    *mzscheme_ref;	/* The MzScheme value referring to this window */
+    void	*w_mzscheme_ref;	/* The MzScheme value for this window */
 #endif
 
 #ifdef FEAT_PERL
-    void	*perl_private;
+    void	*w_perl_private;
 #endif
 
 #ifdef FEAT_PYTHON
-    void	*python_ref;	/* The Python value referring to this
-					   window */
+    void	*w_python_ref;		/* The Python value for this window */
 #endif
 
 #ifdef FEAT_TCL
-    void	*tcl_ref;
+    void	*w_tcl_ref;
 #endif
 
 #ifdef FEAT_RUBY
-    void	*ruby_ref;
+    void	*w_ruby_ref;
 #endif
 };
 
 /*
  * Arguments for operators.
  */
-typedef struct oparg
+typedef struct oparg_S
 {
     int		op_type;	/* current pending operator type */
     int		regname;	/* register to use for the operator */
@@ -1865,7 +1865,7 @@
 /*
  * Arguments for Normal mode commands.
  */
-typedef struct cmdarg
+typedef struct cmdarg_S
 {
     oparg_T	*oap;		/* Operator arguments */
     int		prechar;	/* prefix character (optional, always 'g') */
diff --git a/src/version.h b/src/version.h
index 2ea46ab..0db9ab2 100644
--- a/src/version.h
+++ b/src/version.h
@@ -36,5 +36,5 @@
 #define VIM_VERSION_NODOT	"vim70aa"
 #define VIM_VERSION_SHORT	"7.0aa"
 #define VIM_VERSION_MEDIUM	"7.0aa ALPHA"
-#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 30)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Aug 30, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 1)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Sep 1, compiled "
diff --git a/src/vim.h b/src/vim.h
index 2760330..c20541c 100644
--- a/src/vim.h
+++ b/src/vim.h
@@ -68,6 +68,10 @@
 # ifndef HAVE_CONFIG_H
 #  define UNIX
 # endif
+# ifdef HAVE_STRINGS_H
+/* On Mac OS X strings.h exists but produces an annoying warning message. */
+#  undef HAVE_STRINGS_H
+# endif
 #endif
 #if defined(MACOS_X) || defined(MACOS_CLASSIC)
 #  define MACOS