Index: twisted/test/test_defer.py
===================================================================
--- twisted/test/test_defer.py	(revision 20686)
+++ twisted/test/test_defer.py	(working copy)
@@ -284,6 +284,8 @@
         self.failIf(L, "Deferred failed too soon.")
         return d
     testTimeOut.suppress = [_setTimeoutSuppression]
+    if not hasattr(defer.Deferred, 'setTimeout'):
+        testTimeOut.skip = "setTimeout not supported, skipping"
 
 
     def testImmediateSuccess(self):
@@ -304,6 +306,8 @@
         d.addCallback(l.append)
         self.assertEquals(l, ["success"])
     test_immediateSuccessBeforeTimeout.suppress = [_setTimeoutSuppression]
+    if not hasattr(defer.Deferred, 'setTimeout'):
+        test_immediateSuccessBeforeTimeout.skip = "setTimeout not supported, skipping"
 
 
     def testImmediateFailure(self):
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.
 
