diff --git a/src/dosinst.c b/src/dosinst.c
index deaf15f..efc6fdf 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -2080,7 +2080,7 @@
     printf("    or $HOME directory\n");
 #ifdef WIN3264
     printf("-register-OLE");
-    printf("    Register gvim for OLE\n");
+    printf("    Ignored\n");
 #endif
     printf("\n");
 }
diff --git a/src/edit.c b/src/edit.c
index 7028dd3..bf70961 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -1970,8 +1970,7 @@
     {
 	/* Infer case of completed part -- webb */
 	/* Use IObuff, str would change text in buffer! */
-	STRNCPY(IObuff, str, len);
-	IObuff[len] = NUL;
+	vim_strncpy(IObuff, str, len);
 
 	/* Rule 1: Were any chars converted to lower? */
 	for (idx = 0; idx < completion_length; ++idx)
@@ -2010,7 +2009,7 @@
 	}
 
 	/* Copy the original case of the part we typed */
-	STRNCPY(IObuff, original_text, completion_length);
+	vim_strncpy(IObuff, original_text, completion_length);
 
 	return ins_compl_add(IObuff, len, fname, dir, reuse);
     }
@@ -3053,17 +3052,17 @@
 			    tmp_ptr = find_word_end(tmp_ptr);
 			    if (tmp_ptr > ptr)
 			    {
-				if (*ptr != ')' && IObuff[len-1] != TAB)
+				if (*ptr != ')' && IObuff[len - 1] != TAB)
 				{
-				    if (IObuff[len-1] != ' ')
+				    if (IObuff[len - 1] != ' ')
 					IObuff[len++] = ' ';
 				    /* IObuf =~ "\k.* ", thus len >= 2 */
 				    if (p_js
-					&& (IObuff[len-2] == '.'
+					&& (IObuff[len - 2] == '.'
 					    || (vim_strchr(p_cpo, CPO_JOINSP)
 								       == NULL
-						&& (IObuff[len-2] == '?'
-						    || IObuff[len-2] == '!'))))
+						&& (IObuff[len - 2] == '?'
+						 || IObuff[len - 2] == '!'))))
 					IObuff[len++] = ' ';
 				}
 				/* copy as much as posible of the new word */
@@ -3741,8 +3740,7 @@
 				      curr_match->number, completion_matches);
 		else
 		    sprintf((char *)IObuff, _("match %d"), curr_match->number);
-		STRNCPY(match_ref, IObuff, 30 );
-		match_ref[30] = '\0';
+		vim_strncpy(match_ref, IObuff, 30);
 		edit_submode_extra = match_ref;
 		edit_submode_highl = HLF_R;
 		if (dollar_vcol)
diff --git a/src/eval.c b/src/eval.c
index a1404c2..6adfb4d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6197,8 +6197,7 @@
     else
     {
 	/* Avoid a malloc/free by using buf[]. */
-	STRNCPY(buf, key, len);
-	buf[len] = NUL;
+	vim_strncpy(buf, key, len);
 	akey = buf;
     }
 
@@ -10681,10 +10680,7 @@
 	message = get_tv_string_chk(&argvars[0]);
 	if (argvars[1].v_type != VAR_UNKNOWN
 	    && (defstr = get_tv_string_buf_chk(&argvars[1], buf)) != NULL)
-	{
-	    STRNCPY(IObuff, defstr, IOSIZE);
-	    IObuff[IOSIZE - 1] = NUL;
-	}
+	    vim_strncpy(IObuff, defstr, IOSIZE - 1);
 	else
 	    IObuff[0] = NUL;
 	if (message != NULL && defstr != NULL
diff --git a/src/ex_cmds2.c b/src/ex_cmds2.c
index b3faec8..923faf9 100644
--- a/src/ex_cmds2.c
+++ b/src/ex_cmds2.c
@@ -5511,16 +5511,14 @@
         switch (dsc_line.type)
         {
         case PRT_DSC_TITLE_TYPE:
-            STRNCPY(resource->title, dsc_line.string, dsc_line.len);
-            resource->title[dsc_line.len] = '\0';
+            vim_strncpy(resource->title, dsc_line.string, dsc_line.len);
             seen_title = TRUE;
             if (seen_version)
                 seen_all = TRUE;
             break;
 
         case PRT_DSC_VERSION_TYPE:
-            STRNCPY(resource->version, dsc_line.string, dsc_line.len);
-            resource->version[dsc_line.len] = '\0';
+            vim_strncpy(resource->version, dsc_line.string, dsc_line.len);
             seen_version = TRUE;
             if (seen_title)
                 seen_all = TRUE;
@@ -5862,8 +5860,7 @@
     fontname = (char *)alloc(name_len + 1);
     if (fontname == NULL)
         return FALSE;
-    STRNCPY(fontname, name, name_len);
-    fontname[name_len] = '\0';
+    vim_strncpy((char_u *)fontname, name, name_len);
     prt_ps_mb_font.ps_fontname[font] = fontname;
 
     return TRUE;
@@ -5977,7 +5974,6 @@
     double      bottom;
 #ifdef FEAT_MBYTE
     int         cmap;
-    int         pmcs_len;
     char_u	*p_encoding;
     struct prt_ps_encoding_S *p_mbenc;
     struct prt_ps_encoding_S *p_mbenc_first;
@@ -6035,7 +6031,7 @@
     if (prt_out_mbyte)
     {
         /* Build CMap name - will be same for all multi-byte fonts used */
-        prt_cmap[0] = '\0';
+        prt_cmap[0] = NUL;
 
         prt_custom_cmap = prt_out_mbyte && p_mbchar == NULL;
 
@@ -6051,26 +6047,26 @@
             /* Add charset name if not empty */
             if (p_mbchar->cmap_charset != NULL)
             {
-                STRCAT(prt_cmap, p_mbchar->cmap_charset);
+                vim_strncpy((char_u *)prt_cmap,
+		      (char_u *)p_mbchar->cmap_charset, sizeof(prt_cmap) - 3);
                 STRCAT(prt_cmap, "-");
             }
         }
         else
         {
             /* Add custom CMap character set name */
-            pmcs_len = STRLEN(p_pmcs);
-            if (pmcs_len == 0)
+            if (*p_pmcs == NUL)
             {
                 EMSG(_("E674: printmbcharset cannot be empty with multi-byte encoding."));
                 return FALSE;
             }
-            STRNCPY(prt_cmap, p_pmcs, STRLEN(p_pmcs));
-            prt_cmap[pmcs_len] = '\0';
+            vim_strncpy((char_u *)prt_cmap, p_pmcs, sizeof(prt_cmap) - 3);
             STRCAT(prt_cmap, "-");
         }
 
         /* CMap name ends with (optional) encoding name and -H for horizontal */
-        if (p_mbenc->cmap_encoding != NULL)
+        if (p_mbenc->cmap_encoding != NULL && STRLEN(prt_cmap)
+		      + STRLEN(p_mbenc->cmap_encoding) + 3 < sizeof(prt_cmap))
         {
             STRCAT(prt_cmap, p_mbenc->cmap_encoding);
             STRCAT(prt_cmap, "-");
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 1192622..c96f114 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -3239,10 +3239,7 @@
 	}
 	ss = alloc((unsigned)len + 1);
 	if (ss)
-	{
-	    STRNCPY(ss, xp->xp_files[0], len);
-	    ss[len] = NUL;
-	}
+	    vim_strncpy(ss, xp->xp_files[0], (size_t)len);
 	findex = -1;			    /* next p_wc gets first one */
     }
 
@@ -3749,8 +3746,7 @@
 	retval = alloc(len + 4);
 	if (retval != NULL)
 	{
-	    STRNCPY(retval, fname, len);
-	    retval[len] = NUL;
+	    vim_strncpy(retval, fname, len);
 
 	    /*
 	     * Don't add a star to ~, ~user, $var or `cmd`.
diff --git a/src/fold.c b/src/fold.c
index 0380516..cccc17e 100644
--- a/src/fold.c
+++ b/src/fold.c
@@ -1809,10 +1809,7 @@
 	    return;
 	STRCPY(newline, line);
 	if (p == NULL)
-	{
-	    STRNCPY(newline + line_len, marker, markerlen);
-	    newline[line_len + markerlen] = NUL;
-	}
+	    vim_strncpy(newline + line_len, marker, markerlen);
 	else
 	{
 	    STRCPY(newline + line_len, cms);
diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index 5bde791..cdd645b 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1476,8 +1476,7 @@
 	const char *text;
 
 	text = gtk_entry_get_text(GTK_ENTRY(dialog_textentry));
-	STRNCPY(dialog_textfield, text, IOSIZE);
-	dialog_textfield[IOSIZE - 1] = NUL;
+	vim_strncpy(dialog_textfield, (char_u *)text, IOSIZE - 1);
     }
 
     /* Destroy the dialog, will break the waiting loop. */
@@ -2340,8 +2339,7 @@
 	    text = (char_u *)gtk_entry_get_text(GTK_ENTRY(entry));
 	    text = CONVERT_FROM_UTF8(text);
 
-	    STRNCPY(textfield, text, IOSIZE);
-	    textfield[IOSIZE - 1] = NUL;
+	    vim_strncpy(textfield, text, IOSIZE - 1);
 
 	    CONVERT_FROM_UTF8_FREE(text);
 	}
diff --git a/src/gui_gtk_x11.c b/src/gui_gtk_x11.c
index cd30609..d93f7bc 100644
--- a/src/gui_gtk_x11.c
+++ b/src/gui_gtk_x11.c
@@ -2325,9 +2325,9 @@
     /* Don't write messages to the GUI anymore */
     full_screen = FALSE;
 
-    STRNCPY(IObuff, _("Vim: Received \"die\" request from session manager\n"),
-	    IOSIZE);
-    IObuff[IOSIZE - 1] = NUL;
+    vim_strncpy(IObuff,
+		    _("Vim: Received \"die\" request from session manager\n"),
+	    IOSIZE - 1);
     preserve_exit();
 }
 
@@ -3527,9 +3527,9 @@
 
     if (!exiting) /* only do anything if the destroy was unexpected */
     {
-	STRNCPY(IObuff, _("Vim: Main window unexpectedly destroyed\n"),
-		IOSIZE);
-	IObuff[IOSIZE - 1] = NUL;
+	vim_strncpy(IObuff,
+		(char_u *)_("Vim: Main window unexpectedly destroyed\n"),
+		IOSIZE - 1);
 	preserve_exit();
     }
 }
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 11d0281..f0b4717 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -3592,8 +3592,7 @@
 	if (label == NULL)
 	    break;
 
-	STRNCPY(text, menu->name, nameLen);
-	text[nameLen] = NUL;
+	vim_strncpy(text, menu->name, nameLen);
 	text = vim_strchr(text, TAB);	    /* stop at TAB before actext */
 	if (text == NULL)
 	    text = label + nameLen;	    /* no actext, use whole name */
diff --git a/src/memline.c b/src/memline.c
index 47dc00d..d1cf71f 100644
--- a/src/memline.c
+++ b/src/memline.c
@@ -698,8 +698,7 @@
 	/* Systems that cannot translate "~user" back into a path: copy the
 	 * file name unmodified.  Do use slashes instead of backslashes for
 	 * portability. */
-	STRNCPY(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE);
-	b0p->b0_fname[B0_FNAME_SIZE - 1] = NUL;
+	vim_strncpy(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE - 1);
 # ifdef BACKSLASH_IN_FILENAME
 	forward_slash(b0p->b0_fname);
 # endif
@@ -721,10 +720,7 @@
 	    /* If there is no user name or it is too long, don't use "~/" */
 	    if (get_user_name(uname, B0_UNAME_SIZE) == FAIL
 			 || (ulen = STRLEN(uname)) + flen > B0_FNAME_SIZE - 1)
-	    {
-		STRNCPY(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE);
-		b0p->b0_fname[B0_FNAME_SIZE - 1] = NUL;
-	    }
+		vim_strncpy(b0p->b0_fname, buf->b_ffname, B0_FNAME_SIZE - 1);
 	    else
 	    {
 		mch_memmove(b0p->b0_fname + ulen + 1, b0p->b0_fname + 1, flen);
diff --git a/src/menu.c b/src/menu.c
index 08a7314..6787056 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -1258,8 +1258,7 @@
 	    path_name = alloc((unsigned)(after_dot - arg));
 	    if (path_name == NULL)
 		return NULL;
-	    STRNCPY(path_name, arg, after_dot - arg - 1);
-	    path_name[after_dot - arg - 1] = NUL;
+	    vim_strncpy(path_name, arg, after_dot - arg - 1);
 	}
 	name = path_name;
 	while (name != NULL && *name)
diff --git a/src/misc1.c b/src/misc1.c
index 29be8e5..f0de593 100644
--- a/src/misc1.c
+++ b/src/misc1.c
@@ -976,8 +976,7 @@
 		lead_len = 0;
 	    else
 	    {
-		STRNCPY(leader, saved_line, lead_len);
-		leader[lead_len] = NUL;
+		vim_strncpy(leader, saved_line, lead_len);
 
 		/*
 		 * Replace leader with lead_repl, right or left adjusted
@@ -3345,8 +3344,7 @@
 	p = vim_strchr(var + 1, '%');
 	if (p != NULL)
 	{
-	    STRNCPY(NameBuff, var + 1, p - (var + 1));
-	    NameBuff[p - (var + 1)] = NUL;
+	    vim_strncpy(NameBuff, var + 1, p - (var + 1));
 	    exp = mch_getenv(NameBuff);
 	    if (exp != NULL && *exp != NUL
 					&& STRLEN(exp) + STRLEN(p) < MAXPATHL)
diff --git a/src/ops.c b/src/ops.c
index bbeedbf..8941941 100644
--- a/src/ops.c
+++ b/src/ops.c
@@ -2532,8 +2532,7 @@
 	{
 	    if ((ins_text = alloc_check((unsigned)(ins_len + 1))) != NULL)
 	    {
-		STRNCPY(ins_text, firstline + bd.textcol, ins_len);
-		ins_text[ins_len] = NUL;
+		vim_strncpy(ins_text, firstline + bd.textcol, (size_t)ins_len);
 		for (linenr = oap->start.lnum + 1; linenr <= oap->end.lnum;
 								     linenr++)
 		{
diff --git a/src/option.c b/src/option.c
index ab0740d..30341d6 100644
--- a/src/option.c
+++ b/src/option.c
@@ -4318,8 +4318,7 @@
 
 	if (errmsg != NULL)
 	{
-	    STRNCPY(IObuff, _(errmsg), IOSIZE - 1);
-	    IObuff[IOSIZE - 1] = NUL;
+	    vim_strncpy(IObuff, (char_u *)_(errmsg), IOSIZE - 1);
 	    i = STRLEN(IObuff) + 2;
 	    if (i + (arg - startarg) < IOSIZE)
 	    {
@@ -9365,7 +9364,7 @@
 	else if ((char_u **)opp->var == &p_pt)
 	    str2specialbuf(p_pt, NameBuff, MAXPATHL);
 	else
-	    STRNCPY(NameBuff, varp, MAXPATHL);
+	    vim_strncpy(NameBuff, varp, MAXPATHL - 1);
     }
 }
 
diff --git a/src/os_amiga.c b/src/os_amiga.c
index 8717825..2c2a770 100644
--- a/src/os_amiga.c
+++ b/src/os_amiga.c
@@ -626,7 +626,7 @@
     char_u  *s;
     int	    len;
 {
-    STRNCPY(s, "Amiga", len);
+    vim_strncpy(s, "Amiga", len - 1);
 }
 
 /*
@@ -690,7 +690,7 @@
 		{
 		    if (i < len - 1 && (i == 0 || buf[i - 1] != ':'))
 			buf[i++] = '/';
-		    STRNCPY(buf + i, fname, len - i);
+		    vim_strncpy(buf + i, fname, len - i - 1);
 		}
 	    }
 	}
diff --git a/src/os_qnx.c b/src/os_qnx.c
index 704061a..1a7250e 100644
--- a/src/os_qnx.c
+++ b/src/os_qnx.c
@@ -148,8 +148,7 @@
 #endif
 	    }
 
-	    STRNCPY( text_clip, str, len );
-	    text_clip[ len ] = NUL;
+	    vim_strncpy( text_clip, str, len );
 
 	    vim_clip[ 1 ] = NUL;
 
diff --git a/src/proto/misc2.pro b/src/proto/misc2.pro
index 936f38f..3f6e2ed 100644
--- a/src/proto/misc2.pro
+++ b/src/proto/misc2.pro
@@ -36,7 +36,7 @@
 void copy_spaces __ARGS((char_u *ptr, size_t count));
 void copy_chars __ARGS((char_u *ptr, size_t count, int c));
 void del_trailing_spaces __ARGS((char_u *ptr));
-void vim_strncpy __ARGS((char_u *to, char_u *from, int len));
+void vim_strncpy __ARGS((char_u *to, char_u *from, size_t len));
 int copy_option_part __ARGS((char_u **option, char_u *buf, int maxlen, char *sep_chars));
 void vim_free __ARGS((void *x));
 int vim_stricmp __ARGS((char *s1, char *s2));
diff --git a/src/structs.h b/src/structs.h
index b7f39fe..e238d0f 100644
--- a/src/structs.h
+++ b/src/structs.h
@@ -1067,6 +1067,11 @@
     dict_T	*dv_used_prev;	/* previous dict in used dicts list */
 };
 
+/* values for b_syn_spell: what to do with toplevel text */
+#define SYNSPL_DEFAULT	0	/* spell check if @Spell not defined */
+#define SYNSPL_TOP	1	/* spell check toplevel text */
+#define SYNSPL_NOTOP	2	/* don't spell check toplevel text */
+
 
 /*
  * buffer: structure that holds information about one file
@@ -1429,6 +1434,7 @@
     hashtab_T	b_keywtab;		/* syntax keywords hash table */
     hashtab_T	b_keywtab_ic;		/* idem, ignore case */
     int		b_syn_ic;		/* ignore case for :syn cmds */
+    int		b_syn_spell;		/* SYNSPL_ values */
     garray_T	b_syn_patterns;		/* table for syntax patterns */
     garray_T	b_syn_clusters;		/* table for syntax clusters */
     int		b_spell_cluster_id;	/* @Spell cluster ID or 0 */
diff --git a/src/syntax.c b/src/syntax.c
index 4ecec9b..54a5061 100644
--- a/src/syntax.c
+++ b/src/syntax.c
@@ -396,6 +396,7 @@
 static int syn_regexec __ARGS((regmmatch_T *rmp, linenr_T lnum, colnr_T col));
 static int check_keyword_id __ARGS((char_u *line, int startcol, int *endcol, long *flags, short **next_list, stateitem_T *cur_si));
 static void syn_cmd_case __ARGS((exarg_T *eap, int syncing));
+static void syn_cmd_spell __ARGS((exarg_T *eap, int syncing));
 static void syntax_sync_clear __ARGS((void));
 static void syn_remove_pattern __ARGS((buf_T *buf, int idx));
 static void syn_clear_pattern __ARGS((buf_T *buf, int i));
@@ -1698,6 +1699,17 @@
     if (syn_buf->b_sst_array == NULL)
 	return 0;
 
+    /* After 'synmaxcol' the attribute is always zero. */
+    if (syn_buf->b_p_smc > 0 && col >= syn_buf->b_p_smc)
+    {
+	clear_current_state();
+#ifdef FEAT_EVAL
+	current_id = 0;
+	current_trans_id = 0;
+#endif
+	return 0;
+    }
+
     /* Make sure current_state is valid */
     if (INVALID_STATE(&current_state))
 	validate_current_state();
@@ -2189,13 +2201,12 @@
 	     * set "can_spell" to TRUE if spell checking is supposed to be
 	     * done in the current item.
 	     */
-
 	    if (syn_buf->b_spell_cluster_id == 0)
 	    {
 		/* There is no @Spell cluster: Do spelling for items without
 		 * @NoSpell cluster. */
 		if (syn_buf->b_nospell_cluster_id == 0 || current_trans_id == 0)
-		    *can_spell = TRUE;
+		    *can_spell = (syn_buf->b_syn_spell != SYNSPL_NOTOP);
 		else
 		{
 		    sps.inc_tag = 0;
@@ -2207,9 +2218,11 @@
 	    else
 	    {
 		/* The @Spell cluster is defined: Do spelling in items with
-		 * the @Spell cluster.  But not when @NoSpell is also there. */
+		 * the @Spell cluster.  But not when @NoSpell is also there.
+		 * At the toplevel only spell check when ":syn spell toplevel"
+		 * was used. */
 		if (current_trans_id == 0)
-		    *can_spell = FALSE;
+		    *can_spell = (syn_buf->b_syn_spell == SYNSPL_TOP);
 		else
 		{
 		    sps.inc_tag = 0;
@@ -2248,8 +2261,11 @@
 	}
     }
     else if (can_spell != NULL)
-	/* Only do spelling when there is no @Spell cluster. */
-	*can_spell = (syn_buf->b_spell_cluster_id == 0);
+	/* Default: Only do spelling when there is no @Spell cluster or when
+	 * ":syn spell toplevel" was used. */
+	*can_spell = syn_buf->b_syn_spell == SYNSPL_DEFAULT
+		    ? (syn_buf->b_spell_cluster_id == 0)
+		    : (syn_buf->b_syn_spell == SYNSPL_TOP);
 
     /* nextgroup ends at end of line, unless "skipnl" or "skipemtpy" present */
     if (current_next_list != NULL
@@ -3050,8 +3066,7 @@
      * Must make a copy of the keyword, so we can add a NUL and make it
      * lowercase.
      */
-    STRNCPY(keyword, kwp, kwlen);
-    keyword[kwlen] = NUL;
+    vim_strncpy(keyword, kwp, kwlen);
 
     /*
      * Try twice:
@@ -3120,6 +3135,33 @@
 }
 
 /*
+ * Handle ":syntax spell" command.
+ */
+/* ARGSUSED */
+    static void
+syn_cmd_spell(eap, syncing)
+    exarg_T	*eap;
+    int		syncing;	    /* not used */
+{
+    char_u	*arg = eap->arg;
+    char_u	*next;
+
+    eap->nextcmd = find_nextcmd(arg);
+    if (eap->skip)
+	return;
+
+    next = skiptowhite(arg);
+    if (STRNICMP(arg, "toplevel", 8) == 0 && next - arg == 8)
+	curbuf->b_syn_spell = SYNSPL_TOP;
+    else if (STRNICMP(arg, "notoplevel", 10) == 0 && next - arg == 10)
+	curbuf->b_syn_spell = SYNSPL_NOTOP;
+    else if (STRNICMP(arg, "default", 4) == 0 && next - arg == 4)
+	curbuf->b_syn_spell = SYNSPL_DEFAULT;
+    else
+	EMSG2(_("E390: Illegal argument: %s"), arg);
+}
+
+/*
  * Clear all syntax info for one buffer.
  */
     void
@@ -3129,6 +3171,7 @@
     int i;
 
     buf->b_syn_ic = FALSE;	    /* Use case, by default */
+    buf->b_syn_spell = SYNSPL_DEFAULT; /* default spell checking */
     buf->b_syn_containedin = FALSE;
 
     /* free the keywords */
@@ -5519,8 +5562,7 @@
 		failed = TRUE;
 		break;
 	    }
-	    STRNCPY(name + 1, p, end - p);
-	    name[end - p + 1] = NUL;
+	    vim_strncpy(name + 1, p, end - p);
 	    if (       STRCMP(name + 1, "ALLBUT") == 0
 		    || STRCMP(name + 1, "ALL") == 0
 		    || STRCMP(name + 1, "TOP") == 0
@@ -5806,6 +5848,7 @@
     {"off",		syn_cmd_off},
     {"region",		syn_cmd_region},
     {"reset",		syn_cmd_reset},
+    {"spell",		syn_cmd_spell},
     {"sync",		syn_cmd_sync},
     {"",		syn_cmd_list},
     {NULL, NULL}
@@ -8131,8 +8174,7 @@
     /* Avoid using stricmp() too much, it's slow on some systems */
     /* Avoid alloc()/free(), these are slow too.  ID names over 200 chars
      * don't deserve to be found! */
-    STRNCPY(name_u, name, 199);
-    name_u[199] = NUL;
+    vim_strncpy(name_u, name, 199);
     vim_strup(name_u);
     for (i = highlight_ga.ga_len; --i >= 0; )
 	if (HL_TABLE()[i].sg_name_u != NULL
diff --git a/src/testdir/test51.in b/src/testdir/test51.in
index a158c86..49c88ec 100644
--- a/src/testdir/test51.in
+++ b/src/testdir/test51.in
@@ -29,6 +29,8 @@
 :%s/ctermbg=\d*/ctermbg=3/
 :" filter out possibly translated error message
 :%s/E475: [^:]*:/E475:/
+:" fix the fileformat
+:set ff&
 :wq!
 ENDTEST
 
diff --git a/src/testdir/test58.in b/src/testdir/test58.in
index 9e14270..e03c8e0 100644
--- a/src/testdir/test58.in
+++ b/src/testdir/test58.in
@@ -7,9 +7,9 @@
 :set enc=latin1
 :e!
 :" First generate a .spl file from a .dic and a .aff file.
-gg:/^affstart1/+1,/^affend1/-1w Xtest.aff
-gg:/^dicstart/+1,/^dicend/-1w Xtest.dic
-:mkspell Xtest Xtest
+gg:/^affstart1/+1,/^affend1/-1w! Xtest.aff
+gg:/^dicstart/+1,/^dicend/-1w! Xtest.dic
+:mkspell! Xtest Xtest
 :"
 :" use that spell file
 :set spl=Xtest.latin1.spl
@@ -71,30 +71,29 @@
 :" also use an addition file
 gg:/^addstart/+1,/^addend/-1w! Xtest.latin1.add
 :mkspell! Xtest.latin1.add.spl Xtest.latin1.add
-:set spl=en
 :set spellfile=Xtest.latin1.add
 /^test2:
 ]s:let str = spellbadword()
 :$put =str
-:set spl=en_us
+:set spl=Xtest_us.latin1.spl
 /^test2:
 ]smm:let str = spellbadword()
 :$put =str
 `m]s:let str = spellbadword()
 :$put =str
-:set spl=en_gb
+:set spl=Xtest_gb.latin1.spl
 /^test2:
 ]smm:let str = spellbadword()
 :$put =str
 `m]s:let str = spellbadword()
 :$put =str
-:set spl=en_nz
+:set spl=Xtest_nz.latin1.spl
 /^test2:
 ]smm:let str = spellbadword()
 :$put =str
 `m]s:let str = spellbadword()
 :$put =str
-:set spl=en_ca
+:set spl=Xtest_ca.latin1.spl
 /^test2:
 ]smm:let str = spellbadword()
 :$put =str
diff --git a/src/version.c b/src/version.c
index e52839c..165ead0 100644
--- a/src/version.c
+++ b/src/version.c
@@ -1159,11 +1159,9 @@
 
     if (*mesg == ' ')
     {
-	STRNCPY(modby, _("Modified by "), MODBY_LEN);
-	modby[MODBY_LEN - 1] = NUL;
+	vim_strncpy(modby, _("Modified by "), MODBY_LEN - 1);
 	l = STRLEN(modby);
-	STRNCPY(modby + l, MODIFIED_BY, MODBY_LEN - l);
-	modby[MODBY_LEN - 1] = NUL;
+	vim_strncpy(modby + l, MODIFIED_BY, MODBY_LEN - l - 1);
 	mesg = modby;
     }
 #endif
diff --git a/src/version.h b/src/version.h
index 1fa3fba..a5695f7 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 Jul 12)"
-#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 12, compiled "
+#define VIM_VERSION_LONG	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 18)"
+#define VIM_VERSION_LONG_DATE	"VIM - Vi IMproved 7.0aa ALPHA (2005 Jul 18, compiled "
