diff --git a/src/edit.c b/src/edit.c
index 344f379..d6d31f9 100644
--- a/src/edit.c
+++ b/src/edit.c
@@ -328,7 +328,7 @@
 {
     int		c = 0;
     char_u	*ptr;
-    int		lastc;
+    int		lastc = 0;
     int		mincol;
     static linenr_T o_lnum = 0;
     int		i;
diff --git a/src/gui_w32.c b/src/gui_w32.c
index 05d8e30..70dd9b5 100644
--- a/src/gui_w32.c
+++ b/src/gui_w32.c
@@ -1131,7 +1131,7 @@
 
 			    if (STRLEN(str) < sizeof(lpdi->szText)
 				    || ((tt_text = vim_strsave(str)) == NULL))
-				vim_strncpy(lpdi->szText, str,
+				vim_strncpy((char_u *)lpdi->szText, str,
 						sizeof(lpdi->szText) - 1);
 			    else
 				lpdi->lpszText = tt_text;
@@ -1747,9 +1747,9 @@
 
     /* Initialise the struct */
     s_findrep_struct.lStructSize = sizeof(s_findrep_struct);
-    s_findrep_struct.lpstrFindWhat = alloc(MSWIN_FR_BUFSIZE);
+    s_findrep_struct.lpstrFindWhat = (LPSTR)alloc(MSWIN_FR_BUFSIZE);
     s_findrep_struct.lpstrFindWhat[0] = NUL;
-    s_findrep_struct.lpstrReplaceWith = alloc(MSWIN_FR_BUFSIZE);
+    s_findrep_struct.lpstrReplaceWith = (LPSTR)alloc(MSWIN_FR_BUFSIZE);
     s_findrep_struct.lpstrReplaceWith[0] = NUL;
     s_findrep_struct.wFindWhatLen = MSWIN_FR_BUFSIZE;
     s_findrep_struct.wReplaceWithLen = MSWIN_FR_BUFSIZE;
@@ -2099,7 +2099,7 @@
     pImmGetCompositionStringA(hIMC, GCS, buf, ret);
 
     /* convert from codepage to UCS-2 */
-    MultiByteToWideChar_alloc(GetACP(), 0, buf, ret, &wbuf, lenp);
+    MultiByteToWideChar_alloc(GetACP(), 0, (LPCSTR)buf, ret, &wbuf, lenp);
     vim_free(buf);
 
     return (short_u *)wbuf;
@@ -3028,7 +3028,7 @@
 
     HWND thwnd = menu->tearoff_handle;
 
-    GetWindowText(thwnd, tbuf, 127);
+    GetWindowText(thwnd, (LPSTR)tbuf, 127);
     if (GetWindowRect(thwnd, &trect)
 	    && GetWindowRect(s_hwnd, &rct)
 	    && GetClientRect(s_hwnd, &roct))
@@ -3174,7 +3174,7 @@
 	    else
 # endif
 		GetDlgItemText(hwnd, DLG_NONBUTTON_CONTROL + 2,
-							 s_textfield, IOSIZE);
+						(LPSTR)s_textfield, IOSIZE);
 	}
 
 	/*
@@ -3216,7 +3216,7 @@
  * If stubbing out this fn, return 1.
  */
 
-static const char_u *dlg_icons[] = /* must match names in resource file */
+static const char *dlg_icons[] = /* must match names in resource file */
 {
     "IDR_VIM",
     "IDR_VIM_ERROR",
@@ -3353,7 +3353,7 @@
     fontHeight = fontInfo.tmHeight;
 
     /* Minimum width for horizontal button */
-    minButtonWidth = GetTextWidth(hdc, "Cancel", 6);
+    minButtonWidth = GetTextWidth(hdc, (char_u *)"Cancel", 6);
 
     /* Maximum width of a dialog, if possible */
     if (s_hwnd == NULL)
@@ -3617,7 +3617,7 @@
 				   + 2 * fontHeight * i),
 		    PixelToDialogX(dlgwidth - 2 * DLG_VERT_PADDING_X),
 		    (WORD)(PixelToDialogY(2 * fontHeight) - 1),
-		    (WORD)(IDCANCEL + 1 + i), (WORD)0x0080, pstart);
+		    (WORD)(IDCANCEL + 1 + i), (WORD)0x0080, (char *)pstart);
 	}
 	else
 	{
@@ -3628,7 +3628,7 @@
 		    PixelToDialogY(buttonYpos), /* TBK */
 		    PixelToDialogX(buttonWidths[i]),
 		    (WORD)(PixelToDialogY(2 * fontHeight) - 1),
-		    (WORD)(IDCANCEL + 1 + i), (WORD)0x0080, pstart);
+		    (WORD)(IDCANCEL + 1 + i), (WORD)0x0080, (char *)pstart);
 	}
 	pstart = pend + 1;	/*next button*/
     }
@@ -3649,7 +3649,7 @@
 	    PixelToDialogY(dlgPaddingY),
 	    (WORD)(PixelToDialogX(messageWidth) + 1),
 	    PixelToDialogY(msgheight),
-	    DLG_NONBUTTON_CONTROL + 1, (WORD)0x0081, message);
+	    DLG_NONBUTTON_CONTROL + 1, (WORD)0x0081, (char *)message);
 
     /* Edit box */
     if (textfield != NULL)
@@ -3659,7 +3659,7 @@
 		PixelToDialogY(2 * dlgPaddingY + msgheight),
 		PixelToDialogX(dlgwidth - 4 * dlgPaddingX),
 		PixelToDialogY(fontHeight + dlgPaddingY),
-		DLG_NONBUTTON_CONTROL + 2, (WORD)0x0081, textfield);
+		DLG_NONBUTTON_CONTROL + 2, (WORD)0x0081, (char *)textfield);
 	*pnumitems += 1;
     }
 
@@ -3798,7 +3798,7 @@
     if (enc_codepage == 0 && (int)GetACP() != enc_codepage)
     {
 	/* Not a codepage, use our own conversion function. */
-	wn = enc_to_utf16(lpAnsiIn, NULL);
+	wn = enc_to_utf16((char_u *)lpAnsiIn, NULL);
 	if (wn != NULL)
 	{
 	    wcscpy(lpWCStr, wn);
@@ -4043,7 +4043,7 @@
 
     /* Calculate width of a single space.  Used for padding columns to the
      * right width. */
-    spaceWidth = GetTextWidth(hdc, " ", 1);
+    spaceWidth = GetTextWidth(hdc, (char_u *)" ", 1);
 
     /* Figure out max width of the text column, the accelerator column and the
      * optional submenu column. */
@@ -4086,7 +4086,7 @@
     textWidth = columnWidths[0] + columnWidths[1];
     if (submenuWidth != 0)
     {
-	submenuWidth = GetTextWidth(hdc, TEAROFF_SUBMENU_LABEL,
+	submenuWidth = GetTextWidth(hdc, (char_u *)TEAROFF_SUBMENU_LABEL,
 					  (int)STRLEN(TEAROFF_SUBMENU_LABEL));
 	textWidth += submenuWidth;
     }
@@ -4262,7 +4262,7 @@
 		(WORD)(sepPadding + 1 + 13 * (*pnumitems)),
 		(WORD)PixelToDialogX(dlgwidth - 2 * TEAROFF_PADDING_X),
 		(WORD)12,
-		menuID, (WORD)0x0080, label);
+		menuID, (WORD)0x0080, (char *)label);
 	vim_free(label);
 	(*pnumitems)++;
     }
@@ -4360,7 +4360,7 @@
 	    gui_find_iconfile(menu->iconfile, fname, "bmp");
 	    hbitmap = LoadImage(
 			NULL,
-			fname,
+			(LPCSTR)fname,
 			IMAGE_BITMAP,
 			TOOLBAR_BUTTON_WIDTH,
 			TOOLBAR_BUTTON_HEIGHT,
@@ -4381,7 +4381,7 @@
 					menu->dname, fname, "bmp") == OK))
 	    hbitmap = LoadImage(
 		    NULL,
-		    fname,
+		    (LPCSTR)fname,
 		    IMAGE_BITMAP,
 		    TOOLBAR_BUTTON_WIDTH,
 		    TOOLBAR_BUTTON_HEIGHT,
@@ -4629,14 +4629,15 @@
 	    do_load = 0;
 
 	if (do_load)
-	    sign.hImage = (HANDLE)LoadImage(NULL, signfile, sign.uType,
+	    sign.hImage = (HANDLE)LoadImage(NULL, (LPCSTR)signfile, sign.uType,
 		    gui.char_width * 2, gui.char_height,
 		    LR_LOADFROMFILE | LR_CREATEDIBSECTION);
 #ifdef FEAT_XPM_W32
 	if (!STRICMP(ext, ".xpm"))
 	{
 	    sign.uType = IMAGE_XPM;
-	    LoadXpmImage(signfile, (HBITMAP *)&sign.hImage, (HBITMAP *)&sign.hShape);
+	    LoadXpmImage((char *)signfile, (HBITMAP *)&sign.hImage,
+		    (HBITMAP *)&sign.hShape);
 	}
 #endif
     }
@@ -4740,13 +4741,13 @@
 		UINT vlen = 0;
 		void *data = alloc(len);
 
-		if (data != NULL
+		if ((data != NULL
 			&& GetFileVersionInfo(comctl_dll, 0, len, data)
 			&& VerQueryValue(data, "\\", (void **)&ver, &vlen)
 			&& vlen
-			&& HIWORD(ver->dwFileVersionMS) > 4
-			|| (HIWORD(ver->dwFileVersionMS) == 4
-			    && LOWORD(ver->dwFileVersionMS) >= 70))
+			&& HIWORD(ver->dwFileVersionMS) > 4)
+			|| ((HIWORD(ver->dwFileVersionMS) == 4
+			    && LOWORD(ver->dwFileVersionMS) >= 70)))
 		{
 		    vim_free(data);
 		    multiline_tip = TRUE;
@@ -4908,7 +4909,7 @@
     {
 	gui_mch_disable_beval_area(cur_beval);
 	beval->showState = ShS_SHOWING;
-	make_tooltip(beval, mesg, pt);
+	make_tooltip(beval, (char *)mesg, pt);
     }
     // TRACE0("gui_mch_post_balloon }}}");
 }
diff --git a/src/gui_w48.c b/src/gui_w48.c
index 6bafa8e..5896dcd 100644
--- a/src/gui_w48.c
+++ b/src/gui_w48.c
@@ -534,7 +534,8 @@
 	else
 	{
 	    string[0] = ch;
-	    len = MultiByteToWideChar(GetACP(), 0, string, 1, wstring, 2);
+	    len = MultiByteToWideChar(GetACP(), 0, (LPCSTR)string,
+		    1, wstring, 2);
 	}
     }
     else
@@ -551,7 +552,7 @@
 	if (enc_codepage > 0)
 	{
 	    len = WideCharToMultiByte(enc_codepage, 0, wstring, len,
-						       string, slen, 0, NULL);
+					       (LPSTR)string, slen, 0, NULL);
 	    /* If we had included the ALT key into the character but now the
 	     * upper bit is no longer set, that probably means the conversion
 	     * failed.  Convert the original character and set the upper bit
@@ -560,7 +561,7 @@
 	    {
 		wstring[0] = ch & 0x7f;
 		len = WideCharToMultiByte(enc_codepage, 0, wstring, len,
-						       string, slen, 0, NULL);
+					       (LPSTR)string, slen, 0, NULL);
 		if (len == 1) /* safety check */
 		    string[0] |= 0x80;
 	    }
@@ -921,7 +922,7 @@
     lpfrw->hwndOwner = lpfr->hwndOwner;
     lpfrw->Flags = lpfr->Flags;
 
-    wp = enc_to_utf16(lpfr->lpstrFindWhat, NULL);
+    wp = enc_to_utf16((char_u *)lpfr->lpstrFindWhat, NULL);
     wcsncpy(lpfrw->lpstrFindWhat, wp, lpfrw->wFindWhatLen - 1);
     vim_free(wp);
 
@@ -938,12 +939,12 @@
 
     lpfr->Flags = lpfrw->Flags;
 
-    p = utf16_to_enc(lpfrw->lpstrFindWhat, NULL);
-    vim_strncpy(lpfr->lpstrFindWhat, p, lpfr->wFindWhatLen - 1);
+    p = utf16_to_enc((short_u*)lpfrw->lpstrFindWhat, NULL);
+    vim_strncpy((char_u *)lpfr->lpstrFindWhat, p, lpfr->wFindWhatLen - 1);
     vim_free(p);
 
-    p = utf16_to_enc(lpfrw->lpstrReplaceWith, NULL);
-    vim_strncpy(lpfr->lpstrReplaceWith, p, lpfr->wReplaceWithLen - 1);
+    p = utf16_to_enc((short_u*)lpfrw->lpstrReplaceWith, NULL);
+    vim_strncpy((char_u *)lpfr->lpstrReplaceWith, p, lpfr->wReplaceWithLen - 1);
     vim_free(p);
 }
 # endif
@@ -1000,8 +1001,8 @@
 	if (s_findrep_struct.Flags & FR_MATCHCASE)
 	    flags |= FRD_MATCH_CASE;
 	down = (s_findrep_struct.Flags & FR_DOWN) != 0;
-	gui_do_findrepl(flags, s_findrep_struct.lpstrFindWhat,
-				     s_findrep_struct.lpstrReplaceWith, down);
+	gui_do_findrepl(flags, (char_u *)s_findrep_struct.lpstrFindWhat,
+			     (char_u *)s_findrep_struct.lpstrReplaceWith, down);
     }
 }
 #endif
@@ -1530,7 +1531,7 @@
     int		    r, g, b;
     int		    i;
 
-    if (name[0] == '#' && strlen(name) == 7)
+    if (name[0] == '#' && STRLEN(name) == 7)
     {
 	/* Name is in "#rrggbb" format */
 	r = hex_digit(name[1]) * 16 + hex_digit(name[2]);
@@ -2268,7 +2269,7 @@
 {
     SIZE    size;
 
-    GetTextExtentPoint(hdc, str, len, &size);
+    GetTextExtentPoint(hdc, (LPCSTR)str, len, &size);
     return size.cx;
 }
 
@@ -2468,10 +2469,11 @@
 
     if (first_tabpage->tp_next != NULL)
 	add_tabline_popup_menu_entry(tab_pmenu,
-					  TABLINE_MENU_CLOSE, _("Close tab"));
-    add_tabline_popup_menu_entry(tab_pmenu, TABLINE_MENU_NEW, _("New tab"));
-    add_tabline_popup_menu_entry(tab_pmenu, TABLINE_MENU_OPEN,
-				 _("Open tab..."));
+				TABLINE_MENU_CLOSE, (char_u *)_("Close tab"));
+    add_tabline_popup_menu_entry(tab_pmenu,
+				TABLINE_MENU_NEW, (char_u *)_("New tab"));
+    add_tabline_popup_menu_entry(tab_pmenu,
+				TABLINE_MENU_OPEN, (char_u *)_("Open tab..."));
 
     GetCursorPos(&pt);
     rval = TrackPopupMenuEx(tab_pmenu, TPM_RETURNCMD, pt.x, pt.y, s_tabhwnd,
@@ -2583,7 +2585,7 @@
 	}
 
 	get_tabline_label(tp, FALSE);
-	tie.pszText = NameBuff;
+	tie.pszText = (LPSTR)NameBuff;
 #ifdef FEAT_MBYTE
 	wstr = NULL;
 	if (use_unicode)
@@ -2680,7 +2682,7 @@
     if (wword)
 	s_findrep_struct.Flags |= FR_WHOLEWORD;
     if (entry_text != NULL && *entry_text != NUL)
-	vim_strncpy(s_findrep_struct.lpstrFindWhat, entry_text,
+	vim_strncpy((char_u *)s_findrep_struct.lpstrFindWhat, entry_text,
 					   s_findrep_struct.wFindWhatLen - 1);
     vim_free(entry_text);
 }
@@ -3194,11 +3196,11 @@
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	int	len;
-	acp_to_enc(lf.lfFaceName, (int)strlen(lf.lfFaceName),
+	acp_to_enc((char_u *)lf.lfFaceName, (int)strlen(lf.lfFaceName),
 						(char_u **)&font_name, &len);
     }
 #endif
-    res = alloc((unsigned)(strlen(font_name) + 20
+    res = (char *)alloc((unsigned)(strlen(font_name) + 20
 		    + (charset_name == NULL ? 0 : strlen(charset_name) + 2)));
     if (res != NULL)
     {
@@ -3233,7 +3235,7 @@
     if (font_name != lf.lfFaceName)
 	vim_free(font_name);
 #endif
-    return res;
+    return (char_u *)res;
 }
 
 
@@ -3323,7 +3325,7 @@
 	return FAIL;
 
     if (font_name == NULL)
-	font_name = lf.lfFaceName;
+	font_name = (char_u *)lf.lfFaceName;
 #if defined(FEAT_MBYTE_IME) || defined(GLOBAL_IME)
     norm_logfont = lf;
     sub_logfont = lf;
@@ -3753,12 +3755,12 @@
     fileStruct.lStructSize = sizeof(fileStruct);
 #endif
 
-    fileStruct.lpstrTitle = title;
-    fileStruct.lpstrDefExt = ext;
+    fileStruct.lpstrTitle = (LPSTR)title;
+    fileStruct.lpstrDefExt = (LPSTR)ext;
 
-    fileStruct.lpstrFile = fileBuf;
+    fileStruct.lpstrFile = (LPSTR)fileBuf;
     fileStruct.nMaxFile = MAXPATHL;
-    fileStruct.lpstrFilter = filterp;
+    fileStruct.lpstrFilter = (LPSTR)filterp;
     fileStruct.hwndOwner = s_hwnd;		/* main Vim window is owner*/
     /* has an initial dir been specified? */
     if (initdir != NULL && *initdir != NUL)
@@ -3769,7 +3771,7 @@
 	    for (p = initdirp; *p != NUL; ++p)
 		if (*p == '/')
 		    *p = '\\';
-	fileStruct.lpstrInitialDir = initdirp;
+	fileStruct.lpstrInitialDir = (LPSTR)initdirp;
     }
 
     /*
@@ -3851,7 +3853,7 @@
 #endif
 	    {
 		DragQueryFile(hDrop, i, szFile, BUFPATHLEN);
-		fnames[i] = vim_strsave(szFile);
+		fnames[i] = vim_strsave((char_u *)szFile);
 	    }
 	}
 
diff --git a/src/os_mswin.c b/src/os_mswin.c
index fc06ab6..3a5922b 100644
--- a/src/os_mswin.c
+++ b/src/os_mswin.c
@@ -741,7 +741,8 @@
 				     gui.starting ? (char_u *)_("Message") :
 #endif
 					     (char_u *)_("Error"),
-				     p, (char_u *)_("&Ok"), 1, NULL, FALSE);
+				     (char_u *)p, (char_u *)_("&Ok"),
+					1, NULL, FALSE);
 		break;
 	    }
 	ga_clear(&error_ga);
@@ -2951,7 +2952,7 @@
     if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
     {
 	int	len;
-	enc_to_acp(name, (int)strlen((char *)name), &acpname, &len);
+	enc_to_acp(name, (int)STRLEN(name), &acpname, &len);
 	name = acpname;
     }
 #endif
diff --git a/src/os_win32.c b/src/os_win32.c
index c6f5cc2..5db5418 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -236,6 +236,7 @@
 
 static BOOL win8_or_later = FALSE;
 
+#ifndef FEAT_GUI_W32
 /*
  * Version of ReadConsoleInput() that works with IME.
  * Works around problems on Windows 8.
@@ -325,6 +326,7 @@
     return read_console_input(hInput, lpBuffer, -1, lpEvents);
 }
 
+# ifdef FEAT_CLIENTSERVER
     static DWORD
 msg_wait_for_multiple_objects(
     DWORD    nCount,
@@ -338,8 +340,9 @@
     return MsgWaitForMultipleObjects(nCount, pHandles, fWaitAll,
 				     dwMilliseconds, dwWakeMask);
 }
+# endif
 
-#ifndef FEAT_CLIENTSERVER
+# ifndef FEAT_CLIENTSERVER
     static DWORD
 wait_for_single_object(
     HANDLE hHandle,
@@ -349,6 +352,8 @@
 	return WAIT_OBJECT_0;
     return WaitForSingleObject(hHandle, dwMilliseconds);
 }
+# endif
+#endif
 #endif
 
     static void
diff --git a/src/version.c b/src/version.c
index a865566..3ab640d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -748,6 +748,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1339,
+/**/
     1338,
 /**/
     1337,
