diff --git a/ChangeLog b/ChangeLog
index d1aeea9bcecf95113ad4dcb653b0a20d43223a7e..d4a041908a1e57528651e821b2e51dd9c0b53b82 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -5,6 +5,7 @@
 	an invalid escape sequence, and when entering a verbatim keystroke.
 	Leave the cursor off during Unicode input, for extra feedback.
 	* src/browser.c (do_browser): Improve the wording of a message.
+	* src/chars.c (is_valid_unicode): Speed up Unicode validation.
 
 2016-03-28  Benno Schulenberg  <bensberg@justemail.net>
 	* src/winio.c (statusbar): Don't bother putting back the cursor in
diff --git a/src/chars.c b/src/chars.c
index 113ae2e4040457fd2299d4e7d5b5446cf4267786..ed5983096e683d3c0caf3c83b2ab279502b8636e 100644
--- a/src/chars.c
+++ b/src/chars.c
@@ -955,9 +955,10 @@ bool has_blank_mbchars(const char *s)
 /* Return TRUE if wc is valid Unicode, and FALSE otherwise. */
 bool is_valid_unicode(wchar_t wc)
 {
-    return ((0 <= wc && wc <= 0x10FFFF) && (wc <= 0xD7FF || 0xE000 <=
-	wc) && (wc <= 0xFDCF || 0xFDF0 <= wc) && ((wc & 0xFFFF) <=
-	0xFFFD));
+    return ((0 <= wc && wc <= 0xD7FF) ||
+		 (0xE000 <= wc && wc <= 0xFDCF) ||
+		 (0xFDF0 <= wc && wc <= 0xFFFD) ||
+		 (0xFFFF < wc && wc <= 0x10FFFF && (wc & 0xFFFF) <= 0xFFFD));
 }
 #endif