diff --git a/Lib/distutils/cygwinccompiler.py b/Lib/distutils/cygwinccompiler.py
index f40d1a2..42318ad 100644
--- a/Lib/distutils/cygwinccompiler.py
+++ b/Lib/distutils/cygwinccompiler.py
@@ -365,10 +365,10 @@
     # "config.h" check -- should probably be renamed...
 
     from distutils import sysconfig
-    import string,sys
+    import sys
     # if sys.version contains GCC then python was compiled with
     # GCC, and the config.h file should be OK
-    if string.find(sys.version,"GCC") >= 0:
+    if sys.version.find("GCC") >= 0:
         return (CONFIG_H_OK, "sys.version mentions 'GCC'")
     
     fn = sysconfig.get_config_h_filename()
@@ -387,7 +387,7 @@
 
     else:
         # "config.h" contains an "#ifdef __GNUC__" or something similar
-        if string.find(s,"__GNUC__") >= 0:
+        if s.find("__GNUC__") >= 0:
             return (CONFIG_H_OK, "'%s' mentions '__GNUC__'" % fn)
         else:
             return (CONFIG_H_NOTOK, "'%s' does not mention '__GNUC__'" % fn)
diff --git a/Lib/distutils/extension.py b/Lib/distutils/extension.py
index a63ede2..f49abad 100644
--- a/Lib/distutils/extension.py
+++ b/Lib/distutils/extension.py
@@ -7,7 +7,7 @@
 
 __revision__ = "$Id$"
 
-import os, string
+import os
 from types import *
 
 
@@ -168,7 +168,7 @@
             elif switch == "-I":
                 ext.include_dirs.append(value)
             elif switch == "-D":
-                equals = string.find(value, "=")
+                equals = value.find("=")
                 if equals == -1:        # bare "-DFOO" -- no value
                     ext.define_macros.append((value, None))
                 else:                   # "-DFOO=blah"
diff --git a/Lib/distutils/version.py b/Lib/distutils/version.py
index 9d3d172..2916eb7 100644
--- a/Lib/distutils/version.py
+++ b/Lib/distutils/version.py
@@ -112,12 +112,12 @@
             match.group(1, 2, 4, 5, 6)
 
         if patch:
-            self.version = tuple(map(string.atoi, [major, minor, patch]))
+            self.version = tuple(map(int, [major, minor, patch]))
         else:
-            self.version = tuple(map(string.atoi, [major, minor]) + [0])
+            self.version = tuple(map(int, [major, minor]) + [0])
 
         if prerelease:
-            self.prerelease = (prerelease[0], string.atoi(prerelease_num))
+            self.prerelease = (prerelease[0], int(prerelease_num))
         else:
             self.prerelease = None
 
@@ -125,9 +125,9 @@
     def __str__ (self):
         
         if self.version[2] == 0:
-            vstring = string.join(map(str, self.version[0:2]), '.')
+            vstring = '.'.join(map(str, self.version[0:2]))
         else:
-            vstring = string.join(map(str, self.version), '.')
+            vstring = '.'.join(map(str, self.version))
 
         if self.prerelease:
             vstring = vstring + self.prerelease[0] + str(self.prerelease[1])
diff --git a/Lib/plat-irix6/cdplayer.py b/Lib/plat-irix6/cdplayer.py
index 278da03..c665a07 100644
--- a/Lib/plat-irix6/cdplayer.py
+++ b/Lib/plat-irix6/cdplayer.py
@@ -25,8 +25,8 @@
 			t = []
 			for i in range(2, len(tracklist), 4):
 				t.append((None, \
-					  (string.atoi(tracklist[i:i+2]), \
-					   string.atoi(tracklist[i+2:i+4]))))
+					  (int(tracklist[i:i+2]), \
+					   int(tracklist[i+2:i+4]))))
 			tracklist = t
 		self.track = [None] + [''] * len(tracklist)
 		self.id = 'd' + string.zfill(len(tracklist), 2)
@@ -59,7 +59,7 @@
 				elif name == 'artist':
 					self.artist = value
 				elif name[:5] == 'track':
-					trackno = string.atoi(name[6:])
+					trackno = int(name[6:])
 					self.track[trackno] = value
 		f.close()
 
diff --git a/Lib/plat-irix6/flp.py b/Lib/plat-irix6/flp.py
index 7d5814a..6530487 100644
--- a/Lib/plat-irix6/flp.py
+++ b/Lib/plat-irix6/flp.py
@@ -3,7 +3,6 @@
 #
 # Jack Jansen, December 1991
 #
-import string
 import os
 import sys
 import FL
@@ -248,7 +247,7 @@
     return eval(str)
 
 def _parse_numlist(str):
-    slist = string.split(str)
+    slist = str.split()
     nlist = []
     for i in slist:
         nlist.append(_parse_num(i))
@@ -277,9 +276,9 @@
         return line
     name, value = match.group(1, 2)
     if name[0] == 'N':
-            name = string.join(string.split(name),'')
-            name = string.lower(name)
-    name = string.capitalize(name)
+            name = ''.join(name.split())
+            name = name.lower()
+    name = name.capitalize()
     try:
         pf = _parse_func[name]
     except KeyError:
