Getting rid of cPickle.  Mmm, feels good!
diff --git a/Lib/Cookie.py b/Lib/Cookie.py
index 52a766d..ca559e8 100644
--- a/Lib/Cookie.py
+++ b/Lib/Cookie.py
@@ -149,11 +149,10 @@
 SerialCookie
 
 The SerialCookie expects that all values should be serialized using
-cPickle (or pickle, if cPickle isn't available).  As a result of
-serializing, SerialCookie can save almost any Python object to a
-value, and recover the exact same object when the cookie has been
-returned.  (SerialCookie can yield some strange-looking cookie
-values, however.)
+pickle.  As a result of serializing, SerialCookie can save almost any
+Python object to a value, and recover the exact same object when the
+cookie has been returned.  (SerialCookie can yield some
+strange-looking cookie values, however.)
 
    >>> C = Cookie.SerialCookie()
    >>> C["number"] = 7
@@ -162,7 +161,7 @@
    7
    >>> C["string"].value
    'seven'
-   >>> C.output().replace('p0', 'p1') # Hack for cPickle/pickle differences
+   >>> C.output().replace('p0', 'p1') # Hack for pickling differences
    'Set-Cookie: number="I7\\012."\r\nSet-Cookie: string="Vseven\\012p1\\012."'
 
 Be warned, however, if SerialCookie cannot de-serialize a value (because
@@ -173,7 +172,7 @@
 
 The SmartCookie combines aspects of each of the other two flavors.
 When setting a value in a dictionary-fashion, the SmartCookie will
-serialize (ala cPickle) the value *if and only if* it isn't a
+serialize (ala pickle) the value *if and only if* it isn't a
 Python string.  String objects are *not* serialized.  Similarly,
 when the load() method parses out values, it attempts to de-serialize
 the value.  If it fails, then it fallsback to treating the value
@@ -212,10 +211,7 @@
 #
 import string
 
-try:
-    from cPickle import dumps, loads
-except ImportError:
-    from pickle import dumps, loads
+from pickle import dumps, loads
 
 import re, warnings
 
@@ -660,7 +656,7 @@
 class SerialCookie(BaseCookie):
     """SerialCookie
     SerialCookie supports arbitrary objects as cookie values. All
-    values are serialized (using cPickle) before being sent to the
+    values are serialized (using pickle) before being sent to the
     client.  All incoming values are assumed to be valid Pickle
     representations.  IF AN INCOMING VALUE IS NOT IN A VALID PICKLE
     FORMAT, THEN AN EXCEPTION WILL BE RAISED.
@@ -687,7 +683,7 @@
     """SmartCookie
     SmartCookie supports arbitrary objects as cookie values.  If the
     object is a string, then it is quoted.  If the object is not a
-    string, however, then SmartCookie will use cPickle to serialize
+    string, however, then SmartCookie will use pickle to serialize
     the object into a string representation.
 
     Note: Large cookie values add overhead because they must be
diff --git a/Lib/bsddb/dbtables.py b/Lib/bsddb/dbtables.py
index 97ea6a7..690e280 100644
--- a/Lib/bsddb/dbtables.py
+++ b/Lib/bsddb/dbtables.py
@@ -22,7 +22,7 @@
 import copy
 import xdrlib
 import random
-import cPickle as pickle
+import pickle
 
 try:
     # For Pythons w/distutils pybsddb
diff --git a/Lib/bsddb/test/test_dbtables.py b/Lib/bsddb/test/test_dbtables.py
index a7c2c27..0701cca 100644
--- a/Lib/bsddb/test/test_dbtables.py
+++ b/Lib/bsddb/test/test_dbtables.py
@@ -21,11 +21,7 @@
 # $Id$
 
 import sys, os, re
-try:
-    import cPickle
-    pickle = cPickle
-except ImportError:
-    import pickle
+import pickle
 import tempfile
 
 import unittest
diff --git a/Lib/bsddb/test/test_pickle.py b/Lib/bsddb/test/test_pickle.py
index 95cb23d..a5ccfa3 100644
--- a/Lib/bsddb/test/test_pickle.py
+++ b/Lib/bsddb/test/test_pickle.py
@@ -1,10 +1,6 @@
 
 import sys, os
 import pickle
-try:
-    import cPickle
-except ImportError:
-    cPickle = None
 import unittest
 import glob
 
@@ -62,10 +58,6 @@
     def test01_pickle_DBError(self):
         self._base_test_pickle_DBError(pickle=pickle)
 
-    if cPickle:
-        def test02_cPickle_DBError(self):
-            self._base_test_pickle_DBError(pickle=cPickle)
-
 #----------------------------------------------------------------------
 
 def test_suite():
diff --git a/Lib/collections.py b/Lib/collections.py
index b2d40d6..8e9f6d6 100644
--- a/Lib/collections.py
+++ b/Lib/collections.py
@@ -58,7 +58,7 @@
 
 if __name__ == '__main__':
     # verify that instances are pickable
-    from cPickle import loads, dumps
+    from pickle import loads, dumps
     Point = NamedTuple('Point', 'x y')
     p = Point(x=10, y=20)
     assert p == loads(dumps(p))
diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index 4f77c6f..59b6b97 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -1,4 +1,4 @@
-"""Helper to provide extensibility for pickle/cPickle.
+"""Helper to provide extensibility for pickle.
 
 This is only useful to add pickle support for extension types defined in
 C, not for instances of user-defined classes.
@@ -146,7 +146,7 @@
 _extension_registry = {}                # key -> code
 _inverted_registry = {}                 # code -> key
 _extension_cache = {}                   # code -> object
-# Don't ever rebind those names:  cPickle grabs a reference to them when
+# Don't ever rebind those names:  pickling grabs a reference to them when
 # it's initialized, and won't see a rebinding.
 
 def add_extension(module, name, code):
diff --git a/Lib/idlelib/rpc.py b/Lib/idlelib/rpc.py
index 6471e81..2f3b56d 100644
--- a/Lib/idlelib/rpc.py
+++ b/Lib/idlelib/rpc.py
@@ -33,7 +33,7 @@
 import select
 import SocketServer
 import struct
-import cPickle as pickle
+import pickle
 import threading
 import Queue
 import traceback
diff --git a/Lib/logging/handlers.py b/Lib/logging/handlers.py
index 75434b7..2279db2 100644
--- a/Lib/logging/handlers.py
+++ b/Lib/logging/handlers.py
@@ -28,10 +28,7 @@
 """
 
 import sys, logging, socket, os, struct, time, glob
-try:
-    import cPickle as pickle
-except ImportError:
-    import pickle
+import pickle
 from stat import ST_DEV, ST_INO
 
 try:
diff --git a/Lib/pickle.py b/Lib/pickle.py
index 9570dd4..6901a64 100644
--- a/Lib/pickle.py
+++ b/Lib/pickle.py
@@ -1,6 +1,5 @@
 """Create portable serialized representations of Python objects.
 
-See module cPickle for a (much) faster implementation.
 See module copy_reg for a mechanism for registering custom picklers.
 See module pickletools source for extensive comments.
 
@@ -48,8 +47,7 @@
                       "2.0",            # Protocol 2
                       ]                 # Old format versions we can read
 
-# Keep in synch with cPickle.  This is the highest protocol number we
-# know how to read.
+# This is the highest protocol number we know how to read.
 HIGHEST_PROTOCOL = 2
 
 # The protocol we write by default.  May be less than HIGHEST_PROTOCOL.
@@ -591,8 +589,6 @@
 
     dispatch[list] = save_list
 
-    # Keep in synch with cPickle's BATCHSIZE.  Nothing will break if it gets
-    # out of synch, though.
     _BATCHSIZE = 1000
 
     def _batch_appends(self, items):
@@ -1090,7 +1086,12 @@
         stack = self.stack
         args = stack.pop()
         func = stack[-1]
-        value = func(*args)
+        try:
+            value = func(*args)
+        except:
+            print(sys.exc_info())
+            print(func, args)
+            raise
         stack[-1] = value
     dispatch[REDUCE[0]] = load_reduce
 
diff --git a/Lib/pickletools.py b/Lib/pickletools.py
index 226facc..8c324c7 100644
--- a/Lib/pickletools.py
+++ b/Lib/pickletools.py
@@ -597,7 +597,7 @@
              doc="""An 8-byte binary representation of a float, big-endian.
 
              The format is unique to Python, and shared with the struct
-             module (format string '>d') "in theory" (the struct and cPickle
+             module (format string '>d') "in theory" (the struct and pickle
              implementations don't share the code -- they should).  It's
              strongly related to the IEEE-754 double format, and, in normal
              cases, is in fact identical to the big-endian 754 double format.
@@ -1587,9 +1587,8 @@
       first insists that the class object have a __safe_for_unpickling__
       attribute.  Unlike as for the __safe_for_unpickling__ check in REDUCE,
       it doesn't matter whether this attribute has a true or false value, it
-      only matters whether it exists (XXX this is a bug; cPickle
-      requires the attribute to be true).  If __safe_for_unpickling__
-      doesn't exist, UnpicklingError is raised.
+      only matters whether it exists (XXX this is a bug).  If
+      __safe_for_unpickling__ doesn't exist, UnpicklingError is raised.
 
       Else (the class object does have a __safe_for_unpickling__ attr),
       the class object obtained from INST's arguments is applied to the
@@ -1624,8 +1623,7 @@
       As for INST, the remainder of the stack above the markobject is
       gathered into an argument tuple, and then the logic seems identical,
       except that no __safe_for_unpickling__ check is done (XXX this is
-      a bug; cPickle does test __safe_for_unpickling__).  See INST for
-      the gory details.
+      a bug).  See INST for the gory details.
 
       NOTE:  In Python 2.3, INST and OBJ are identical except for how they
       get the class object.  That was always the intent; the implementations
diff --git a/Lib/test/pickletester.py b/Lib/test/pickletester.py
index 927939e..7bff76f 100644
--- a/Lib/test/pickletester.py
+++ b/Lib/test/pickletester.py
@@ -1,9 +1,5 @@
 import unittest
 import pickle
-try:
-    import cPickle
-except ImportError:
-    cPickle = None
 import pickletools
 import copy_reg
 
@@ -12,8 +8,6 @@
 # Tests that try a number of pickle protocols should have a
 #     for proto in protocols:
 # kind of outer loop.
-if cPickle is not None:
-    assert pickle.HIGHEST_PROTOCOL == cPickle.HIGHEST_PROTOCOL == 2
 protocols = range(pickle.HIGHEST_PROTOCOL + 1)
 
 
diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py
index 8006370..7a9022e 100644
--- a/Lib/test/test_bool.py
+++ b/Lib/test/test_bool.py
@@ -268,34 +268,6 @@
         self.assertIs(pickle.loads(pickle.dumps(True, True)), True)
         self.assertIs(pickle.loads(pickle.dumps(False, True)), False)
 
-    def test_cpickle(self):
-        try:
-            import cPickle
-        except ImportError:
-            return # Just ignore this if cPickle doesn't exist
-
-        self.assertIs(cPickle.loads(cPickle.dumps(True)), True)
-        self.assertIs(cPickle.loads(cPickle.dumps(False)), False)
-        self.assertIs(cPickle.loads(cPickle.dumps(True, True)), True)
-        self.assertIs(cPickle.loads(cPickle.dumps(False, True)), False)
-
-    def test_mixedpickle(self):
-        import pickle
-        try:
-            import cPickle
-        except ImportError:
-            return # Just ignore this if cPickle doesn't exist
-
-        self.assertIs(pickle.loads(cPickle.dumps(True)), True)
-        self.assertIs(pickle.loads(cPickle.dumps(False)), False)
-        self.assertIs(pickle.loads(cPickle.dumps(True, True)), True)
-        self.assertIs(pickle.loads(cPickle.dumps(False, True)), False)
-
-        self.assertIs(cPickle.loads(pickle.dumps(True)), True)
-        self.assertIs(cPickle.loads(pickle.dumps(False)), False)
-        self.assertIs(cPickle.loads(pickle.dumps(True, True)), True)
-        self.assertIs(cPickle.loads(pickle.dumps(False, True)), False)
-
     def test_picklevalues(self):
         # Test for specific backwards-compatible pickle values
         import pickle
@@ -306,19 +278,6 @@
         self.assertEqual(pickle.dumps(True, protocol=2), b'\x80\x02\x88.')
         self.assertEqual(pickle.dumps(False, protocol=2), b'\x80\x02\x89.')
 
-    def test_cpicklevalues(self):
-        # Test for specific backwards-compatible pickle values
-        try:
-            import cPickle
-        except ImportError:
-            return # Just ignore the rest if cPickle doesn't exist
-        self.assertEqual(cPickle.dumps(True, protocol=0), b"I01\n.")
-        self.assertEqual(cPickle.dumps(False, protocol=0), b"I00\n.")
-        self.assertEqual(cPickle.dumps(True, protocol=1), b"I01\n.")
-        self.assertEqual(cPickle.dumps(False, protocol=1), b"I00\n.")
-        self.assertEqual(cPickle.dumps(True, protocol=2), b'\x80\x02\x88.')
-        self.assertEqual(cPickle.dumps(False, protocol=2), b'\x80\x02\x89.')
-
     def test_convert_to_bool(self):
         # Verify that TypeError occurs when bad things are returned
         # from __bool__().  This isn't really a bool test, but
diff --git a/Lib/test/test_bytes.py b/Lib/test/test_bytes.py
index ca22ef1..094c56c 100644
--- a/Lib/test/test_bytes.py
+++ b/Lib/test/test_bytes.py
@@ -4,7 +4,6 @@
 import re
 import sys
 import pickle
-import cPickle
 import tempfile
 import unittest
 import test.test_support
@@ -641,12 +640,11 @@
         self.assertEqual(b.rpartition(b'i'), (b'mississipp', b'i', b''))
 
     def test_pickling(self):
-        for pm in pickle, cPickle:
-            for proto in range(pm.HIGHEST_PROTOCOL):
-                for b in b"", b"a", b"abc", b"\xffab\x80", b"\0\0\377\0\0":
-                    ps = pm.dumps(b, proto)
-                    q = pm.loads(ps)
-                    self.assertEqual(b, q)
+        for proto in range(pickle.HIGHEST_PROTOCOL):
+            for b in b"", b"a", b"abc", b"\xffab\x80", b"\0\0\377\0\0":
+                ps = pickle.dumps(b, proto)
+                q = pickle.loads(ps)
+                self.assertEqual(b, q)
 
     def test_strip(self):
         b = b'mississippi'
diff --git a/Lib/test/test_cpickle.py b/Lib/test/test_cpickle.py
deleted file mode 100644
index 78beda7..0000000
--- a/Lib/test/test_cpickle.py
+++ /dev/null
@@ -1,103 +0,0 @@
-import cPickle
-import unittest
-from cStringIO import StringIO
-from test.pickletester import AbstractPickleTests, AbstractPickleModuleTests
-from test import test_support
-
-class cPickleTests(AbstractPickleTests, AbstractPickleModuleTests):
-
-    def setUp(self):
-        self.dumps = cPickle.dumps
-        self.loads = cPickle.loads
-
-    error = cPickle.BadPickleGet
-    module = cPickle
-
-class cPicklePicklerTests(AbstractPickleTests):
-
-    def dumps(self, arg, proto=0):
-        f = StringIO()
-        p = cPickle.Pickler(f, proto)
-        p.dump(arg)
-        f.seek(0)
-        return f.read()
-
-    def loads(self, buf):
-        f = StringIO(buf)
-        p = cPickle.Unpickler(f)
-        return p.load()
-
-    error = cPickle.BadPickleGet
-
-class cPickleListPicklerTests(AbstractPickleTests):
-
-    def dumps(self, arg, proto=0):
-        p = cPickle.Pickler(proto)
-        p.dump(arg)
-        return p.getvalue()
-
-    def loads(self, *args):
-        f = StringIO(args[0])
-        p = cPickle.Unpickler(f)
-        return p.load()
-
-    error = cPickle.BadPickleGet
-
-class cPickleFastPicklerTests(AbstractPickleTests):
-
-    def dumps(self, arg, proto=0):
-        f = StringIO()
-        p = cPickle.Pickler(f, proto)
-        p.fast = 1
-        p.dump(arg)
-        f.seek(0)
-        return f.read()
-
-    def loads(self, *args):
-        f = StringIO(args[0])
-        p = cPickle.Unpickler(f)
-        return p.load()
-
-    error = cPickle.BadPickleGet
-
-    def test_recursive_list(self):
-        self.assertRaises(ValueError,
-                          AbstractPickleTests.test_recursive_list,
-                          self)
-
-    def test_recursive_inst(self):
-        self.assertRaises(ValueError,
-                          AbstractPickleTests.test_recursive_inst,
-                          self)
-
-    def test_recursive_dict(self):
-        self.assertRaises(ValueError,
-                          AbstractPickleTests.test_recursive_dict,
-                          self)
-
-    def test_recursive_multi(self):
-        self.assertRaises(ValueError,
-                          AbstractPickleTests.test_recursive_multi,
-                          self)
-
-    def test_nonrecursive_deep(self):
-        # If it's not cyclic, it should pickle OK even if the nesting
-        # depth exceeds PY_CPICKLE_FAST_LIMIT.  That happens to be
-        # 50 today.  Jack Jansen reported stack overflow on Mac OS 9
-        # at 64.
-        a = []
-        for i in range(60):
-            a = [a]
-        b = self.loads(self.dumps(a))
-        self.assertEqual(a, b)
-
-def test_main():
-    test_support.run_unittest(
-        cPickleTests,
-        cPicklePicklerTests,
-        cPickleListPicklerTests,
-        cPickleFastPicklerTests
-    )
-
-if __name__ == "__main__":
-    test_main()
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 110e3a8..8e57b90 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -2807,10 +2807,6 @@
     if verbose:
         print("Testing pickling and copying new-style classes and objects...")
     import pickle
-    try:
-        import cPickle
-    except ImportError:
-        cPickle = None
 
     def sorteditems(d):
         return sorted(d.items())
@@ -2863,9 +2859,7 @@
     class C4(C4classic, object): # mixed inheritance
         pass
 
-    for p in pickle, cPickle:
-        if p is None:
-            continue # cPickle not found -- skip it
+    for p in [pickle]:
         for bin in 0, 1:
             if verbose:
                 print(p.__name__, ["text", "binary"][bin])
@@ -2925,7 +2919,7 @@
 
 def pickleslots():
     if verbose: print("Testing pickling of classes with __slots__ ...")
-    import pickle, pickle as cPickle
+    import pickle
     # Pickling of classes with __slots__ but without __getstate__ should fail
     # (when using protocols 0 or 1)
     global B, C, D, E
@@ -2943,23 +2937,11 @@
         else:
             raise TestFailed, "should fail: pickle C instance - %s" % base
         try:
-            cPickle.dumps(C(), 0)
-        except TypeError:
-            pass
-        else:
-            raise TestFailed, "should fail: cPickle C instance - %s" % base
-        try:
             pickle.dumps(C(), 0)
         except TypeError:
             pass
         else:
             raise TestFailed, "should fail: pickle D instance - %s" % base
-        try:
-            cPickle.dumps(D(), 0)
-        except TypeError:
-            pass
-        else:
-            raise TestFailed, "should fail: cPickle D instance - %s" % base
         # Give C a nice generic __getstate__ and __setstate__
         class C(base):
             __slots__ = ['a']
@@ -2984,20 +2966,14 @@
         x = C()
         y = pickle.loads(pickle.dumps(x))
         vereq(hasattr(y, 'a'), 0)
-        y = cPickle.loads(cPickle.dumps(x))
-        vereq(hasattr(y, 'a'), 0)
         x.a = 42
         y = pickle.loads(pickle.dumps(x))
         vereq(y.a, 42)
-        y = cPickle.loads(cPickle.dumps(x))
-        vereq(y.a, 42)
         x = D()
         x.a = 42
         x.b = 100
         y = pickle.loads(pickle.dumps(x))
         vereq(y.a + y.b, 142)
-        y = cPickle.loads(cPickle.dumps(x))
-        vereq(y.a + y.b, 142)
         # A subclass that adds a slot should also work
         class E(C):
             __slots__ = ['b']
@@ -3007,9 +2983,6 @@
         y = pickle.loads(pickle.dumps(x))
         vereq(y.a, x.a)
         vereq(y.b, x.b)
-        y = cPickle.loads(cPickle.dumps(x))
-        vereq(y.a, x.a)
-        vereq(y.b, x.b)
 
 def copies():
     if verbose: print("Testing copy.copy() and copy.deepcopy()...")
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 56a990d..0988098 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -4,10 +4,6 @@
 import sys
 import unittest
 import pickle
-try:
-    import cPickle
-except ImportError:
-    cPickle = None
 
 from test.test_support import (TESTFN, unlink, run_unittest,
                                 guard_warnings_filter)
@@ -299,9 +295,7 @@
                                       value, expected[checkArgName]))
 
                 # test for pickling support
-                for p in pickle, cPickle:
-                    if p is None:
-                        continue # cPickle not found -- skip it
+                for p in [pickle]:
                     for protocol in range(p.HIGHEST_PROTOCOL + 1):
                         s = p.dumps(e, protocol)
                         new = p.loads(s)
diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py
index f69dde5..f14ff49 100644
--- a/Lib/test/test_re.py
+++ b/Lib/test/test_re.py
@@ -412,12 +412,6 @@
     def test_pickling(self):
         import pickle
         self.pickle_test(pickle)
-        try:
-            import cPickle
-        except ImportError:
-            pass # cPickle not found -- skip it
-        else:
-            self.pickle_test(cPickle)
         # old pickles expect the _compile() reconstructor in sre module
         import warnings
         with guard_warnings_filter():
diff --git a/Lib/test/test_slice.py b/Lib/test/test_slice.py
index 77a2931..4d89aa6 100644
--- a/Lib/test/test_slice.py
+++ b/Lib/test/test_slice.py
@@ -2,7 +2,7 @@
 
 import unittest
 from test import test_support
-from cPickle import loads, dumps
+from pickle import loads, dumps
 
 import sys
 
diff --git a/Lib/test/test_xpickle.py b/Lib/test/test_xpickle.py
deleted file mode 100644
index 42cd0f4..0000000
--- a/Lib/test/test_xpickle.py
+++ /dev/null
@@ -1,44 +0,0 @@
-# test_pickle dumps and loads pickles via pickle.py.
-# test_cpickle does the same, but via the cPickle module.
-# This test covers the other two cases, making pickles with one module and
-# loading them via the other.
-
-import pickle
-import cPickle
-import unittest
-
-from test import test_support
-from test.pickletester import AbstractPickleTests
-
-class DumpCPickle_LoadPickle(AbstractPickleTests):
-
-    error = KeyError
-
-    def dumps(self, arg, proto=0, fast=0):
-        # Ignore fast
-        return cPickle.dumps(arg, proto)
-
-    def loads(self, buf):
-        # Ignore fast
-        return pickle.loads(buf)
-
-class DumpPickle_LoadCPickle(AbstractPickleTests):
-
-    error = cPickle.BadPickleGet
-
-    def dumps(self, arg, proto=0, fast=0):
-        # Ignore fast
-        return pickle.dumps(arg, proto)
-
-    def loads(self, buf):
-        # Ignore fast
-        return cPickle.loads(buf)
-
-def test_main():
-    test_support.run_unittest(
-        DumpCPickle_LoadPickle,
-        DumpPickle_LoadCPickle
-    )
-
-if __name__ == "__main__":
-    test_main()
diff --git a/Lib/trace.py b/Lib/trace.py
index 79d2171..d40f13c 100644
--- a/Lib/trace.py
+++ b/Lib/trace.py
@@ -58,11 +58,7 @@
 import types
 import gc
 
-try:
-    import cPickle
-    pickle = cPickle
-except ImportError:
-    import pickle
+import pickle
 
 def usage(outfile):
     outfile.write("""Usage: %s [OPTIONS] <file> [ARGS]