diff --git a/Lib/CGIHTTPServer.py b/Lib/CGIHTTPServer.py
index e2bef26..84cdf67 100644
--- a/Lib/CGIHTTPServer.py
+++ b/Lib/CGIHTTPServer.py
@@ -103,12 +103,12 @@
     def run_cgi(self):
         """Execute a CGI script."""
         dir, rest = self.cgi_info
-        i = string.rfind(rest, '?')
+        i = rest.rfind('?')
         if i >= 0:
             rest, query = rest[:i], rest[i+1:]
         else:
             query = ''
-        i = string.find(rest, '/')
+        i = rest.find('/')
         if i >= 0:
             script, rest = rest[:i], rest[i:]
         else:
@@ -165,16 +165,16 @@
         accept = []
         for line in self.headers.getallmatchingheaders('accept'):
             if line[:1] in string.whitespace:
-                accept.append(string.strip(line))
+                accept.append(line.strip())
             else:
-                accept = accept + string.split(line[7:], ',')
-        env['HTTP_ACCEPT'] = string.joinfields(accept, ',')
+                accept = accept + line[7:].split(',')
+        env['HTTP_ACCEPT'] = ','.join(accept)
         ua = self.headers.getheader('user-agent')
         if ua:
             env['HTTP_USER_AGENT'] = ua
         co = filter(None, self.headers.getheaders('cookie'))
         if co:
-            env['HTTP_COOKIE'] = string.join(co, ', ')
+            env['HTTP_COOKIE'] = ', '.join(co)
         # XXX Other HTTP_* headers
         if not self.have_fork:
             # Since we're setting the env in the parent, provide empty
@@ -185,7 +185,7 @@
 
         self.send_response(200, "Script output follows")
 
-        decoded_query = string.replace(query, '+', ' ')
+        decoded_query = query.replace('+', ' ')
 
         if self.have_fork:
             # Unix -- fork as we should
diff --git a/Lib/code.py b/Lib/code.py
index f9d8225..ab1050c 100644
--- a/Lib/code.py
+++ b/Lib/code.py
@@ -6,7 +6,6 @@
 
 
 import sys
-import string
 import traceback
 from codeop import compile_command
 
@@ -260,7 +259,7 @@
 
         """
         self.buffer.append(line)
-        source = string.join(self.buffer, "\n")
+        source = "\n".join(self.buffer)
         more = self.runsource(source, self.filename)
         if not more:
             self.resetbuffer()
diff --git a/Lib/codeop.py b/Lib/codeop.py
index 46926b5..3865ec6 100644
--- a/Lib/codeop.py
+++ b/Lib/codeop.py
@@ -1,7 +1,6 @@
 """Utility to compile possibly incomplete Python source code."""
 
 import sys
-import string
 import traceback
 
 __all__ = ["compile_command"]
@@ -49,8 +48,8 @@
     """
 
     # Check for source consisting of only blank lines and comments
-    for line in string.split(source, "\n"):
-        line = string.strip(line)
+    for line in source.split("\n"):
+        line = line.strip()
         if line and line[0] != '#':
             break               # Leave it alone
     else:
diff --git a/Lib/py_compile.py b/Lib/py_compile.py
index b453109..da3bdaf 100644
--- a/Lib/py_compile.py
+++ b/Lib/py_compile.py
@@ -59,10 +59,10 @@
     try:
         codeobject = __builtin__.compile(codestring, dfile or file, 'exec')
     except SyntaxError, detail:
-        import traceback, sys, string
+        import traceback, sys
         lines = traceback.format_exception_only(SyntaxError, detail)
         for line in lines:
-            sys.stderr.write(string.replace(line, 'File "<string>"',
+            sys.stderr.write(line.replace('File "<string>"',
                                             'File "%s"' % (dfile or file)))
         return
     if not cfile:
diff --git a/Lib/repr.py b/Lib/repr.py
index b47ac2a..9f7ed86 100644
--- a/Lib/repr.py
+++ b/Lib/repr.py
@@ -1,7 +1,5 @@
 """Redo the `...` (representation) but with limits on most sizes."""
 
-import string
-
 class Repr:
     def __init__(self):
         self.maxlevel = 6
@@ -16,8 +14,8 @@
     def repr1(self, x, level):
         typename = `type(x)`[7:-2] # "<type '......'>"
         if ' ' in typename:
-            parts = string.split(typename)
-            typename = string.joinfields(parts, '_')
+            parts = typename.split()
+            typename = '_'.join(parts)
         if hasattr(self, 'repr_' + typename):
             return getattr(self, 'repr_' + typename)(x, level)
         else:
