diff --git a/src/Makefile b/src/Makefile
index 5a134a6..1b13aa9 100644
--- a/src/Makefile
+++ b/src/Makefile
@@ -651,12 +651,16 @@
 
 # PROFILING - Uncomment the next two lines to do profiling with gcc and gprof.
 # Might not work with GUI or Perl.
-# For unknown reasons adding "-lc" fixes a linking problem with some versions
-# of GCC.  That's probably a bug in the "-pg" implementation.
 # After running Vim see the profile result with: gprof vim gmon.out | vim -
 # Need to recompile everything after changing this: "make clean" "make".
 #PROFILE_CFLAGS = -pg -g -DWE_ARE_PROFILING
 #PROFILE_LIBS = -pg
+
+# GCC 5 and later need the -no-pie argument.
+#PROFILE_LIBS = -pg -no-pie
+
+# For unknown reasons adding "-lc" fixes a linking problem with some versions
+# of GCC.  That's probably a bug in the "-pg" implementation.
 #PROFILE_LIBS = -pg -lc
 
 
diff --git a/src/README.txt b/src/README.txt
index 2fafd4f..e134306 100644
--- a/src/README.txt
+++ b/src/README.txt
@@ -8,8 +8,8 @@
 
 JUMPING AROUND
 
-First of all, use ":make tags" to generate a tags file, so that you can use
-the ":tag" command to jump around the source code.
+First of all, use ":make tags" to generate a tags file, so that you can jump
+around in the source code.
 
 To jump to a function or variable definition, move the cursor on the name and
 use the CTRL-] command.  Use CTRL-T or CTRL-O to jump back.
@@ -43,6 +43,21 @@
 	window.c	handling split windows
 
 
+DEBUGGING
+
+If you have a reasonable recent version of gdb, you can use the :Termdebug
+command to debug Vim.  See  ":help :Termdebug".
+
+When something is time critical or stepping through code is a hassle, use the
+channel logging to create a time-stamped log file.  Add lines to the code like
+this:
+	ch_log(NULL, "Value is now %02x", value);
+After compiling and starting Vim, do:
+	:call ch_logfile('debuglog', 'w')
+And edit "debuglog" to see what happens.  The channel functions already have
+ch_log() calls, thus you always see that in the log.
+
+
 IMPORTANT VARIABLES
 
 The current mode is stored in "State".  The values it can have are NORMAL,
diff --git a/src/beval.c b/src/beval.c
index 981e5ea..4ceddca 100644
--- a/src/beval.c
+++ b/src/beval.c
@@ -137,7 +137,7 @@
  * Show a balloon with "mesg" or "list".
  */
     void
-post_balloon(BalloonEval *beval UNUSED, char_u *mesg, list_T *list)
+post_balloon(BalloonEval *beval UNUSED, char_u *mesg, list_T *list UNUSED)
 {
 # ifdef FEAT_BEVAL_TERM
 #  ifdef FEAT_GUI
diff --git a/src/dosinst.c b/src/dosinst.c
index 94e8669..6a12e3d 100644
--- a/src/dosinst.c
+++ b/src/dosinst.c
@@ -1200,8 +1200,8 @@
 
 	/* If the path has a space:  When using cmd.exe (Win NT/2000/XP) put
 	 * quotes around the diff command and rely on the default value of
-         * shellxquote to solve the quoting problem for the whole command.
-         *
+	 * shellxquote to solve the quoting problem for the whole command.
+	 *
 	 * Otherwise put a double quote just before the space and at the
 	 * end of the command.  Putting quotes around the whole thing
 	 * doesn't work on Win 95/98/ME.  This is mostly guessed! */
diff --git a/src/gui_gtk.c b/src/gui_gtk.c
index 7ae9cbf..ed539e3 100644
--- a/src/gui_gtk.c
+++ b/src/gui_gtk.c
@@ -1895,8 +1895,8 @@
 	trigger.window     = gtk_widget_get_window(gui.drawarea);
 	trigger.send_event = FALSE;
 	trigger.time       = gui.event_time;
-	trigger.x          = 0.0;
-	trigger.y          = 0.0;
+	trigger.x	   = 0.0;
+	trigger.y	   = 0.0;
 	trigger.axes       = NULL;
 	trigger.state      = 0;
 	trigger.button     = 3;
@@ -1983,8 +1983,8 @@
 	trigger.window     = win;
 	trigger.send_event = FALSE;
 	trigger.time       = GDK_CURRENT_TIME;
-	trigger.x          = 0.0;
-	trigger.y          = 0.0;
+	trigger.x	   = 0.0;
+	trigger.y	   = 0.0;
 	trigger.axes       = NULL;
 	trigger.state      = 0;
 	trigger.button     = 0;
diff --git a/src/if_py_both.h b/src/if_py_both.h
index 3380142..48137f1 100644
--- a/src/if_py_both.h
+++ b/src/if_py_both.h
@@ -5996,7 +5996,7 @@
     PyObject	*capsule;
     char	hexBuf[sizeof(void *) * 2 + 3];
 
-    sprintf(hexBuf, "%p", obj);
+    sprintf(hexBuf, "%p", (void *)obj);
 
 # ifdef PY_USE_CAPSULE
     capsule = PyDict_GetItemString(lookup_dict, hexBuf);
diff --git a/src/if_python.c b/src/if_python.c
index ab9c854..8ba1241 100644
--- a/src/if_python.c
+++ b/src/if_python.c
@@ -74,7 +74,7 @@
 #undef HAVE_FCNTL_H /* Clash with os_win32.h */
 
 #define PyBytes_FromString      PyString_FromString
-#define PyBytes_Check           PyString_Check
+#define PyBytes_Check		PyString_Check
 #define PyBytes_AsStringAndSize PyString_AsStringAndSize
 
 #if !defined(FEAT_PYTHON) && defined(PROTO)
diff --git a/src/if_xcmdsrv.c b/src/if_xcmdsrv.c
index 2d87e30..af2e672 100644
--- a/src/if_xcmdsrv.c
+++ b/src/if_xcmdsrv.c
@@ -1123,7 +1123,7 @@
  * This procedure is invoked by the various X event loops throughout Vims when
  * a property changes on the communication window.  This procedure reads the
  * property and enqueues command requests and responses. If immediate is true,
- * it runs the event immediatly instead of enqueuing it. Immediate can cause
+ * it runs the event immediately instead of enqueuing it. Immediate can cause
  * unintended behavior and should only be used for code that blocks for a
  * response.
  */
diff --git a/src/iscygpty.c b/src/iscygpty.c
index 722f88f..b018a1d 100644
--- a/src/iscygpty.c
+++ b/src/iscygpty.c
@@ -62,20 +62,18 @@
 //#define USE_DYNFILEID
 #ifdef USE_DYNFILEID
 typedef BOOL (WINAPI *pfnGetFileInformationByHandleEx)(
-		HANDLE                    hFile,
-		FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
-		LPVOID                    lpFileInformation,
-		DWORD                     dwBufferSize
-);
+		HANDLE						hFile,
+		FILE_INFO_BY_HANDLE_CLASS	FileInformationClass,
+		LPVOID						lpFileInformation,
+		DWORD						dwBufferSize);
 static pfnGetFileInformationByHandleEx pGetFileInformationByHandleEx = NULL;
 
 # ifndef USE_FILEEXTD
 static BOOL WINAPI stub_GetFileInformationByHandleEx(
-		HANDLE                    hFile,
-		FILE_INFO_BY_HANDLE_CLASS FileInformationClass,
-		LPVOID                    lpFileInformation,
-		DWORD                     dwBufferSize
-		)
+		HANDLE						hFile,
+		FILE_INFO_BY_HANDLE_CLASS	FileInformationClass,
+		LPVOID						lpFileInformation,
+		DWORD						dwBufferSize)
 {
 	return FALSE;
 }
diff --git a/src/json_test.c b/src/json_test.c
index c7779b2..47bec8e 100644
--- a/src/json_test.c
+++ b/src/json_test.c
@@ -162,7 +162,7 @@
     reader.js_fill = fill_from_cookie;
     reader.js_used = 0;
     reader.js_buf = (char_u *)"  [  \"a\"  ,  123  ";
-    reader.js_cookie =        "  [  \"a\"  ,  123  ]  ";
+    reader.js_cookie =	      "  [  \"a\"  ,  123  ]  ";
     assert(json_find_end(&reader, 0) == OK);
     reader.js_buf = (char_u *)"  [  \"a\"  ,  ";
     assert(json_find_end(&reader, 0) == OK);
@@ -186,7 +186,7 @@
     reader.js_used = 0;
     reader.js_buf = (char_u *)" \"foo";
     reader.js_end = reader.js_buf + STRLEN(reader.js_buf);
-    reader.js_cookie =        " \"foobar\"  ";
+    reader.js_cookie =	      " \"foobar\"  ";
     assert(json_decode_string(&reader, NULL, '"') == OK);
 }
 #endif
diff --git a/src/libvterm/include/vterm_keycodes.h b/src/libvterm/include/vterm_keycodes.h
index 7a77916..2c54483 100644
--- a/src/libvterm/include/vterm_keycodes.h
+++ b/src/libvterm/include/vterm_keycodes.h
@@ -8,6 +8,7 @@
   VTERM_MOD_CTRL  = 0x04
 } VTermModifier;
 
+/* The order here must match keycodes[] in src/keyboard.c! */
 typedef enum {
   VTERM_KEY_NONE,
 
diff --git a/src/mbyte.c b/src/mbyte.c
index 575fd52..9b788b0 100644
--- a/src/mbyte.c
+++ b/src/mbyte.c
@@ -2260,7 +2260,6 @@
 /*
  * Convert Unicode character "c" to UTF-8 string in "buf[]".
  * Returns the number of bytes.
- * This does not include composing characters.
  */
     int
 utf_char2bytes(int c, char_u *buf)
diff --git a/src/os_vms.c b/src/os_vms.c
index f1c0698..02c594c 100644
--- a/src/os_vms.c
+++ b/src/os_vms.c
@@ -18,7 +18,7 @@
 /* based on Alpha's gen64def.h; the file is absent on VAX */
 typedef struct _generic_64 {
 #   pragma __nomember_alignment
-    __union  {                          /* You can treat me as...  */
+    __union  {				/* You can treat me as...  */
 	/* long long is not available on VAXen */
 	/* unsigned __int64 gen64$q_quadword; ...a single 64-bit value, or */
 
@@ -461,8 +461,7 @@
 	result = decc$translate_vms(vms_fixfilename(buf));
 	if ( (int) result == 0 || (int) result == -1  ) {
 	    cnt = 0;
-	}
-        else {
+	} else {
 	    cnt = decc$to_vms(result, vms_wproc, 1 /*allow wild*/ , (flags & EW_DIR ? 0:1 ) /*allow directory*/) ;
 	}
 	if (cnt > 0)
@@ -519,10 +518,9 @@
     /* otherwise it might create ACCVIO error in decc$to_vms      */
     result = decc$translate_vms(vms_fixfilename(path));
     if ( (int) result == 0 || (int) result == -1  ) {
-        cnt = 0;
-    }
-    else {
-        cnt = decc$to_vms(result, vms_wproc, 1 /*allow_wild*/, (flags & EW_DIR ? 0:1 ) /*allow directory*/);
+	cnt = 0;
+    } else {
+	cnt = decc$to_vms(result, vms_wproc, 1 /*allow_wild*/, (flags & EW_DIR ? 0:1 ) /*allow directory*/);
     }
     if (cnt > 0)
 	cnt = vms_match_num;
@@ -741,68 +739,66 @@
 	get_tty();
 
     if (sec > 0) {
-        /* time-out specified; convert it to absolute time */
+	/* time-out specified; convert it to absolute time */
 	/* sec>0 requirement of lib$cvtf_to_internal_time()*/
 
-        /* get current time (number of 100ns ticks since the VMS Epoch) */
-        status = sys$gettim(&time_curr);
-        if (status != SS$_NORMAL)
-            return 0; /* error */
-        /* construct the delta time */
+	/* get current time (number of 100ns ticks since the VMS Epoch) */
+	status = sys$gettim(&time_curr);
+	if (status != SS$_NORMAL)
+	    return 0; /* error */
+	/* construct the delta time */
 #if __G_FLOAT==0
 # ifndef VAX
 	/* IEEE is default on IA64, but can be used on Alpha too - but not on VAX */
-        status = lib$cvts_to_internal_time(
-                &convert_operation, &sec, &time_diff);
+	status = lib$cvts_to_internal_time(
+		&convert_operation, &sec, &time_diff);
 # endif
 #else   /* default on Alpha and VAX  */
-        status = lib$cvtf_to_internal_time(
+	status = lib$cvtf_to_internal_time(
 		&convert_operation, &sec, &time_diff);
 #endif
-        if (status != LIB$_NORMAL)
-            return 0; /* error */
-        /* add them up */
-        status = lib$add_times(
-                &time_curr,
-                &time_diff,
-                &time_out);
-        if (status != LIB$_NORMAL)
-            return 0; /* error */
+	if (status != LIB$_NORMAL)
+	    return 0; /* error */
+	/* add them up */
+	status = lib$add_times(
+		&time_curr,
+		&time_diff,
+		&time_out);
+	if (status != LIB$_NORMAL)
+	    return 0; /* error */
     }
 
     while (TRUE) {
-        /* select() */
-        status = sys$qiow(0, iochan, IO$_SENSEMODE | IO$M_TYPEAHDCNT, iosb,
-                0, 0, &typeahead, 8, 0, 0, 0, 0);
+	/* select() */
+	status = sys$qiow(0, iochan, IO$_SENSEMODE | IO$M_TYPEAHDCNT, iosb,
+		0, 0, &typeahead, 8, 0, 0, 0, 0);
 	if (status != SS$_NORMAL || (iosb[0] & 0xFFFF) != SS$_NORMAL)
-            return 0; /* error */
+	    return 0; /* error */
 
-        if (typeahead.numchars)
-            return 1; /* ready to read */
+	if (typeahead.numchars)
+	    return 1; /* ready to read */
 
-        /* there's nothing to read; what now? */
-        if (msec == 0) {
-            /* immediate time-out; return impatiently */
-            return 0;
-        }
-        else if (msec < 0) {
-            /* no time-out; wait on indefinitely */
-            continue;
-        }
-        else {
-            /* time-out needs to be checked */
-            status = sys$gettim(&time_curr);
-            if (status != SS$_NORMAL)
-                return 0; /* error */
+	/* there's nothing to read; what now? */
+	if (msec == 0) {
+	    /* immediate time-out; return impatiently */
+	    return 0;
+	} else if (msec < 0) {
+	    /* no time-out; wait on indefinitely */
+	    continue;
+	} else {
+	    /* time-out needs to be checked */
+	    status = sys$gettim(&time_curr);
+	    if (status != SS$_NORMAL)
+		return 0; /* error */
 
-            status = lib$sub_times(
-                    &time_out,
-                    &time_curr,
-                    &time_diff);
-            if (status != LIB$_NORMAL)
-                return 0; /* error, incl. time_diff < 0 (i.e. time-out) */
+	    status = lib$sub_times(
+		    &time_out,
+		    &time_curr,
+		    &time_diff);
+	    if (status != LIB$_NORMAL)
+		return 0; /* error, incl. time_diff < 0 (i.e. time-out) */
 
-            /* otherwise wait some more */
-        }
+	    /* otherwise wait some more */
+	}
     }
 }
diff --git a/src/pty.c b/src/pty.c
index 1a27ab6..940f63e 100644
--- a/src/pty.c
+++ b/src/pty.c
@@ -268,7 +268,7 @@
 #endif
 
 #if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) \
-                    && !(defined(MACOS_X) && !defined(MAC_OS_X_VERSION_10_6))
+	    && !(defined(MACOS_X) && !defined(MAC_OS_X_VERSION_10_6))
 
 /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work!
  * Same for Mac OS X Leopard (10.5). */
diff --git a/src/version.c b/src/version.c
index f5ffe20..048387b 100644
--- a/src/version.c
+++ b/src/version.c
@@ -779,6 +779,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    1550,
+/**/
     1549,
 /**/
     1548,
diff --git a/src/vimrun.c b/src/vimrun.c
index 2566859..13efd91 100644
--- a/src/vimrun.c
+++ b/src/vimrun.c
@@ -55,7 +55,7 @@
 	++p;
     }
     while (*p == L' ')
-        ++p;
+	++p;
 
     /*
      * "-s" argument: don't wait for a key hit.
