diff --git a/Source/WTF/wtf/Compiler.h b/Source/WTF/wtf/Compiler.h
index ead844f..e62cfd4 100644
--- Source/WTF/wtf/Compiler.h
+++ Source/WTF/wtf/Compiler.h
@@ -61,6 +61,7 @@
 #define WTF_COMPILER_SUPPORTS_HAS_TRIVIAL_DESTRUCTOR __has_feature(has_trivial_destructor)
 #define WTF_COMPILER_SUPPORTS_CXX_STRONG_ENUMS __has_feature(cxx_strong_enums)
 #define WTF_COMPILER_SUPPORTS_CXX_REFERENCE_QUALIFIED_FUNCTIONS __has_feature(cxx_reference_qualified_functions)
+#define WTF_COMPILER_SUPPORTS_CXX_NEW_CHAR_TYPES !defined(_LIBCPP_HAS_NO_UNICODE_CHARS)
 
 #endif
 
@@ -142,6 +143,7 @@
 #define WTF_COMPILER_SUPPORTS_CXX_DELETED_FUNCTIONS 1
 #endif
 #if GCC_VERSION_AT_LEAST(4, 5, 0)
+#define WTF_COMPILER_SUPPORTS_CXX_NEW_CHAR_TYPES 1
 #define WTF_COMPILER_SUPPORTS_CXX_EXPLICIT_CONVERSIONS 1
 #endif
 #if GCC_VERSION_AT_LEAST(4, 6, 0)
diff --git a/Source/WTF/wtf/TypeTraits.h b/Source/WTF/wtf/TypeTraits.h
index b9e46bc..876fa45 100644
--- Source/WTF/wtf/TypeTraits.h
+++ Source/WTF/wtf/TypeTraits.h
@@ -75,6 +75,10 @@ namespace WTF {
 #if !COMPILER(MSVC) || defined(_NATIVE_WCHAR_T_DEFINED)
     template<> struct IsInteger<wchar_t>            { static const bool value = true; };
 #endif
+#if COMPILER_SUPPORTS(CXX_NEW_CHAR_TYPES)
+    template<> struct IsInteger<char16_t>           { static const bool value = true; };
+    template<> struct IsInteger<char32_t>           { static const bool value = true; };
+#endif
 
     template<typename T> struct IsFloatingPoint     { static const bool value = false; };
     template<> struct IsFloatingPoint<float>        { static const bool value = true; };
--- Source/JavaScriptCore/API/JSStringRef.h.orig	2015-10-13 06:37:10.000000000 +0200
+++ Source/JavaScriptCore/API/JSStringRef.h	2017-04-24 12:26:42.495345570 +0200
@@ -32,6 +32,7 @@
 #include <stdbool.h>
 #endif
 #include <stddef.h> /* for size_t */
+#include <uchar.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -43,7 +44,7 @@
 @typedef JSChar
 @abstract A Unicode character.
 */
-    typedef unsigned short JSChar;
+    typedef char16_t JSChar;
 #else
     typedef wchar_t JSChar;
 #endif
--- Source/WebKit2/Shared/API/c/WKString.h.orig	2015-10-13 06:37:12.000000000 +0200
+++ Source/WebKit2/Shared/API/c/WKString.h	2017-04-24 12:27:33.432011867 +0200
@@ -31,6 +31,7 @@
 #ifndef __cplusplus
 #include <stdbool.h>
 #endif
+#include <uchar.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -38,7 +39,7 @@
 
 #if !defined(WIN32) && !defined(_WIN32) \
     && !((defined(__CC_ARM) || defined(__ARMCC__)) && !defined(__linux__)) /* RVCT */
-    typedef unsigned short WKChar;
+    typedef char16_t WKChar;
 #else
     typedef wchar_t WKChar;
 #endif
