diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index 5934e6b..9b6f14a 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -753,7 +753,7 @@
     sys.path_importer_cache.update(pic)
 
     # clear type cache
-    sys._cleartypecache()
+    sys._clear_type_cache()
 
     # Clear ABC registries, restoring previously saved ABC registries.
     for abc in [getattr(_abcoll, a) for a in _abcoll.__all__]:
diff --git a/Lib/test/test_builtin.py b/Lib/test/test_builtin.py
index cc31e93..1b9edc0 100644
--- a/Lib/test/test_builtin.py
+++ b/Lib/test/test_builtin.py
@@ -861,6 +861,14 @@
 
     def test_intconversion(self):
         # Test __int__()
+        class ClassicMissingMethods:
+            pass
+        self.assertRaises(TypeError, int, ClassicMissingMethods())
+
+        class MissingMethods(object):
+            pass
+        self.assertRaises(TypeError, int, MissingMethods())
+
         class Foo0:
             def __int__(self):
                 return 42
@@ -892,6 +900,49 @@
         self.assertEqual(int(Foo4()), 42)
         self.assertRaises(TypeError, int, Foo5())
 
+        class Classic:
+            pass
+        for base in (object, Classic):
+            class IntOverridesTrunc(base):
+                def __int__(self):
+                    return 42
+                def __trunc__(self):
+                    return -12
+            self.assertEqual(int(IntOverridesTrunc()), 42)
+
+            class JustTrunc(base):
+                def __trunc__(self):
+                    return 42
+            self.assertEqual(int(JustTrunc()), 42)
+
+            for trunc_result_base in (object, Classic):
+                class Integral(trunc_result_base):
+                    def __int__(self):
+                        return 42
+
+                class TruncReturnsNonInt(base):
+                    def __trunc__(self):
+                        return Integral()
+                self.assertEqual(int(TruncReturnsNonInt()), 42)
+
+                class NonIntegral(trunc_result_base):
+                    def __trunc__(self):
+                        # Check that we avoid infinite recursion.
+                        return NonIntegral()
+
+                class TruncReturnsNonIntegral(base):
+                    def __trunc__(self):
+                        return NonIntegral()
+                try:
+                    int(TruncReturnsNonIntegral())
+                except TypeError as e:
+                    self.assertEquals(str(e),
+                                      "__trunc__ returned non-Integral"
+                                      " (type NonIntegral)")
+                else:
+                    self.fail("Failed to raise TypeError with %s" %
+                              ((base, trunc_result_base),))
+
     def test_iter(self):
         self.assertRaises(TypeError, iter)
         self.assertRaises(TypeError, iter, 42, 42)
@@ -1095,7 +1146,6 @@
         self.assertEqual(int('2br45qc', 35), 4294967297)
         self.assertEqual(int('1z141z5', 36), 4294967297)
 
-
     def test_longconversion(self):
         # Test __long__()
         class Foo0:
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 918116a..925f878 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -517,6 +517,7 @@
         class FakeMessage(mailbox.MaildirMessage):
             pass
         box = mailbox.Maildir(self._path, factory=FakeMessage)
+        box.colon = self._box.colon
         msg2 = box.get_message(key)
         self.assert_(isinstance(msg2, FakeMessage))
 
diff --git a/Lib/test/test_socketserver.py b/Lib/test/test_socketserver.py
index 6a65b6c..0fccdd9 100644
--- a/Lib/test/test_socketserver.py
+++ b/Lib/test/test_socketserver.py
@@ -51,13 +51,14 @@
     SocketServer.DatagramRequestHandler):
     pass
 
-class ForkingUnixStreamServer(SocketServer.ForkingMixIn,
-                              SocketServer.UnixStreamServer):
-    pass
+if HAVE_UNIX_SOCKETS:
+    class ForkingUnixStreamServer(SocketServer.ForkingMixIn,
+                                  SocketServer.UnixStreamServer):
+        pass
 
-class ForkingUnixDatagramServer(SocketServer.ForkingMixIn,
-                                SocketServer.UnixDatagramServer):
-    pass
+    class ForkingUnixDatagramServer(SocketServer.ForkingMixIn,
+                                    SocketServer.UnixDatagramServer):
+        pass
 
 
 class MyMixinServer:
diff --git a/Lib/test/test_sys.py b/Lib/test/test_sys.py
index 8979889..11251b7 100644
--- a/Lib/test/test_sys.py
+++ b/Lib/test/test_sys.py
@@ -330,6 +330,20 @@
             self.assertEqual(type(getattr(sys.flags, attr)), int, attr)
         self.assert_(repr(sys.flags))
 
+    def test_clear_type_cache(self):
+        sys._clear_type_cache()
+
+    def test_compact_freelists(self):
+        sys._compact_freelists()
+        r = sys._compact_freelists()
+        # freed blocks shouldn't change
+        self.assertEqual(r[0][2], 0)
+        # fill freelists
+        floats = [float(i) for i in range(12000)]
+        del floats
+        # should free more than 200 blocks
+        r = sys._compact_freelists()
+        self.assert_(r[0][2] > 200, r[0][2])
 
 def test_main():
     test.test_support.run_unittest(SysModuleTest)
