diff --git a/django/test/simple.py b/django/test/simple.py
index c0194b8..78e453c 100644
--- a/django/test/simple.py
+++ b/django/test/simple.py
@@ -14,52 +14,7 @@ TEST_MODULE = 'tests'
 doctestOutputChecker = OutputChecker()
 
 class DjangoTestRunner(unittest.TextTestRunner):
-
-    def __init__(self, verbosity=0, failfast=False, **kwargs):
-        super(DjangoTestRunner, self).__init__(verbosity=verbosity, **kwargs)
-        self.failfast = failfast
-        self._keyboard_interrupt_intercepted = False
-
-    def run(self, *args, **kwargs):
-        """
-        Runs the test suite after registering a custom signal handler
-        that triggers a graceful exit when Ctrl-C is pressed.
-        """
-        self._default_keyboard_interrupt_handler = signal.signal(signal.SIGINT,
-            self._keyboard_interrupt_handler)
-        try:
-            result = super(DjangoTestRunner, self).run(*args, **kwargs)
-        finally:
-            signal.signal(signal.SIGINT, self._default_keyboard_interrupt_handler)
-        return result
-
-    def _keyboard_interrupt_handler(self, signal_number, stack_frame):
-        """
-        Handles Ctrl-C by setting a flag that will stop the test run when
-        the currently running test completes.
-        """
-        self._keyboard_interrupt_intercepted = True
-        sys.stderr.write(" <Test run halted by Ctrl-C> ")
-        # Set the interrupt handler back to the default handler, so that
-        # another Ctrl-C press will trigger immediate exit.
-        signal.signal(signal.SIGINT, self._default_keyboard_interrupt_handler)
-
-    def _makeResult(self):
-        result = super(DjangoTestRunner, self)._makeResult()
-        failfast = self.failfast
-
-        def stoptest_override(func):
-            def stoptest(test):
-                # If we were set to failfast and the unit test failed,
-                # or if the user has typed Ctrl-C, report and quit
-                if (failfast and not result.wasSuccessful()) or \
-                    self._keyboard_interrupt_intercepted:
-                    result.stop()
-                func(test)
-            return stoptest
-
-        result.stopTest = stoptest_override(result.stopTest)
-        return result
+    pass
 
 def get_tests(app_module):
     try:
@@ -232,6 +187,7 @@ class DjangoTestSuiteRunner(object):
     def setup_test_environment(self, **kwargs):
         setup_test_environment()
         settings.DEBUG = False
+        unittest.installHandler()
 
     def build_suite(self, test_labels, extra_tests=None, **kwargs):
         suite = unittest.TestSuite()
@@ -284,6 +240,7 @@ class DjangoTestSuiteRunner(object):
             connection.creation.destroy_test_db(old_name, self.verbosity)
 
     def teardown_test_environment(self, **kwargs):
+        unittest.removeHandler()
         teardown_test_environment()
 
     def suite_result(self, suite, result, **kwargs):
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 725369a..b856afc 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -18,6 +18,7 @@ from django.utils.cache import get_max_age
 from django.utils.encoding import iri_to_uri
 from django.utils.html import escape
 from django.utils.translation import get_date_formats, activate, deactivate
+from django.utils import unittest
 
 # local test models
 from models import Article, BarAccount, CustomArticle, EmptyModel, \
@@ -2209,48 +2210,49 @@ class UserAdminTest(TestCase):
         self.assertNotEquals(new_user.password, UNUSABLE_PASSWORD)
 
 try:
-    # If docutils isn't installed, skip the AdminDocs tests.
     import docutils
+except ImportError:
+    docutils = None
 
-    class AdminDocsTest(TestCase):
-        fixtures = ['admin-views-users.xml']
+#@unittest.skipUnless(docutils, "no docutils installed.")
+class AdminDocsTest(TestCase):
+    fixtures = ['admin-views-users.xml']
 
-        def setUp(self):
-            self.client.login(username='super', password='secret')
+    def setUp(self):
+        self.client.login(username='super', password='secret')
 
-        def tearDown(self):
-            self.client.logout()
+    def tearDown(self):
+        self.client.logout()
 
-        def test_tags(self):
-            response = self.client.get('/test_admin/admin/doc/tags/')
+    def test_tags(self):
+        response = self.client.get('/test_admin/admin/doc/tags/')
 
-            # The builtin tag group exists
-            self.assertContains(response, "<h2>Built-in tags</h2>", count=2)
+        # The builtin tag group exists
+        self.assertContains(response, "<h2>Built-in tags</h2>", count=2)
 
-            # A builtin tag exists in both the index and detail
-            self.assertContains(response, '<h3 id="built_in-autoescape">autoescape</h3>')
-            self.assertContains(response, '<li><a href="#built_in-autoescape">autoescape</a></li>')
+        # A builtin tag exists in both the index and detail
+        self.assertContains(response, '<h3 id="built_in-autoescape">autoescape</h3>')
+        self.assertContains(response, '<li><a href="#built_in-autoescape">autoescape</a></li>')
 
-            # An app tag exists in both the index and detail
-            self.assertContains(response, '<h3 id="flatpages-get_flatpages">get_flatpages</h3>')
-            self.assertContains(response, '<li><a href="#flatpages-get_flatpages">get_flatpages</a></li>')
+        # An app tag exists in both the index and detail
+        self.assertContains(response, '<h3 id="flatpages-get_flatpages">get_flatpages</h3>')
+        self.assertContains(response, '<li><a href="#flatpages-get_flatpages">get_flatpages</a></li>')
 
-            # The admin list tag group exists
-            self.assertContains(response, "<h2>admin_list</h2>", count=2)
+        # The admin list tag group exists
+        self.assertContains(response, "<h2>admin_list</h2>", count=2)
 
-            # An admin list tag exists in both the index and detail
-            self.assertContains(response, '<h3 id="admin_list-admin_actions">admin_actions</h3>')
-            self.assertContains(response, '<li><a href="#admin_list-admin_actions">admin_actions</a></li>')
+        # An admin list tag exists in both the index and detail
+        self.assertContains(response, '<h3 id="admin_list-admin_actions">admin_actions</h3>')
+        self.assertContains(response, '<li><a href="#admin_list-admin_actions">admin_actions</a></li>')
 
-        def test_filters(self):
-            response = self.client.get('/test_admin/admin/doc/filters/')
+    def test_filters(self):
+        response = self.client.get('/test_admin/admin/doc/filters/')
 
-            # The builtin filter group exists
-            self.assertContains(response, "<h2>Built-in filters</h2>", count=2)
+        # The builtin filter group exists
+        self.assertContains(response, "<h2>Built-in filters</h2>", count=2)
 
-            # A builtin filter exists in both the index and detail
-            self.assertContains(response, '<h3 id="built_in-add">add</h3>')
-            self.assertContains(response, '<li><a href="#built_in-add">add</a></li>')
+        # A builtin filter exists in both the index and detail
+        self.assertContains(response, '<h3 id="built_in-add">add</h3>')
+        self.assertContains(response, '<li><a href="#built_in-add">add</a></li>')
 
-except ImportError:
-    pass
+AdminDocsTest = unittest.skipUnless(docutils, "no docutils installed.")(AdminDocsTest)
\ No newline at end of file
