diff --git a/Lib/compiler/pyassem.py b/Lib/compiler/pyassem.py
index 26b9001..10a8dbd 100644
--- a/Lib/compiler/pyassem.py
+++ b/Lib/compiler/pyassem.py
@@ -2,7 +2,6 @@
 
 import dis
 import new
-import string
 import sys
 import types
 
@@ -246,7 +245,7 @@
     def __str__(self):
         insts = map(str, self.insts)
         return "<block %s %d:\n%s>" % (self.label, self.bid,
-                                       string.join(insts, '\n'))
+                                       '\n'.join(insts))
 
     def emit(self, inst):
         op = inst[0]
@@ -713,10 +712,10 @@
                 self.lastoff = self.codeOffset
 
     def getCode(self):
-        return string.join(self.code, '')
+        return ''.join(self.code)
 
     def getTable(self):
-        return string.join(map(chr, self.lnotab), '')
+        return ''.join(map(chr, self.lnotab))
 
 class StackDepthTracker:
     # XXX 1. need to keep track of stack depth on jumps
diff --git a/Lib/compiler/pycodegen.py b/Lib/compiler/pycodegen.py
index c107a08..a0aa73a 100644
--- a/Lib/compiler/pycodegen.py
+++ b/Lib/compiler/pycodegen.py
@@ -1,8 +1,6 @@
 import imp
 import os
 import marshal
-import stat
-import string
 import struct
 import sys
 import types
@@ -135,7 +133,7 @@
         # calling the interface that would also generate a 1-byte code
         # to indicate the type of the value.  simplest way to get the
         # same effect is to call marshal and then skip the code.
-        mtime = os.stat(self.filename)[stat.ST_MTIME]
+        mtime = os.path.getmtime(self.filename)
         mtime = struct.pack('i', mtime)
         return self.MAGIC + mtime
 
@@ -764,7 +762,7 @@
             if VERSION > 1:
                 self.emit('LOAD_CONST', None)
             self.emit('IMPORT_NAME', name)
-            mod = string.split(name, ".")[0]
+            mod = name.split(".")[0]
             self.storeName(alias or mod)
 
     def visitFrom(self, node):
@@ -790,7 +788,7 @@
         self.emit('POP_TOP')
 
     def _resolveDots(self, name):
-        elts = string.split(name, ".")
+        elts = name.split(".")
         if len(elts) == 1:
             return
         for elt in elts[1:]:
diff --git a/Lib/compiler/transformer.py b/Lib/compiler/transformer.py
index 32a4160..382ea41 100644
--- a/Lib/compiler/transformer.py
+++ b/Lib/compiler/transformer.py
@@ -28,7 +28,6 @@
 # 1.5.2 for code branches executed in 1.5.2
 import symbol
 import token
-import string
 import sys
 
 error = 'walker.error'
@@ -111,7 +110,7 @@
     def parsesuite(self, text):
         """Return a modified parse tree for the given suite text."""
         # Hack for handling non-native line endings on non-DOS like OSs.
-        text = string.replace(text, '\x0d', '')
+        text = text.replace('\x0d', '')
         return self.transform(parser.suite(text))
 
     def parseexpr(self, text):
