diff --git a/Lib/mhlib.py b/Lib/mhlib.py
index aab560b..0302c30 100644
--- a/Lib/mhlib.py
+++ b/Lib/mhlib.py
@@ -76,7 +76,6 @@
 import sys
 from stat import ST_NLINK
 import re
-import string
 import mimetools
 import multifile
 import shutil
@@ -685,7 +684,7 @@
         headers = []
         hit = 0
         for line in self.headers:
-            if line[0] not in string.whitespace:
+            if not line[0].isspace():
                 i = line.find(':')
                 if i > 0:
                     hit = pred(line[:i].lower())
@@ -885,7 +884,6 @@
         self.normalize()
 
     def fromstring(self, data):
-        import string
         new = []
         for part in data.split(self.sep):
             list = []
@@ -918,7 +916,7 @@
             text = line[len(key)+1:]
             while 1:
                 line = f.readline()
-                if not line or line[0] not in string.whitespace:
+                if not line or not line[0].isspace():
                     break
                 text = text + line
             return text.strip()
diff --git a/Lib/mimify.py b/Lib/mimify.py
index 64e988b..c856910 100755
--- a/Lib/mimify.py
+++ b/Lib/mimify.py
@@ -110,7 +110,7 @@
             break
         match = res.group(1)
         # convert underscores to spaces (before =XX conversion!)
-        match = ' '.join(string.split(match, '_'))
+        match = ' '.join(match.split('_'))
         newline = newline + line[pos:res.start(0)] + mime_decode(match)
         pos = res.end(0)
     return newline + line[pos:]
diff --git a/Lib/pre.py b/Lib/pre.py
index c385824..35d3e3a 100644
--- a/Lib/pre.py
+++ b/Lib/pre.py
@@ -85,7 +85,6 @@
 
 
 import sys
-import string
 from pcre import *
 
 #
@@ -223,10 +222,9 @@
 
     """
     result = list(pattern)
-    alphanum=string.letters+'_'+string.digits
     for i in range(len(pattern)):
         char = pattern[i]
-        if char not in alphanum:
+        if not char.isalnum():
             if char=='\000': result[i] = '\\000'
             else: result[i] = '\\'+char
     return ''.join(result)
diff --git a/Lib/token.py b/Lib/token.py
index 80dc032..1c66f6d 100755
--- a/Lib/token.py
+++ b/Lib/token.py
@@ -104,7 +104,7 @@
         match = prog.match(line)
         if match:
             name, val = match.group(1, 2)
-            val = string.atoi(val)
+            val = int(val)
             tokens[val] = name          # reverse so we can sort them...
     keys = tokens.keys()
     keys.sort()
diff --git a/Lib/traceback.py b/Lib/traceback.py
index 834c568..b4fe050 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -1,7 +1,6 @@
 """Extract, format and print information about Python stack traces."""
 
 import linecache
-import string
 import sys
 import types
 
@@ -154,13 +153,12 @@
                 list.append('  File "%s", line %d\n' %
                             (filename, lineno))
                 i = 0
-                while i < len(line) and \
-                      line[i] in string.whitespace:
+                while i < len(line) and line[i].isspace():
                     i = i+1
                 list.append('    %s\n' % line.strip())
                 s = '    '
                 for c in line[i:offset-1]:
-                    if c in string.whitespace:
+                    if c.isspace():
                         s = s + c
                     else:
                         s = s + ' '
