diff --git a/src/iid_ole.c b/src/iid_ole.c
index 44802d0..f3939ea 100644
--- a/src/iid_ole.c
+++ b/src/iid_ole.c
@@ -1,16 +1,14 @@
-/* this file contains the actual definitions of */
-/* the IIDs and CLSIDs */
+// this file contains the actual definitions of
+// the IIDs and CLSIDs
 
-/* link this file in with the server and any clients */
+// link this file in with the server and any clients
 
 
-/* File created by MIDL compiler version 3.00.44 */
-/* at Sat Jan 03 16:34:55 1998
- */
-/* Compiler settings for if_ole.idl:
-    Os (OptLev=s), W1, Zp8, env=Win32, ms_ext, c_ext
-    error checks: none
-*/
+// File created by MIDL compiler version 3.00.44
+// at Sat Jan 03 16:34:55 1998
+// Compiler settings for if_ole.idl:
+// Os (OptLev=s), W1, Zp8, env=Win32, ms_ext, c_ext
+// error checks: none
 //@@MIDL_FILE_HEADING(  )
 #ifdef __cplusplus
 extern "C"{
@@ -20,8 +18,8 @@
 # include <w32api.h>
 
 # if __W32API_MAJOR_VERSION == 3 && __W32API_MINOR_VERSION < 10
-   /* This define is missing from older MingW versions of w32api, even though
-    * IID is defined. */
+   // This define is missing from older MingW versions of w32api, even though
+   // IID is defined.
 #  define __IID_DEFINED__
 # endif
 #endif
diff --git a/src/indent.c b/src/indent.c
index 32f1e12..1662292 100644
--- a/src/indent.c
+++ b/src/indent.c
@@ -1534,25 +1534,25 @@
     long	len;
     long	col;
     long	vcol;
-    long	start_col = 0;		/* For start of white-space string */
-    long	start_vcol = 0;		/* For start of white-space string */
+    long	start_col = 0;		// For start of white-space string
+    long	start_vcol = 0;		// For start of white-space string
     long	old_len;
     char_u	*ptr;
-    char_u	*new_line = (char_u *)1;    /* init to non-NULL */
-    int		did_undo;		/* called u_save for current line */
+    char_u	*new_line = (char_u *)1; // init to non-NULL
+    int		did_undo;		// called u_save for current line
 #ifdef FEAT_VARTABS
     int		*new_vts_array = NULL;
-    char_u	*new_ts_str;		/* string value of tab argument */
+    char_u	*new_ts_str;		// string value of tab argument
 #else
     int		temp;
     int		new_ts;
 #endif
     int		save_list;
-    linenr_T	first_line = 0;		/* first changed line */
-    linenr_T	last_line = 0;		/* last changed line */
+    linenr_T	first_line = 0;		// first changed line
+    linenr_T	last_line = 0;		// last changed line
 
     save_list = curwin->w_p_list;
-    curwin->w_p_list = 0;	    /* don't want list mode here */
+    curwin->w_p_list = 0;	    // don't want list mode here
 
 #ifdef FEAT_VARTABS
     new_ts_str = eap->arg;
@@ -1593,7 +1593,7 @@
 	    {
 		if (!got_tab && num_spaces == 0)
 		{
-		    /* First consecutive white-space */
+		    // First consecutive white-space
 		    start_vcol = vcol;
 		    start_col = col;
 		}
@@ -1606,9 +1606,9 @@
 	    {
 		if (got_tab || (eap->forceit && num_spaces > 1))
 		{
-		    /* Retabulate this string of white-space */
+		    // Retabulate this string of white-space
 
-		    /* len is virtual length of white string */
+		    // len is virtual length of white string
 		    len = num_spaces = vcol - start_vcol;
 		    num_tabs = 0;
 		    if (!curbuf->b_p_et)
@@ -1640,12 +1640,12 @@
 			    if (u_save((linenr_T)(lnum - 1),
 						(linenr_T)(lnum + 1)) == FAIL)
 			    {
-				new_line = NULL;	/* flag out-of-memory */
+				new_line = NULL;	// flag out-of-memory
 				break;
 			    }
 			}
 
-			/* len is actual number of white characters used */
+			// len is actual number of white characters used
 			len = num_spaces + num_tabs;
 			old_len = (long)STRLEN(ptr);
 			new_line = alloc(old_len - col + start_col + len + 1);
@@ -1677,7 +1677,7 @@
 	    else
 		++col;
 	}
-	if (new_line == NULL)		    /* out of memory */
+	if (new_line == NULL)		    // out of memory
 	    break;
 	line_breakcheck();
     }
@@ -1690,10 +1690,10 @@
     if (tabstop_count(curbuf->b_p_vts_array) == 0
 	&& tabstop_count(new_vts_array) == 1
 	&& curbuf->b_p_ts == tabstop_first(new_vts_array))
-	; /* not changed */
+	; // not changed
     else if (tabstop_count(curbuf->b_p_vts_array) > 0
         && tabstop_eq(curbuf->b_p_vts_array, new_vts_array))
-	; /* not changed */
+	; // not changed
     else
 	redraw_curbuf_later(NOT_VALID);
 #else
@@ -1703,10 +1703,10 @@
     if (first_line != 0)
 	changed_lines(first_line, 0, last_line + 1, 0L);
 
-    curwin->w_p_list = save_list;	/* restore 'list' */
+    curwin->w_p_list = save_list;	// restore 'list'
 
 #ifdef FEAT_VARTABS
-    if (new_ts_str != NULL)		/* set the new tabstop */
+    if (new_ts_str != NULL)		// set the new tabstop
     {
 	// If 'vartabstop' is in use or if the value given to retab has more
 	// than one tabstop then update 'vartabstop'.
diff --git a/src/insexpand.c b/src/insexpand.c
index ce2cc72..1cada4f 100644
--- a/src/insexpand.c
+++ b/src/insexpand.c
@@ -20,7 +20,7 @@
  */
 # define CTRL_X_WANT_IDENT	0x100
 
-# define CTRL_X_NORMAL		0  /* CTRL-N CTRL-P completion, default */
+# define CTRL_X_NORMAL		0  // CTRL-N CTRL-P completion, default
 # define CTRL_X_NOT_DEFINED_YET	1
 # define CTRL_X_SCROLL		2
 # define CTRL_X_WHOLE_LINE	3
@@ -35,8 +35,8 @@
 # define CTRL_X_FUNCTION	12
 # define CTRL_X_OMNI		13
 # define CTRL_X_SPELL		14
-# define CTRL_X_LOCAL_MSG	15	/* only used in "ctrl_x_msgs" */
-# define CTRL_X_EVAL		16	/* for builtin function complete() */
+# define CTRL_X_LOCAL_MSG	15	// only used in "ctrl_x_msgs"
+# define CTRL_X_EVAL		16	// for builtin function complete()
 
 # define CTRL_X_MSG(i) ctrl_x_msgs[(i) & ~CTRL_X_WANT_IDENT]
 
diff --git a/src/iscygpty.c b/src/iscygpty.c
index b018a1d..73d5143 100644
--- a/src/iscygpty.c
+++ b/src/iscygpty.c
@@ -35,18 +35,18 @@
 #include <windows.h>
 
 #ifdef USE_FILEEXTD
-/* VC 7.1 or earlier doesn't support SAL. */
+// VC 7.1 or earlier doesn't support SAL.
 # if !defined(_MSC_VER) || (_MSC_VER < 1400)
 #  define __out
 #  define __in
 #  define __in_opt
 # endif
-/* Win32 FileID API Library:
- * http://www.microsoft.com/en-us/download/details.aspx?id=22599
- * Needed for WinXP. */
+// Win32 FileID API Library:
+// http://www.microsoft.com/en-us/download/details.aspx?id=22599
+// Needed for WinXP.
 # include <fileextd.h>
-#else /* USE_FILEEXTD */
-/* VC 8 or earlier. */
+#else // USE_FILEEXTD
+// VC 8 or earlier.
 # if defined(_MSC_VER) && (_MSC_VER < 1500)
 #  ifdef ENABLE_STUB_IMPL
 #   define STUB_IMPL
@@ -54,7 +54,7 @@
 #   error "Win32 FileID API Library is required for VC2005 or earlier."
 #  endif
 # endif
-#endif /* USE_FILEEXTD */
+#endif // USE_FILEEXTD
 
 
 #include "iscygpty.h"
@@ -104,7 +104,7 @@
 #define is_wprefix(s, prefix) \
 	(wcsncmp((s), (prefix), sizeof(prefix) / sizeof(WCHAR) - 1) == 0)
 
-/* Check if the fd is a cygwin/msys's pty. */
+// Check if the fd is a cygwin/msys's pty.
 int is_cygpty(int fd)
 {
 #ifdef STUB_IMPL
@@ -121,7 +121,7 @@
 	if (h == INVALID_HANDLE_VALUE) {
 		return 0;
 	}
-	/* Cygwin/msys's pty is a pipe. */
+	// Cygwin/msys's pty is a pipe.
 	if (GetFileType(h) != FILE_TYPE_PIPE) {
 		return 0;
 	}
@@ -129,20 +129,20 @@
 	if (nameinfo == NULL) {
 		return 0;
 	}
-	/* Check the name of the pipe:
-	 * '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master' */
+	// Check the name of the pipe:
+	// '\{cygwin,msys}-XXXXXXXXXXXXXXXX-ptyN-{from,to}-master'
 	if (pGetFileInformationByHandleEx(h, FileNameInfo, nameinfo, size)) {
 		nameinfo->FileName[nameinfo->FileNameLength / sizeof(WCHAR)] = L'\0';
 		p = nameinfo->FileName;
-		if (is_wprefix(p, L"\\cygwin-")) {		/* Cygwin */
+		if (is_wprefix(p, L"\\cygwin-")) {		// Cygwin
 			p += 8;
-		} else if (is_wprefix(p, L"\\msys-")) {	/* MSYS and MSYS2 */
+		} else if (is_wprefix(p, L"\\msys-")) {	// MSYS and MSYS2
 			p += 6;
 		} else {
 			p = NULL;
 		}
 		if (p != NULL) {
-			while (*p && isxdigit(*p))	/* Skip 16-digit hexadecimal. */
+			while (*p && isxdigit(*p))	// Skip 16-digit hexadecimal.
 				++p;
 			if (is_wprefix(p, L"-pty")) {
 				p += 4;
@@ -151,7 +151,7 @@
 			}
 		}
 		if (p != NULL) {
-			while (*p && isdigit(*p))	/* Skip pty number. */
+			while (*p && isdigit(*p))	// Skip pty number.
 				++p;
 			if (is_wprefix(p, L"-from-master")) {
 				//p += 12;
@@ -164,10 +164,10 @@
 	}
 	free(nameinfo);
 	return (p != NULL);
-#endif /* STUB_IMPL */
+#endif // STUB_IMPL
 }
 
-/* Check if at least one cygwin/msys pty is used. */
+// Check if at least one cygwin/msys pty is used.
 int is_cygpty_used(void)
 {
 	int fd, ret = 0;
@@ -178,6 +178,6 @@
 	return ret;
 }
 
-#endif /* _WIN32 */
+#endif // _WIN32
 
-/* vim: set ts=4 sw=4: */
+// vim: set ts=4 sw=4:
diff --git a/src/version.c b/src/version.c
index 740f059..c3e900d 100644
--- a/src/version.c
+++ b/src/version.c
@@ -10,7 +10,7 @@
 #include "vim.h"
 
 #ifdef AMIGA
-# include <time.h>	/* for time() */
+# include <time.h>	// for time()
 #endif
 
 /*
@@ -86,7 +86,7 @@
 #else
 	"-acl",
 #endif
-#ifdef AMIGA		/* only for Amiga systems */
+#ifdef AMIGA		// only for Amiga systems
 # ifdef FEAT_ARP
 	"+ARP",
 # else
@@ -269,7 +269,7 @@
 #else
 	"-footer",
 #endif
-	    /* only interesting on Unix systems */
+	    // only interesting on Unix systems
 #if !defined(USE_SYSTEM) && defined(UNIX)
 	"+fork()",
 #endif
@@ -571,7 +571,7 @@
 #else
 	"-syntax",
 #endif
-	    /* only interesting on Unix systems */
+	    // only interesting on Unix systems
 #if defined(USE_SYSTEM) && defined(UNIX)
 	"+system()",
 #endif
@@ -602,7 +602,7 @@
 	"-terminal",
 #endif
 #if defined(UNIX)
-/* only Unix can have terminfo instead of termcap */
+// only Unix can have terminfo instead of termcap
 # ifdef TERMINFO
 	"+terminfo",
 # else
@@ -625,7 +625,7 @@
 	"-textprop",
 #endif
 #if !defined(UNIX)
-/* unix always includes termcap support */
+// unix always includes termcap support
 # ifdef HAVE_TGETENT
 	"+tgetent",
 # else
@@ -743,6 +743,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    27,
+/**/
     26,
 /**/
     25,
@@ -903,8 +905,8 @@
     int		use_highlight = (items == (char_u **)features);
 #endif
 
-    /* Find the length of the longest item, use that + 1 as the column
-     * width. */
+    // Find the length of the longest item, use that + 1 as the column
+    // width.
     for (i = 0; size < 0 ? items[i] != NULL : i < size; ++i)
     {
 	int l = (int)vim_strsize(items[i]) + (i == current ? 2 : 0);
@@ -1035,13 +1037,13 @@
 
 #endif
 
-    /* Print the list of patch numbers if there is at least one. */
-    /* Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45" */
+    // Print the list of patch numbers if there is at least one.
+    // Print a range when patches are consecutive: "1-10, 12, 15-40, 42-45"
     if (included_patches[0] != 0)
     {
 	msg_puts(_("\nIncluded patches: "));
 	first = -1;
-	/* find last one */
+	// find last one
 	for (i = 0; included_patches[i] != 0; ++i)
 	    ;
 	while (--i >= 0)
@@ -1063,7 +1065,7 @@
 	}
     }
 
-    /* Print the list of extra patch descriptions if there is at least one. */
+    // Print the list of extra patch descriptions if there is at least one.
     if (extra_patches[0] != NULL)
     {
 	msg_puts(_("\nExtra patches: "));
@@ -1281,7 +1283,7 @@
  */
     void
 intro_message(
-    int		colon)		/* TRUE for ":intro" */
+    int		colon)		// TRUE for ":intro"
 {
     int		i;
     int		row;
@@ -1337,23 +1339,23 @@
     };
 #endif
 
-    /* blanklines = screen height - # message lines */
+    // blanklines = screen height - # message lines
     blanklines = (int)Rows - ((sizeof(lines) / sizeof(char *)) - 1);
     if (!p_cp)
-	blanklines += 4;  /* add 4 for not showing "Vi compatible" message */
+	blanklines += 4;  // add 4 for not showing "Vi compatible" message
 
-    /* Don't overwrite a statusline.  Depends on 'cmdheight'. */
+    // Don't overwrite a statusline.  Depends on 'cmdheight'.
     if (p_ls > 1)
 	blanklines -= Rows - topframe->fr_height;
     if (blanklines < 0)
 	blanklines = 0;
 
-    /* Show the sponsor and register message one out of four times, the Uganda
-     * message two out of four times. */
+    // Show the sponsor and register message one out of four times, the Uganda
+    // message two out of four times.
     sponsor = (int)time(NULL);
     sponsor = ((sponsor & 2) == 0) - ((sponsor & 4) == 0);
 
-    /* start displaying the message lines after half of the blank lines */
+    // start displaying the message lines after half of the blank lines
     row = blanklines / 2;
     if ((row >= 2 && Columns >= 50) || colon)
     {
@@ -1389,7 +1391,7 @@
 	}
     }
 
-    /* Make the wait-return message appear just below the text. */
+    // Make the wait-return message appear just below the text.
     if (colon)
 	msg_row = row;
 }
@@ -1419,14 +1421,14 @@
     }
 #endif
 
-    /* Center the message horizontally. */
+    // Center the message horizontally.
     col = vim_strsize(mesg);
     if (add_version)
     {
 	STRCPY(vers, mediumVersion);
 	if (highest_patch())
 	{
-	    /* Check for 9.9x or 9.9xx, alpha/beta version */
+	    // Check for 9.9x or 9.9xx, alpha/beta version
 	    if (isalpha((int)vers[3]))
 	    {
 		int len = (isalpha((int)vers[4])) ? 5 : 4;
@@ -1442,7 +1444,7 @@
     if (col < 0)
 	col = 0;
 
-    /* Split up in parts to highlight <> items differently. */
+    // Split up in parts to highlight <> items differently.
     for (p = mesg; *p != NUL; p += l)
     {
 	clen = 0;
@@ -1461,7 +1463,7 @@
 	col += clen;
     }
 
-    /* Add the version number to the version line. */
+    // Add the version number to the version line.
     if (add_version)
 	screen_puts(vers, row, col, 0);
 }
