diff --git a/Lib/test/test_crypt.py b/Lib/test/test_crypt.py
index c69dba8..f6f3a81 100755
--- a/Lib/test/test_crypt.py
+++ b/Lib/test/test_crypt.py
@@ -1,11 +1,16 @@
-#! /usr/bin/env python
-"""Simple test script for cryptmodule.c
-   Roger E. Masse
-"""
-
-from test.test_support import verbose
+from test import test_support
+import unittest
 import crypt
 
-c = crypt.crypt('mypassword', 'ab')
-if verbose:
-    print 'Test encryption: ', c
+class CryptTestCase(unittest.TestCase):
+
+    def test_crypt(self):
+        c = crypt.crypt('mypassword', 'ab')
+        if test_support.verbose:
+            print 'Test encryption: ', c
+
+def test_main():
+    test_support.run_unittest(CryptTestCase)
+
+if __name__ == "__main__":
+    test_main()
diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py
index d341324..52805e6 100644
--- a/Lib/test/test_select.py
+++ b/Lib/test/test_select.py
@@ -1,70 +1,53 @@
-# Testing select module
-from test.test_support import verbose, reap_children
+from test import test_support
+import unittest
 import select
 import os
+import sys
 
-# test some known error conditions
-try:
-    rfd, wfd, xfd = select.select(1, 2, 3)
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
+class SelectTestCase(unittest.TestCase):
 
-class Nope:
-    pass
+    class Nope:
+        pass
 
-class Almost:
-    def fileno(self):
-        return 'fileno'
+    class Almost:
+        def fileno(self):
+            return 'fileno'
 
-try:
-    rfd, wfd, xfd = select.select([Nope()], [], [])
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
+    def test_error_conditions(self):
+        self.assertRaises(TypeError, select.select, 1, 2, 3)
+        self.assertRaises(TypeError, select.select, [self.Nope()], [], [])
+        self.assertRaises(TypeError, select.select, [self.Almost()], [], [])
+        self.assertRaises(TypeError, select.select, [], [], [], "not a number")
 
-try:
-    rfd, wfd, xfd = select.select([Almost()], [], [])
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
-
-try:
-    rfd, wfd, xfd = select.select([], [], [], 'not a number')
-except TypeError:
-    pass
-else:
-    print 'expected TypeError exception not raised'
+    def test_select(self):
+        if sys.platform[:3] in ('win', 'mac', 'os2', 'riscos'):
+            if test_support.verbose:
+                print "Can't test select easily on", sys.platform
+            return
+        cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
+        p = os.popen(cmd, 'r')
+        for tout in (0, 1, 2, 4, 8, 16) + (None,)*10:
+            if test_support.verbose:
+                print 'timeout =', tout
+            rfd, wfd, xfd = select.select([p], [], [], tout)
+            if (rfd, wfd, xfd) == ([], [], []):
+                continue
+            if (rfd, wfd, xfd) == ([p], [], []):
+                line = p.readline()
+                if test_support.verbose:
+                    print repr(line)
+                if not line:
+                    if test_support.verbose:
+                        print 'EOF'
+                    break
+                continue
+            self.fail('Unexpected return values from select():', rfd, wfd, xfd)
+        p.close()
 
 
-def test():
-    import sys
-    if sys.platform[:3] in ('win', 'mac', 'os2', 'riscos'):
-        if verbose:
-            print "Can't test select easily on", sys.platform
-        return
-    cmd = 'for i in 0 1 2 3 4 5 6 7 8 9; do echo testing...; sleep 1; done'
-    p = os.popen(cmd, 'r')
-    for tout in (0, 1, 2, 4, 8, 16) + (None,)*10:
-        if verbose:
-            print 'timeout =', tout
-        rfd, wfd, xfd = select.select([p], [], [], tout)
-        if (rfd, wfd, xfd) == ([], [], []):
-            continue
-        if (rfd, wfd, xfd) == ([p], [], []):
-            line = p.readline()
-            if verbose:
-                print repr(line)
-            if not line:
-                if verbose:
-                    print 'EOF'
-                break
-            continue
-        print 'Unexpected return values from select():', rfd, wfd, xfd
-    p.close()
-    reap_children()
+def test_main():
+    test_support.run_unittest(SelectTestCase)
+    test_support.reap_children()
 
-test()
+if __name__ == "__main__":
+    test_main()
diff --git a/Misc/ACKS b/Misc/ACKS
index 43bbb90..c2cad5c 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -428,6 +428,7 @@
 Grzegorz Makarewicz
 Ken Manheimer
 Vladimir Marangozov
+David Marek
 Doug Marien
 Alex Martelli
 Anthony Martin
diff --git a/Misc/NEWS b/Misc/NEWS
index 539b785..7743e0b 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -50,6 +50,8 @@
 Tests
 -----
 
+- GHOP 294: Convert test_contains, test_crypt, and test_select to unittest.
+
 - GHOP 238: Convert test_tokenize to use doctest.
 
 - GHOP 237: Rewrite test_thread using unittest.
