diff --git a/Lib/copy_reg.py b/Lib/copy_reg.py
index f96703e..11ae960 100644
--- a/Lib/copy_reg.py
+++ b/Lib/copy_reg.py
@@ -58,6 +58,9 @@
     try:
         getstate = self.__getstate__
     except AttributeError:
+        if getattr(self, "__slots__", None):
+            raise TypeError("a class that defines __slots__ without "
+                            "defining __getstate__ cannot be pickled")
         try:
             dict = self.__dict__
         except AttributeError:
@@ -83,16 +86,8 @@
         args = ()
     getstate = getattr(obj, "__getstate__", None)
     if getstate:
-        try:
-            state = getstate()
-        except TypeError, err:
-            # XXX Catch generic exception caused by __slots__
-            if str(err) != ("a class that defines __slots__ "
-                            "without defining __getstate__ "
-                            "cannot be pickled"):
-                raise # Not that specific exception
-            getstate = None
-    if not getstate:
+        state = getstate()
+    else:
         state = getattr(obj, "__dict__", None)
         names = _slotnames(cls)
         if names:
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index 8ef7979..d7368d3 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -2835,7 +2835,7 @@
             pass
         else:
             raise TestFailed, "should fail: cPickle D instance - %s" % base
-        # Give C a __getstate__ and __setstate__
+        # Give C a nice generic __getstate__ and __setstate__
         class C(base):
             __slots__ = ['a']
             def __getstate__(self):
@@ -2843,10 +2843,12 @@
                     d = self.__dict__.copy()
                 except AttributeError:
                     d = {}
-                try:
-                    d['a'] = self.a
-                except AttributeError:
-                    pass
+                for cls in self.__class__.__mro__:
+                    for sn in cls.__dict__.get('__slots__', ()):
+                        try:
+                            d[sn] = getattr(self, sn)
+                        except AttributeError:
+                            pass
                 return d
             def __setstate__(self, d):
                 for k, v in d.items():
@@ -2871,21 +2873,18 @@
         vereq(y.a + y.b, 142)
         y = cPickle.loads(cPickle.dumps(x))
         vereq(y.a + y.b, 142)
-        # But a subclass that adds a slot should not work
+        # A subclass that adds a slot should also work
         class E(C):
             __slots__ = ['b']
-        try:
-            pickle.dumps(E())
-        except TypeError:
-            pass
-        else:
-            raise TestFailed, "should fail: pickle E instance - %s" % base
-        try:
-            cPickle.dumps(E())
-        except TypeError:
-            pass
-        else:
-            raise TestFailed, "should fail: cPickle E instance - %s" % base
+        x = E()
+        x.a = 42
+        x.b = "foo"
+        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()..."
