diff --git a/newlib/libc/include/ctype.h b/newlib/libc/include/ctype.h
index 31577d1..06458cb 100644
--- a/newlib/libc/include/ctype.h
+++ b/newlib/libc/include/ctype.h
@@ -5,7 +5,7 @@
 #include <sys/cdefs.h>
 
 #if __POSIX_VISIBLE >= 200809 || __MISC_VISIBLE || defined (_COMPILING_NEWLIB)
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 _BEGIN_STD_C
diff --git a/newlib/libc/include/langinfo.h b/newlib/libc/include/langinfo.h
index 193cce3..59381d6 100644
--- a/newlib/libc/include/langinfo.h
+++ b/newlib/libc/include/langinfo.h
@@ -33,7 +33,7 @@
 #include <sys/config.h>
 #include <sys/cdefs.h>
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 typedef int nl_item;
diff --git a/newlib/libc/include/locale.h b/newlib/libc/include/locale.h
index 7feb881..8ba88a9 100644
--- a/newlib/libc/include/locale.h
+++ b/newlib/libc/include/locale.h
@@ -23,7 +23,7 @@
 
 #if __POSIX_VISIBLE >= 200809 || defined (_COMPILING_NEWLIB)
 
-#include <sys/_locale.h>
+#include <xlocale.h>
 
 #define LC_ALL_MASK		(1 << LC_ALL)
 #define LC_COLLATE_MASK		(1 << LC_COLLATE)
diff --git a/newlib/libc/include/stdlib.h b/newlib/libc/include/stdlib.h
index 7b62e00..9ee32ac 100644
--- a/newlib/libc/include/stdlib.h
+++ b/newlib/libc/include/stdlib.h
@@ -27,7 +27,7 @@
 #endif
 
 #if __GNU_VISIBLE
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 _BEGIN_STD_C
diff --git a/newlib/libc/include/string.h b/newlib/libc/include/string.h
index ba5e51e..4e0e151 100644
--- a/newlib/libc/include/string.h
+++ b/newlib/libc/include/string.h
@@ -17,7 +17,7 @@
 #include <stddef.h>
 
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 _BEGIN_STD_C
diff --git a/newlib/libc/include/strings.h b/newlib/libc/include/strings.h
index be01958..3331611 100644
--- a/newlib/libc/include/strings.h
+++ b/newlib/libc/include/strings.h
@@ -16,7 +16,7 @@
 #include <sys/types.h> /* for size_t */
 
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 _BEGIN_STD_C
diff --git a/newlib/libc/include/sys/_locale.h b/newlib/libc/include/sys/_locale.h
deleted file mode 100644
index ce6f995..0000000
--- a/newlib/libc/include/sys/_locale.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/* Definition of opaque POSIX-1.2008 type locale_t for userspace. */
-
-#ifndef	_SYS__LOCALE_H
-#define _SYS__LOCALE_H
-
-#include <newlib.h>
-#include <sys/config.h>
-
-struct __locale_t;
-typedef struct __locale_t *locale_t;
-
-#endif	/* _SYS__LOCALE_H */
diff --git a/newlib/libc/include/time.h b/newlib/libc/include/time.h
index ec67cb2..8806b98 100644
--- a/newlib/libc/include/time.h
+++ b/newlib/libc/include/time.h
@@ -29,7 +29,7 @@
 #include <sys/timespec.h>
 
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 _BEGIN_STD_C
diff --git a/newlib/libc/include/wchar.h b/newlib/libc/include/wchar.h
index 4766ca9..25ee9a8 100644
--- a/newlib/libc/include/wchar.h
+++ b/newlib/libc/include/wchar.h
@@ -64,7 +64,7 @@ typedef __gnuc_va_list va_list;
 #endif
 
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 _BEGIN_STD_C
diff --git a/newlib/libc/include/wctype.h b/newlib/libc/include/wctype.h
index d085374..3d36d5a 100644
--- a/newlib/libc/include/wctype.h
+++ b/newlib/libc/include/wctype.h
@@ -8,7 +8,7 @@
 #include <stddef.h>
 
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 #ifndef WEOF
diff --git a/newlib/libc/include/xlocale.h b/newlib/libc/include/xlocale.h
new file mode 100644
index 0000000..f955426
--- /dev/null
+++ b/newlib/libc/include/xlocale.h
@@ -0,0 +1,12 @@
+/* Definition of opaque POSIX-1.2008 type locale_t for userspace. */
+
+#ifndef	_XLOCALE_H
+#define _XLOCALE_H
+
+#include <newlib.h>
+#include <sys/config.h>
+
+struct __locale_t;
+typedef struct __locale_t *locale_t;
+
+#endif	/* _XLOCALE_H */
diff --git a/winsup/cygwin/include/monetary.h b/winsup/cygwin/include/monetary.h
index 1c3479b..82a6312 100644
--- a/winsup/cygwin/include/monetary.h
+++ b/winsup/cygwin/include/monetary.h
@@ -32,7 +32,7 @@
 #include <sys/cdefs.h>
 #include <sys/types.h>
 #if __POSIX_VISIBLE >= 200809
-#include <sys/_locale.h>
+#include <xlocale.h>
 #endif
 
 __BEGIN_DECLS
diff --git a/winsup/doc/new-features.xml b/winsup/doc/new-features.xml
index 185c97e..324d99d 100644
--- a/winsup/doc/new-features.xml
+++ b/winsup/doc/new-features.xml
@@ -30,6 +30,11 @@ Pthread_cond_wait now acts like Linux and BSD: Resume waiting for the
 condition variable as if it was not interrupted, rather than returning 0.
 </para></listitem>
 
+<listitem><para>
+The internal &lt;sys/_locale.h&gt; header was renamed to &lt;xlocale.h&gt; for
+source compatibility with other systems.
+</para></listitem>
+
 </itemizedlist>
 
 </sect2>
