Use cStringIO where available.
diff --git a/Lib/SimpleHTTPServer.py b/Lib/SimpleHTTPServer.py
index 93662ab..93af109 100644
--- a/Lib/SimpleHTTPServer.py
+++ b/Lib/SimpleHTTPServer.py
@@ -17,7 +17,10 @@
 import cgi
 import shutil
 import mimetypes
-from StringIO import StringIO
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
 
 
 class SimpleHTTPRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
diff --git a/Lib/SocketServer.py b/Lib/SocketServer.py
index 06ed134..345a6d1 100644
--- a/Lib/SocketServer.py
+++ b/Lib/SocketServer.py
@@ -575,10 +575,13 @@
     """Define self.rfile and self.wfile for datagram sockets."""
 
     def setup(self):
-        import StringIO
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
         self.packet, self.socket = self.request
-        self.rfile = StringIO.StringIO(self.packet)
-        self.wfile = StringIO.StringIO()
+        self.rfile = StringIO(self.packet)
+        self.wfile = StringIO()
 
     def finish(self):
         self.socket.sendto(self.wfile.getvalue(), self.client_address)
diff --git a/Lib/cgi.py b/Lib/cgi.py
index fb40ed3..cf849e8 100755
--- a/Lib/cgi.py
+++ b/Lib/cgi.py
@@ -40,7 +40,10 @@
 import mimetools
 import rfc822
 import UserDict
-from StringIO import StringIO
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
 
 __all__ = ["MiniFieldStorage", "FieldStorage", "FormContentDict",
            "SvFormContentDict", "InterpFormContentDict", "FormContent",
diff --git a/Lib/gettext.py b/Lib/gettext.py
index 6e29176..a20c6f1 100644
--- a/Lib/gettext.py
+++ b/Lib/gettext.py
@@ -77,7 +77,10 @@
     Python lambda function that implements an equivalent expression.
     """
     # Security check, allow only the "n" identifier
-    from StringIO import StringIO
+    try:
+        from cStringIO import StringIO
+    except ImportError:
+        from StringIO import StringIO
     import token, tokenize
     tokens = tokenize.generate_tokens(StringIO(plural).readline)
     try:
diff --git a/Lib/mhlib.py b/Lib/mhlib.py
index 0a8c444..1086121 100644
--- a/Lib/mhlib.py
+++ b/Lib/mhlib.py
@@ -697,7 +697,10 @@
         encoding = self.getencoding()
         if not decode or encoding in ('', '7bit', '8bit', 'binary'):
             return self.fp.read()
-        from StringIO import StringIO
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
         output = StringIO()
         mimetools.decode(self.fp, output, encoding)
         return output.getvalue()
diff --git a/Lib/tarfile.py b/Lib/tarfile.py
index b85f117..0dc7a42 100644
--- a/Lib/tarfile.py
+++ b/Lib/tarfile.py
@@ -1936,12 +1936,15 @@
     def write(self, filename, arcname=None, compress_type=None):
         self.tarfile.add(filename, arcname)
     def writestr(self, zinfo, bytes):
-        import StringIO
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
         import calendar
         zinfo.name = zinfo.filename
         zinfo.size = zinfo.file_size
         zinfo.mtime = calendar.timegm(zinfo.date_time)
-        self.tarfile.addfile(zinfo, StringIO.StringIO(bytes))
+        self.tarfile.addfile(zinfo, StringIO(bytes))
     def close(self):
         self.tarfile.close()
 #class TarFileCompat
diff --git a/Lib/urllib.py b/Lib/urllib.py
index e2f01c5..74b2aec 100644
--- a/Lib/urllib.py
+++ b/Lib/urllib.py
@@ -410,7 +410,11 @@
 
     def open_local_file(self, url):
         """Use local file."""
-        import mimetypes, mimetools, email.Utils, StringIO
+        import mimetypes, mimetools, email.Utils
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
         host, file = splithost(url)
         localname = url2pathname(file)
         try:
@@ -420,7 +424,7 @@
         size = stats.st_size
         modified = email.Utils.formatdate(stats.st_mtime, usegmt=True)
         mtype = mimetypes.guess_type(url)[0]
-        headers = mimetools.Message(StringIO.StringIO(
+        headers = mimetools.Message(StringIO(
             'Content-Type: %s\nContent-Length: %d\nLast-modified: %s\n' %
             (mtype or 'text/plain', size, modified)))
         if not host:
@@ -441,7 +445,11 @@
 
     def open_ftp(self, url):
         """Use FTP protocol."""
-        import mimetypes, mimetools, StringIO
+        import mimetypes, mimetools
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
         host, path = splithost(url)
         if not host: raise IOError, ('ftp error', 'no host given')
         host, port = splitport(host)
@@ -490,7 +498,7 @@
                 headers += "Content-Type: %s\n" % mtype
             if retrlen is not None and retrlen >= 0:
                 headers += "Content-Length: %d\n" % retrlen
-            headers = mimetools.Message(StringIO.StringIO(headers))
+            headers = mimetools.Message(StringIO(headers))
             return addinfourl(fp, headers, "ftp:" + url)
         except ftperrors(), msg:
             raise IOError, ('ftp error', msg), sys.exc_info()[2]
@@ -504,7 +512,11 @@
         # mediatype := [ type "/" subtype ] *( ";" parameter )
         # data      := *urlchar
         # parameter := attribute "=" value
-        import StringIO, mimetools
+        import mimetools
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
         try:
             [type, data] = url.split(',', 1)
         except ValueError:
@@ -530,7 +542,7 @@
         msg.append('')
         msg.append(data)
         msg = '\n'.join(msg)
-        f = StringIO.StringIO(msg)
+        f = StringIO(msg)
         headers = mimetools.Message(f, 0)
         f.fileno = None     # needed for addinfourl
         return addinfourl(f, headers, url)
@@ -697,8 +709,11 @@
     global _noheaders
     if _noheaders is None:
         import mimetools
-        import StringIO
-        _noheaders = mimetools.Message(StringIO.StringIO(), 0)
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
+        _noheaders = mimetools.Message(StringIO(), 0)
         _noheaders.fp.close()   # Recycle file descriptor
     return _noheaders
 
diff --git a/Lib/urlparse.py b/Lib/urlparse.py
index 37dd362..9c76272 100644
--- a/Lib/urlparse.py
+++ b/Lib/urlparse.py
@@ -243,8 +243,11 @@
         else:
             fp = open(fn)
     else:
-        import StringIO
-        fp = StringIO.StringIO(test_input)
+        try:
+            from cStringIO import StringIO
+        except ImportError:
+            from StringIO import StringIO
+        fp = StringIO(test_input)
     while 1:
         line = fp.readline()
         if not line: break