diff --git a/src/cmdexpand.c b/src/cmdexpand.c
index 464dc96..b75903d 100644
--- a/src/cmdexpand.c
+++ b/src/cmdexpand.c
@@ -1993,11 +1993,11 @@
 #ifdef BACKSLASH_IN_FILENAME
 	if (p_csl[0] != NUL && (options & WILD_IGNORE_COMPLETESLASH) == 0)
 	{
-	    int	    i;
+	    int	    j;
 
-	    for (i = 0; i < *num_file; ++i)
+	    for (j = 0; j < *num_file; ++j)
 	    {
-		char_u	*ptr = (*file)[i];
+		char_u	*ptr = (*file)[j];
 
 		while (*ptr != NUL)
 		{
diff --git a/src/drawscreen.c b/src/drawscreen.c
index 5732b89..5b9619e 100644
--- a/src/drawscreen.c
+++ b/src/drawscreen.c
@@ -2554,17 +2554,17 @@
     // See the version that was fixed.
     if (use_vtp() && get_conpty_fix_type() < 1)
     {
-	int i;
+	int k;
 
-	for (i = 0; i < Rows; ++i)
+	for (k = 0; k < Rows; ++k)
 	    if (enc_utf8)
-		if ((*mb_off2cells)(LineOffset[i] + Columns - 2,
-					   LineOffset[i] + screen_Columns) > 1)
-		    screen_draw_rectangle(i, Columns - 2, 1, 2, FALSE);
+		if ((*mb_off2cells)(LineOffset[k] + Columns - 2,
+					   LineOffset[k] + screen_Columns) > 1)
+		    screen_draw_rectangle(k, Columns - 2, 1, 2, FALSE);
 		else
-		    screen_draw_rectangle(i, Columns - 1, 1, 1, FALSE);
+		    screen_draw_rectangle(k, Columns - 1, 1, 1, FALSE);
 	    else
-		screen_char(LineOffset[i] + Columns - 1, i, Columns - 1);
+		screen_char(LineOffset[k] + Columns - 1, k, Columns - 1);
     }
 #endif
 
diff --git a/src/filepath.c b/src/filepath.c
index 65ea2bc..4abf8f4 100644
--- a/src/filepath.c
+++ b/src/filepath.c
@@ -372,12 +372,12 @@
 	    {
 		if (GetLongPathNameW(wfname, buf, _MAX_PATH))
 		{
-		    char_u *p = utf16_to_enc(buf, NULL);
+		    char_u *q = utf16_to_enc(buf, NULL);
 
-		    if (p != NULL)
+		    if (q != NULL)
 		    {
 			vim_free(*bufp);    // free any allocated file name
-			*bufp = *fnamep = p;
+			*bufp = *fnamep = q;
 		    }
 		}
 		vim_free(wfname);
diff --git a/src/getchar.c b/src/getchar.c
index 9a1132a..c7a1cca 100644
--- a/src/getchar.c
+++ b/src/getchar.c
@@ -1768,16 +1768,16 @@
 		    c == K_TEAROFF)
 		{
 		    char_u	name[200];
-		    int		i;
+		    int		j;
 
 		    // get menu path, it ends with a <CR>
-		    for (i = 0; (c = vgetorpeek(TRUE)) != '\r'; )
+		    for (j = 0; (c = vgetorpeek(TRUE)) != '\r'; )
 		    {
-			name[i] = c;
-			if (i < 199)
-			    ++i;
+			name[j] = c;
+			if (j < 199)
+			    ++j;
 		    }
-		    name[i] = NUL;
+		    name[j] = NUL;
 		    gui_make_tearoff(name);
 		    continue;
 		}
diff --git a/src/menu.c b/src/menu.c
index 880a93a..1c5cc4a 100644
--- a/src/menu.c
+++ b/src/menu.c
@@ -677,7 +677,7 @@
 		}
 	    }
 
-# if defined(FEAT_GUI_MSWIN) & defined(FEAT_TEAROFF)
+# if defined(FEAT_GUI_MSWIN) && defined(FEAT_TEAROFF)
 	    // When adding a new submenu, may add a tearoff item
 	    if (	addtearoff
 		    && *next_name
diff --git a/src/os_win32.c b/src/os_win32.c
index 18b9e59..d2d2fe7 100644
--- a/src/os_win32.c
+++ b/src/os_win32.c
@@ -452,7 +452,7 @@
     HANDLE hHandle,
     DWORD dwMilliseconds)
 {
-    if (read_console_input(NULL, NULL, -2, NULL))
+    if (read_console_input(NULL, NULL, (DWORD)-2, NULL))
 	return WAIT_OBJECT_0;
     return WaitForSingleObject(hHandle, dwMilliseconds);
 }
@@ -724,7 +724,7 @@
     for (i = 0; libintl_entry[i].name != NULL
 					 && libintl_entry[i].ptr != NULL; ++i)
     {
-	if ((*libintl_entry[i].ptr = (FARPROC)GetProcAddress(hLibintlDLL,
+	if ((*libintl_entry[i].ptr = GetProcAddress(hLibintlDLL,
 					      libintl_entry[i].name)) == NULL)
 	{
 	    dyn_libintl_end();
diff --git a/src/version.c b/src/version.c
index cc4e7d2..8ea43b5 100644
--- a/src/version.c
+++ b/src/version.c
@@ -747,6 +747,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    4289,
+/**/
     4288,
 /**/
     4287,
@@ -9468,7 +9470,7 @@
     // The rightmost column doesn't need a separator.
     // Sacrifice it to fit in one more column if possible.
     ncol = (int) (Columns + 1) / width;
-    nrow = item_count / ncol + (item_count % ncol ? 1 : 0);
+    nrow = item_count / ncol + ((item_count % ncol) ? 1 : 0);
 
     // "i" counts columns then rows.  "idx" counts rows then columns.
     for (i = 0; !got_int && i < nrow * ncol; ++i)
