diff --git a/Lib/locale.py b/Lib/locale.py
index 54d4c0e..f74207d 100644
--- a/Lib/locale.py
+++ b/Lib/locale.py
@@ -575,14 +575,13 @@
                     # returning nothing will crash the
                     # interpreter.
                     result = 'UTF-8'
-
                 setlocale(LC_CTYPE, oldloc)
-                return result
             else:
                 result = nl_langinfo(CODESET)
                 if not result and sys.platform == 'darwin':
                     # See above for explanation
                     result = 'UTF-8'
+            return result
 
 
 ### Database
diff --git a/Lib/test/test_locale.py b/Lib/test/test_locale.py
index 65639ad..8dfaf90 100644
--- a/Lib/test/test_locale.py
+++ b/Lib/test/test_locale.py
@@ -8,12 +8,10 @@
 
 def get_enUS_locale():
     global enUS_locale
-    if sys.platform == 'darwin':
-        raise unittest.SkipTest("Locale support on MacOSX is minimal")
     if sys.platform.startswith("win"):
         tlocs = ("En", "English")
     else:
-        tlocs = ("en_US.UTF-8", "en_US.US-ASCII", "en_US")
+        tlocs = ("en_US.UTF-8", "en_US.ISO8859-1", "en_US.US-ASCII", "en_US")
     oldlocale = locale.setlocale(locale.LC_NUMERIC)
     for tloc in tlocs:
         try:
@@ -309,6 +307,39 @@
             grouping=True, international=True)
 
 
+class TestCollation(unittest.TestCase):
+    # Test string collation functions
+
+    def test_strcoll(self):
+        self.assertLess(locale.strcoll('a', 'b'), 0)
+        self.assertEqual(locale.strcoll('a', 'a'), 0)
+        self.assertGreater(locale.strcoll('b', 'a'), 0)
+
+    def test_strxfrm(self):
+        self.assertLess(locale.strxfrm('a'), locale.strxfrm('b'))
+
+
+class TestEnUSCollation(BaseLocalizedTest, TestCollation):
+    # Test string collation functions with a real English locale
+
+    locale_type = locale.LC_ALL
+
+    def setUp(self):
+        BaseLocalizedTest.setUp(self)
+        enc = codecs.lookup(locale.getpreferredencoding(False) or 'ascii').name
+        if enc not in ('utf-8', 'iso8859-1', 'cp1252'):
+            raise unittest.SkipTest('encoding not suitable')
+        if enc != 'iso8859-1' and (sys.platform == 'darwin' or
+                                   sys.platform.startswith('freebsd')):
+            raise unittest.SkipTest('wcscoll/wcsxfrm have known bugs')
+
+    def test_strcoll_with_diacritic(self):
+        self.assertLess(locale.strcoll('à', 'b'), 0)
+
+    def test_strxfrm_with_diacritic(self):
+        self.assertLess(locale.strxfrm('à'), locale.strxfrm('b'))
+
+
 class TestMiscellaneous(unittest.TestCase):
     def test_getpreferredencoding(self):
         # Invoke getpreferredencoding to make sure it does not cause exceptions.
@@ -317,11 +348,10 @@
             # If encoding non-empty, make sure it is valid
             codecs.lookup(enc)
 
-    if hasattr(locale, "strcoll"):
-        def test_strcoll_3303(self):
-            # test crasher from bug #3303
-            self.assertRaises(TypeError, locale.strcoll, "a", None)
-            self.assertRaises(TypeError, locale.strcoll, b"a", None)
+    def test_strcoll_3303(self):
+        # test crasher from bug #3303
+        self.assertRaises(TypeError, locale.strcoll, "a", None)
+        self.assertRaises(TypeError, locale.strcoll, b"a", None)
 
 
 def test_main():
@@ -331,6 +361,7 @@
         TestEnUSNumberFormatting,
         TestCNumberFormatting,
         TestFrFRNumberFormatting,
+        TestCollation
     ]
     # SkipTest can't be raised inside unittests, handle it manually instead
     try:
@@ -339,7 +370,7 @@
         if verbose:
             print("Some tests will be disabled: %s" % e)
     else:
-        tests += [TestNumberFormatting]
+        tests += [TestNumberFormatting, TestEnUSCollation]
     run_unittest(*tests)
 
 if __name__ == '__main__':
diff --git a/Misc/ACKS b/Misc/ACKS
index e8005e9..cefbc11 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -184,6 +184,7 @@
 Dima Dorfman
 Cesar Douady
 Dean Draayer
+Derk Drukker
 John DuBois
 Paul Dubois
 Graham Dumpleton
diff --git a/Misc/NEWS b/Misc/NEWS
index 2f00c3e..5d15820 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -13,7 +13,7 @@
 -----------------
 
 - Issue #7065: Fix a crash in bytes.maketrans and bytearray.maketrans when
-  using byte values greater than 127.  Patch by egreen.
+  using byte values greater than 127.  Patch by Derk Drukker.
 
 - Issue #7019: Raise ValueError when unmarshalling bad long data, instead
   of producing internally inconsistent Python longs.
@@ -30,6 +30,9 @@
 Library
 -------
 
+- Issue #7080: locale.strxfrm() raises a MemoryError on 64-bit non-Windows
+  platforms, and assorted locale fixes by Derk Drukker.
+
 - Issue #5833: Fix extra space character in readline completion with the
   GNU readline library version 6.0.
 
@@ -45,7 +48,7 @@
   is too large to fit in the current precision.
 
 - Issue #6236, #6348: Fix various failures in the I/O library under AIX
-  and other platforms, when using a non-gcc compiler. Patch by egreen.
+  and other platforms, when using a non-gcc compiler. Patch by Derk Drukker.
 
 - Issue #6954: Fixed crash when using DISTUTILS_DEBUG flag in Distutils.
 
diff --git a/Modules/_localemodule.c b/Modules/_localemodule.c
index 8bcdb10..d90a49d 100644
--- a/Modules/_localemodule.c
+++ b/Modules/_localemodule.c
@@ -9,6 +9,7 @@
 
 ******************************************************************/
 
+#define PY_SSIZE_T_CLEAN
 #include "Python.h"
 
 #include <stdio.h>
@@ -315,7 +316,7 @@
     result = PyUnicode_FromWideChar(buf, n2);
  exit:
     if (buf) PyMem_Free(buf);
-#ifdef HAVE_USABLE_WCHAR_T
+#ifndef HAVE_USABLE_WCHAR_T
     PyMem_Free(s);
 #endif
     return result;
diff --git a/PC/pyconfig.h b/PC/pyconfig.h
index 3c3c6f4..2444c8a 100644
--- a/PC/pyconfig.h
+++ b/PC/pyconfig.h
@@ -647,6 +647,11 @@
 #define HAVE_WCSCOLL 1
 #endif
 
+/* Define to 1 if you have the `wcsxfrm' function. */
+#ifndef MS_WINCE
+#define HAVE_WCSXFRM 1
+#endif
+
 /* Define if you have the <dlfcn.h> header file.  */
 /* #undef HAVE_DLFCN_H */
 
