diff --git a/Lib/ConfigParser.py b/Lib/ConfigParser.py
index e080fcb..9a365c0 100644
--- a/Lib/ConfigParser.py
+++ b/Lib/ConfigParser.py
@@ -569,7 +569,7 @@
                     value = value % vars
                 except KeyError as e:
                     raise InterpolationMissingOptionError(
-                        option, section, rawval, e[0])
+                        option, section, rawval, e.message)
             else:
                 break
         if "%(" in value:
diff --git a/Lib/test/test_dbm.py b/Lib/test/test_dbm.py
index a3b7716..ebe37b4 100755
--- a/Lib/test/test_dbm.py
+++ b/Lib/test/test_dbm.py
@@ -17,7 +17,7 @@
         try:
             os.unlink(filename + suffix)
         except OSError as e:
-            (errno, strerror) = e
+            (errno, strerror) = e.errno, e.strerror
             # if we can't delete the file because of permissions,
             # nothing will work, so skip the test
             if errno == 1:
diff --git a/Lib/test/test_exceptions.py b/Lib/test/test_exceptions.py
index 0ff3b10..c0a5094 100644
--- a/Lib/test/test_exceptions.py
+++ b/Lib/test/test_exceptions.py
@@ -302,13 +302,6 @@
                                               'pickled "%r", attribute "%s' %
                                               (e, checkArgName))
 
-    def testSlicing(self):
-        # Test that you can slice an exception directly instead of requiring
-        # going through the 'args' attribute.
-        args = (1, 2, 3)
-        exc = BaseException(*args)
-        self.failUnlessEqual(exc[:], args)
-
     def testKeywordArgs(self):
         # test that builtin exception don't take keyword args,
         # but user-defined subclasses can if they want
diff --git a/Lib/test/test_file.py b/Lib/test/test_file.py
index 7eb052b..a57ab43 100644
--- a/Lib/test/test_file.py
+++ b/Lib/test/test_file.py
@@ -156,7 +156,7 @@
         try:
             f = open(TESTFN, bad_mode)
         except ValueError as msg:
-            if msg[0] != 0:
+            if msg.message != 0:
                 s = str(msg)
                 if s.find(TESTFN) != -1 or s.find(bad_mode) == -1:
                     self.fail("bad error message for invalid mode: %s" % s)
diff --git a/Lib/test/test_pep352.py b/Lib/test/test_pep352.py
index 2a6bac1..1f72ead 100644
--- a/Lib/test/test_pep352.py
+++ b/Lib/test/test_pep352.py
@@ -15,7 +15,7 @@
         self.failUnless(issubclass(Exception, object))
 
     def verify_instance_interface(self, ins):
-        for attr in ("args", "message", "__str__", "__repr__", "__getitem__"):
+        for attr in ("args", "message", "__str__", "__repr__"):
             self.failUnless(hasattr(ins, attr), "%s missing %s attribute" %
                     (ins.__class__.__name__, attr))
 
@@ -72,8 +72,7 @@
             inheritance_tree.close()
         self.failUnlessEqual(len(exc_set), 0, "%s not accounted for" % exc_set)
 
-    interface_tests = ("length", "args", "message", "str", "unicode", "repr",
-            "indexing")
+    interface_tests = ("length", "args", "message", "str", "unicode", "repr")
 
     def interface_test_driver(self, results):
         for test_name, (given, expected) in zip(self.interface_tests, results):
@@ -86,7 +85,7 @@
         exc = Exception(arg)
         results = ([len(exc.args), 1], [exc.args[0], arg], [exc.message, arg],
                 [str(exc), str(arg)], [unicode(exc), unicode(arg)],
-            [repr(exc), exc.__class__.__name__ + repr(exc.args)], [exc[0], arg])
+            [repr(exc), exc.__class__.__name__ + repr(exc.args)])
         self.interface_test_driver(results)
 
     def test_interface_multi_arg(self):
@@ -97,8 +96,7 @@
         results = ([len(exc.args), arg_count], [exc.args, args],
                 [exc.message, ''], [str(exc), str(args)],
                 [unicode(exc), unicode(args)],
-                [repr(exc), exc.__class__.__name__ + repr(exc.args)],
-                [exc[-1], args[-1]])
+                [repr(exc), exc.__class__.__name__ + repr(exc.args)])
         self.interface_test_driver(results)
 
     def test_interface_no_arg(self):
@@ -106,7 +104,7 @@
         exc = Exception()
         results = ([len(exc.args), 0], [exc.args, tuple()], [exc.message, ''],
                 [str(exc), ''], [unicode(exc), u''],
-                [repr(exc), exc.__class__.__name__ + '()'], [True, True])
+                [repr(exc), exc.__class__.__name__ + '()'])
         self.interface_test_driver(results)
 
 class UsageTests(unittest.TestCase):
@@ -166,6 +164,10 @@
         self.catch_fails(NonBaseException)
         self.catch_fails(NonBaseException())
 
+    def test_catch_BaseException_instance(self):
+        # Catching an instance of a BaseException subclass won't work.
+        self.catch_fails(BaseException())
+
     def test_catch_string(self):
         # Catching a string is bad.
         self.catch_fails("spam")
diff --git a/Lib/traceback.py b/Lib/traceback.py
index a0d2dcc..437e29b 100644
--- a/Lib/traceback.py
+++ b/Lib/traceback.py
@@ -178,7 +178,7 @@
     # It was a syntax error; show exactly where the problem was found.
     lines = []
     try:
-        msg, (filename, lineno, offset, badline) = value
+        msg, (filename, lineno, offset, badline) = value.args
     except Exception:
         pass
     else:
diff --git a/Misc/NEWS b/Misc/NEWS
index ed921e7..edb512f 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -28,6 +28,8 @@
 Core and Builtins
 -----------------
 
+- Removing indexing/slicing on BaseException.
+
 - Remove the exceptions module, all the exceptions are already builtin.
 
 - input() becomes raw_input(): the name input() now implements the
diff --git a/Objects/exceptions.c b/Objects/exceptions.c
index cea41f8..be3302b 100644
--- a/Objects/exceptions.c
+++ b/Objects/exceptions.c
@@ -174,33 +174,6 @@
 };
 
 
-
-static PyObject *
-BaseException_getitem(PyBaseExceptionObject *self, Py_ssize_t index)
-{
-    return PySequence_GetItem(self->args, index);
-}
-
-static PyObject *
-BaseException_getslice(PyBaseExceptionObject *self,
-			Py_ssize_t start, Py_ssize_t stop)
-{
-    return PySequence_GetSlice(self->args, start, stop);
-}
-
-static PySequenceMethods BaseException_as_sequence = {
-    0,                      /* sq_length; */
-    0,                      /* sq_concat; */
-    0,                      /* sq_repeat; */
-    (ssizeargfunc)BaseException_getitem,  /* sq_item; */
-    (ssizessizeargfunc)BaseException_getslice,  /* sq_slice; */
-    0,                      /* sq_ass_item; */
-    0,                      /* sq_ass_slice; */
-    0,                      /* sq_contains; */
-    0,                      /* sq_inplace_concat; */
-    0                       /* sq_inplace_repeat; */
-};
-
 static PyMemberDef BaseException_members[] = {
     {"message", T_OBJECT, offsetof(PyBaseExceptionObject, message), 0,
         PyDoc_STR("exception message")},
@@ -283,7 +256,7 @@
     0,                          /* tp_compare; */
     (reprfunc)BaseException_repr, /*tp_repr*/
     0,                          /*tp_as_number*/
-    &BaseException_as_sequence, /*tp_as_sequence*/
+    0,                          /*tp_as_sequence*/
     0,                          /*tp_as_mapping*/
     0,                          /*tp_hash */
     0,                          /*tp_call*/
