diff --git a/Lib/test/test_cfgparser.py b/Lib/test/test_cfgparser.py
index a0d8051..78657de 100644
--- a/Lib/test/test_cfgparser.py
+++ b/Lib/test/test_cfgparser.py
@@ -17,8 +17,9 @@
         return result
 
     def values(self):
+        # XXX never used?
         result = self.items()
-        return [i[1] for i in values]
+        return [i[1] for i in result]
 
     def iteritems(self): return iter(self.items())
     def iterkeys(self): return iter(self.keys())
diff --git a/Lib/test/test_docxmlrpc.py b/Lib/test/test_docxmlrpc.py
index 57813c9..13a3a9f 100644
--- a/Lib/test/test_docxmlrpc.py
+++ b/Lib/test/test_docxmlrpc.py
@@ -3,6 +3,7 @@
 from test import test_support
 import threading
 import time
+import socket
 import unittest
 import xmlrpclib
 
diff --git a/Lib/test/test_long.py b/Lib/test/test_long.py
index 5addd2e..a91b644 100644
--- a/Lib/test/test_long.py
+++ b/Lib/test/test_long.py
@@ -506,7 +506,7 @@
         except OverflowError:
             self.fail("int(long(sys.maxint)) overflowed!")
         if not isinstance(x, int):
-            raise TestFailed("int(long(sys.maxint)) should have returned int")
+            self.fail("int(long(sys.maxint)) should have returned int")
         x = int(hugeneg_aslong)
         try:
             self.assertEqual(x, hugeneg,
@@ -514,8 +514,7 @@
         except OverflowError:
             self.fail("int(long(-sys.maxint-1)) overflowed!")
         if not isinstance(x, int):
-            raise TestFailed("int(long(-sys.maxint-1)) should have "
-                             "returned int")
+            self.fail("int(long(-sys.maxint-1)) should have returned int")
         # but long -> int should overflow for hugepos+1 and hugeneg-1
         x = hugepos_aslong + 1
         try:
@@ -714,7 +713,7 @@
                     self.d = d
                     assert float(n) / float(d) == value
                 else:
-                    raise TypeError("can't deal with %r" % val)
+                    raise TypeError("can't deal with %r" % value)
 
             def __cmp__(self, other):
                 if not isinstance(other, Rat):
diff --git a/Lib/test/test_minidom.py b/Lib/test/test_minidom.py
index f1f1378..16977a5 100644
--- a/Lib/test/test_minidom.py
+++ b/Lib/test/test_minidom.py
@@ -1295,12 +1295,13 @@
                 self.confirm(len(n1.entities) == len(n2.entities)
                         and len(n1.notations) == len(n2.notations))
                 for i in range(len(n1.notations)):
+                    # XXX this loop body doesn't seem to be executed?
                     no1 = n1.notations.item(i)
                     no2 = n1.notations.item(i)
                     self.confirm(no1.name == no2.name
                             and no1.publicId == no2.publicId
                             and no1.systemId == no2.systemId)
-                    statck.append((no1, no2))
+                    stack.append((no1, no2))
                 for i in range(len(n1.entities)):
                     e1 = n1.entities.item(i)
                     e2 = n2.entities.item(i)
diff --git a/Lib/test/test_multiprocessing.py b/Lib/test/test_multiprocessing.py
index 107cd62..4bd877c 100644
--- a/Lib/test/test_multiprocessing.py
+++ b/Lib/test/test_multiprocessing.py
@@ -1560,10 +1560,10 @@
             return
 
         x = Value('i', 7, lock=lock)
-        y = Value(ctypes.c_double, 1.0/3.0, lock=lock)
+        y = Value(c_double, 1.0/3.0, lock=lock)
         foo = Value(_Foo, 3, 2, lock=lock)
-        arr = Array('d', range(10), lock=lock)
-        string = Array('c', 20, lock=lock)
+        arr = self.Array('d', range(10), lock=lock)
+        string = self.Array('c', 20, lock=lock)
         string.value = 'hello'
 
         p = self.Process(target=self._double, args=(x, y, foo, arr, string))
diff --git a/Lib/test/test_platform.py b/Lib/test/test_platform.py
index c3fd323..2177123 100644
--- a/Lib/test/test_platform.py
+++ b/Lib/test/test_platform.py
@@ -128,8 +128,10 @@
         if os.path.isdir(sys.executable) and \
            os.path.exists(sys.executable+'.exe'):
             # Cygwin horror
-            executable = executable + '.exe'
-        res = platform.libc_ver(sys.executable)
+            executable = sys.executable + '.exe'
+        else:
+            executable = sys.executable
+        res = platform.libc_ver(executable)
 
     def test_parse_release_file(self):
 
diff --git a/Lib/test/test_sgmllib.py b/Lib/test/test_sgmllib.py
index 081e0e1..c18bcc3 100644
--- a/Lib/test/test_sgmllib.py
+++ b/Lib/test/test_sgmllib.py
@@ -298,14 +298,6 @@
             ("starttag", "a", [("href", "http://[1080::8:800:200C:417A]/")]),
             ])
 
-    def test_illegal_declarations(self):
-        s = 'abc<!spacer type="block" height="25">def'
-        self.check_events(s, [
-            ("data", "abc"),
-            ("unknown decl", 'spacer type="block" height="25"'),
-            ("data", "def"),
-            ])
-
     def test_weird_starttags(self):
         self.check_events("<a<a>", [
             ("starttag", "a", []),
