Remove functions in string module that are also string methods.  Also remove:
 * all calls to functions in the string module (except maketrans)
 * everything from stropmodule except for maketrans() which is still used
diff --git a/Lib/test/test_future2.py b/Lib/test/test_future2.py
index 79eb731..3d7fc86 100644
--- a/Lib/test/test_future2.py
+++ b/Lib/test/test_future2.py
@@ -1,6 +1,6 @@
 """This is a test"""
 
-from __future__ import nested_scopes; import string
+from __future__ import nested_scopes; import site
 
 def f(x):
     def g(y):
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index d6dcc3c..843440a 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -25,7 +25,7 @@
 """
 
 import select
-import os, sys, string, struct, types, pickle, cStringIO
+import os, sys, struct, types, pickle, cStringIO
 import socket, tempfile, threading, time
 import logging, logging.handlers, logging.config
 from test.test_support import run_with_locale
@@ -455,11 +455,10 @@
 """
 
 # config2 has a subtle configuration error that should be reported
-config2 = string.replace(config1, "sys.stdout", "sys.stbout")
+config2 = config1.replace("sys.stdout", "sys.stbout")
 
 # config3 has a less subtle configuration error
-config3 = string.replace(
-    config1, "formatter=form1", "formatter=misspelled_name")
+config3 = config1.replace("formatter=form1", "formatter=misspelled_name")
 
 def test4():
     for i in range(4):
diff --git a/Lib/test/test_scope.py b/Lib/test/test_scope.py
index 5fe1bc7..f52ab91 100644
--- a/Lib/test/test_scope.py
+++ b/Lib/test/test_scope.py
@@ -187,25 +187,25 @@
         check_syntax_error(self, """\
 def unoptimized_clash1(strip):
     def f(s):
-        from string import *
-        return strip(s) # ambiguity: free or local
+        from sys import *
+        return getrefcount(s) # ambiguity: free or local
     return f
 """)
 
         check_syntax_error(self, """\
 def unoptimized_clash2():
-    from string import *
+    from sys import *
     def f(s):
-        return strip(s) # ambiguity: global or local
+        return getrefcount(s) # ambiguity: global or local
     return f
 """)
 
         check_syntax_error(self, """\
 def unoptimized_clash2():
-    from string import *
+    from sys import *
     def g():
         def f(s):
-            return strip(s) # ambiguity: global or local
+            return getrefcount(s) # ambiguity: global or local
         return f
 """)
 
@@ -219,24 +219,24 @@
         check_syntax_error(self, """\
 def f():
     def g():
-        from string import *
-        return strip # global or local?
+        from sys import *
+        return getrefcount # global or local?
 """)
 
         # and verify a few cases that should work
 
         exec("""
 def noproblem1():
-    from string import *
+    from sys import *
     f = lambda x:x
 
 def noproblem2():
-    from string import *
+    from sys import *
     def f(x):
         return x + 1
 
 def noproblem3():
-    from string import *
+    from sys import *
     def f(x):
         global y
         y = x
diff --git a/Lib/test/test_string.py b/Lib/test/test_string.py
index 6e9c122..ab75f8c 100644
--- a/Lib/test/test_string.py
+++ b/Lib/test/test_string.py
@@ -1,67 +1,5 @@
 import unittest, string
-from test import test_support, string_tests
-from UserList import UserList
-
-class StringTest(
-    string_tests.CommonTest,
-    string_tests.MixinStrStringUserStringTest
-    ):
-
-    type2test = str
-
-    def checkequal(self, result, object, methodname, *args):
-        realresult = getattr(string, methodname)(object, *args)
-        self.assertEqual(
-            result,
-            realresult
-        )
-
-    def checkraises(self, exc, object, methodname, *args):
-        self.assertRaises(
-            exc,
-            getattr(string, methodname),
-            object,
-            *args
-        )
-
-    def checkcall(self, object, methodname, *args):
-        getattr(string, methodname)(object, *args)
-
-    def test_join(self):
-        # These are the same checks as in string_test.ObjectTest.test_join
-        # but the argument order ist different
-        self.checkequal('a b c d', ['a', 'b', 'c', 'd'], 'join', ' ')
-        self.checkequal('abcd', ('a', 'b', 'c', 'd'), 'join', '')
-        self.checkequal('w x y z', string_tests.Sequence(), 'join', ' ')
-        self.checkequal('abc', ('abc',), 'join', 'a')
-        self.checkequal('z', UserList(['z']), 'join', 'a')
-        if test_support.have_unicode:
-            self.checkequal(unicode('a.b.c'), ['a', 'b', 'c'], 'join', unicode('.'))
-            self.checkequal(unicode('a.b.c'), [unicode('a'), 'b', 'c'], 'join', '.')
-            self.checkequal(unicode('a.b.c'), ['a', unicode('b'), 'c'], 'join', '.')
-            self.checkequal(unicode('a.b.c'), ['a', 'b', unicode('c')], 'join', '.')
-            self.checkraises(TypeError, ['a', unicode('b'), 3], 'join', '.')
-        for i in [5, 25, 125]:
-            self.checkequal(
-                ((('a' * i) + '-') * i)[:-1],
-                ['a' * i] * i, 'join', '-')
-            self.checkequal(
-                ((('a' * i) + '-') * i)[:-1],
-                ('a' * i,) * i, 'join', '-')
-
-        self.checkraises(TypeError, string_tests.BadSeq1(), 'join', ' ')
-        self.checkequal('a b c', string_tests.BadSeq2(), 'join', ' ')
-        try:
-            def f():
-                yield 4 + ""
-            self.fixtype(' ').join(f())
-        except TypeError as e:
-            if '+' not in str(e):
-                self.fail('join() ate exception message')
-        else:
-            self.fail('exception not raised')
-
-
+from test import test_support
 
 
 class ModuleTest(unittest.TestCase):
@@ -77,37 +15,14 @@
         string.punctuation
         string.printable
 
-    def test_atoi(self):
-        self.assertEqual(string.atoi(" 1 "), 1)
-        self.assertRaises(ValueError, string.atoi, " 1x")
-        self.assertRaises(ValueError, string.atoi, " x1 ")
-
-    def test_atol(self):
-        self.assertEqual(string.atol("  1  "), 1)
-        self.assertRaises(ValueError, string.atol, "  1x ")
-        self.assertRaises(ValueError, string.atol, "  x1 ")
-
-    def test_atof(self):
-        self.assertAlmostEqual(string.atof("  1  "), 1.0)
-        self.assertRaises(ValueError, string.atof, "  1x ")
-        self.assertRaises(ValueError, string.atof, "  x1 ")
-
     def test_maketrans(self):
         transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
 
         self.assertEqual(string.maketrans('abc', 'xyz'), transtable)
         self.assertRaises(ValueError, string.maketrans, 'abc', 'xyzq')
 
-    def test_capwords(self):
-        self.assertEqual(string.capwords('abc def ghi'), 'Abc Def Ghi')
-        self.assertEqual(string.capwords('abc\tdef\nghi'), 'Abc Def Ghi')
-        self.assertEqual(string.capwords('abc\t   def  \nghi'), 'Abc Def Ghi')
-        self.assertEqual(string.capwords('ABC DEF GHI'), 'Abc Def Ghi')
-        self.assertEqual(string.capwords('ABC-DEF-GHI', '-'), 'Abc-Def-Ghi')
-        self.assertEqual(string.capwords('ABC-def DEF-ghi GHI'), 'Abc-def Def-ghi Ghi')
-
 def test_main():
-    test_support.run_unittest(StringTest, ModuleTest)
+    test_support.run_unittest(ModuleTest)
 
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_strop.py b/Lib/test/test_strop.py
index 66e7eb6..16c4cd3 100644
--- a/Lib/test/test_strop.py
+++ b/Lib/test/test_strop.py
@@ -9,126 +9,16 @@
 
 class StropFunctionTestCase(unittest.TestCase):
 
-    def test_atoi(self):
-        self.assert_(strop.atoi(" 1 ") == 1)
-        self.assertRaises(ValueError, strop.atoi, " 1x")
-        self.assertRaises(ValueError, strop.atoi, " x1 ")
-
-    def test_atol(self):
-        self.assert_(strop.atol(" 1 ") == 1)
-        self.assertRaises(ValueError, strop.atol, " 1x")
-        self.assertRaises(ValueError, strop.atol, " x1 ")
-
-    def test_atof(self):
-        self.assert_(strop.atof(" 1 ") == 1.0)
-        self.assertRaises(ValueError, strop.atof, " 1x")
-        self.assertRaises(ValueError, strop.atof, " x1 ")
-
-    def test_capitalize(self):
-        self.assert_(strop.capitalize(" hello ") == " hello ")
-        self.assert_(strop.capitalize("hello ") == "Hello ")
-
-    def test_find(self):
-        self.assert_(strop.find("abcdefghiabc", "abc") == 0)
-        self.assert_(strop.find("abcdefghiabc", "abc", 1) == 9)
-        self.assert_(strop.find("abcdefghiabc", "def", 4) == -1)
-
-    def test_rfind(self):
-        self.assert_(strop.rfind("abcdefghiabc", "abc") == 9)
-
-    def test_lower(self):
-        self.assert_(strop.lower("HeLLo") == "hello")
-
-    def test_upper(self):
-        self.assert_(strop.upper("HeLLo") == "HELLO")
-
-    def test_swapcase(self):
-        self.assert_(strop.swapcase("HeLLo cOmpUteRs") == "hEllO CoMPuTErS")
-
-    def test_strip(self):
-        self.assert_(strop.strip(" \t\n hello \t\n ") == "hello")
-
-    def test_lstrip(self):
-        self.assert_(strop.lstrip(" \t\n hello \t\n ") == "hello \t\n ")
-
-    def test_rstrip(self):
-        self.assert_(strop.rstrip(" \t\n hello \t\n ") == " \t\n hello")
-
-    def test_replace(self):
-        replace = strop.replace
-        self.assert_(replace("one!two!three!", '!', '@', 1)
-                     == "one@two!three!")
-        self.assert_(replace("one!two!three!", '!', '@', 2)
-                     == "one@two@three!")
-        self.assert_(replace("one!two!three!", '!', '@', 3)
-                     == "one@two@three@")
-        self.assert_(replace("one!two!three!", '!', '@', 4)
-                     == "one@two@three@")
-
-        # CAUTION: a replace count of 0 means infinity only to strop,
-        # not to the string .replace() method or to the
-        # string.replace() function.
-
-        self.assert_(replace("one!two!three!", '!', '@', 0)
-                     == "one@two@three@")
-        self.assert_(replace("one!two!three!", '!', '@')
-                     == "one@two@three@")
-        self.assert_(replace("one!two!three!", 'x', '@')
-                     == "one!two!three!")
-        self.assert_(replace("one!two!three!", 'x', '@', 2)
-                     == "one!two!three!")
-
-    def test_split(self):
-        split = strop.split
-        self.assert_(split("this is the split function")
-                     == ['this', 'is', 'the', 'split', 'function'])
-        self.assert_(split("a|b|c|d", '|') == ['a', 'b', 'c', 'd'])
-        self.assert_(split("a|b|c|d", '|', 2) == ['a', 'b', 'c|d'])
-        self.assert_(split("a b c d", None, 1) == ['a', 'b c d'])
-        self.assert_(split("a b c d", None, 2) == ['a', 'b', 'c d'])
-        self.assert_(split("a b c d", None, 3) == ['a', 'b', 'c', 'd'])
-        self.assert_(split("a b c d", None, 4) == ['a', 'b', 'c', 'd'])
-        self.assert_(split("a b c d", None, 0) == ['a', 'b', 'c', 'd'])
-        self.assert_(split("a  b  c  d", None, 2) ==  ['a', 'b', 'c  d'])
-
-    def test_join(self):
-        self.assert_(strop.join(['a', 'b', 'c', 'd']) == 'a b c d')
-        self.assert_(strop.join(('a', 'b', 'c', 'd'), '') == 'abcd')
-        self.assert_(strop.join(Sequence()) == 'w x y z')
-
-        # try a few long ones
-        self.assert_(strop.join(['x' * 100] * 100, ':')
-                     == (('x' * 100) + ":") * 99 + "x" * 100)
-        self.assert_(strop.join(('x' * 100,) * 100, ':')
-                     == (('x' * 100) + ":") * 99 + "x" * 100)
-
     def test_maketrans(self):
         self.assert_(strop.maketrans("abc", "xyz") == transtable)
         self.assertRaises(ValueError, strop.maketrans, "abc", "xyzq")
 
-    def test_translate(self):
-        self.assert_(strop.translate("xyzabcdef", transtable, "def")
-                     == "xyzxyz")
-
-    def test_data_attributes(self):
-        strop.lowercase
-        strop.uppercase
-        strop.whitespace
-
 
 transtable = '\000\001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037 !"#$%&\'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`xyzdefghijklmnopqrstuvwxyz{|}~\177\200\201\202\203\204\205\206\207\210\211\212\213\214\215\216\217\220\221\222\223\224\225\226\227\230\231\232\233\234\235\236\237\240\241\242\243\244\245\246\247\250\251\252\253\254\255\256\257\260\261\262\263\264\265\266\267\270\271\272\273\274\275\276\277\300\301\302\303\304\305\306\307\310\311\312\313\314\315\316\317\320\321\322\323\324\325\326\327\330\331\332\333\334\335\336\337\340\341\342\343\344\345\346\347\350\351\352\353\354\355\356\357\360\361\362\363\364\365\366\367\370\371\372\373\374\375\376\377'
 
 
-# join() now works with any sequence type.
-class Sequence:
-    def __init__(self): self.seq = 'wxyz'
-    def __len__(self): return len(self.seq)
-    def __getitem__(self, i): return self.seq[i]
-
-
 def test_main():
     test_support.run_unittest(StropFunctionTestCase)
 
-
 if __name__ == "__main__":
     test_main()
diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py
index dcc21ac..ebbe915 100644
--- a/Lib/test/test_sundry.py
+++ b/Lib/test/test_sundry.py
@@ -55,7 +55,6 @@
 import smtplib
 import sndhdr
 import statvfs
-import stringold
 import sunau
 import sunaudio
 import symbol
diff --git a/Lib/test/test_unicode.py b/Lib/test/test_unicode.py
index bb3338b..b789fb0 100644
--- a/Lib/test/test_unicode.py
+++ b/Lib/test/test_unicode.py
@@ -6,7 +6,7 @@
 (c) Copyright CNRI, All Rights Reserved. NO WARRANTY.
 
 """#"
-import unittest, sys, string, codecs, new
+import unittest, sys, codecs, new
 from test import test_support, string_tests
 
 # Error handling (bad decoder return)