Index: twisted/test/test_defer.py
===================================================================
--- twisted/test/test_defer.py	(revision 20686)
+++ twisted/test/test_defer.py	(working copy)
@@ -278,6 +278,9 @@
         """
         L = []
         d = defer.Deferred()
+        if not hasattr(d, 'setTimeout'):
+            log.msg("setTimeout support not in Deferred, so will not be tested")
+            return
         d.setTimeout(0.01)
         self.assertFailure(d, defer.TimeoutError)
         d.addCallback(L.append)
@@ -300,6 +303,9 @@
         """
         l = []
         d = defer.succeed("success")
+        if not hasattr(d, 'setTimeout'):
+            log.msg("setTimeout support not in Deferred, so will not be tested")
+            return
         d.setTimeout(1.0)
         d.addCallback(l.append)
         self.assertEquals(l, ["success"])
Index: twisted/internet/defer.py
===================================================================
--- twisted/internet/defer.py	(revision 20686)
+++ twisted/internet/defer.py	(working copy)
@@ -439,20 +439,26 @@
         return False
 
 try:
-    from twisted.internet.cdefer import Deferred
+    from twisted.internet.cdefer import Deferred as CDeferred
 except ImportError:
     pass
 else:
-    # Stubs for setDebugging/getDebugging for backwards compatibility
-    # when using cdefer.
-    is_debug = False
+    PyDeferred = Deferred
+    PyDeferred.debug = True
+    # Debugging enabled via use of PyDeferred
     def setDebugging(new_value):
-        global is_debug
+        global is_debug, Deferred
         is_debug = new_value
+        if is_debug:
+            Deferred = PyDeferred
+        else:
+            Deferred = CDeferred
     def getDebugging():
         global is_debug
         return is_debug
 
+    setDebugging(False)
+
 class DeferredList(Deferred):
     """I combine a group of deferreds into one callback.
 
