diff --git a/django/contrib/auth/tests/context_processors.py b/django/contrib/auth/tests/context_processors.py
index 8f77940..8718ccc 100644
--- a/django/contrib/auth/tests/context_processors.py
+++ b/django/contrib/auth/tests/context_processors.py
@@ -24,8 +24,6 @@ class AuthContextProcessorTests(TestCase):
         Tests that the session is not accessed simply by including
         the auth context processor
         """
-        context._standard_context_processors = None
-
         response = self.client.get('/auth_processor_no_attr_access/')
         self.assertContains(response, "Session not accessed")
 
@@ -38,8 +36,6 @@ class AuthContextProcessorTests(TestCase):
         Tests that the session is accessed if the auth context processor
         is used and relevant attributes accessed.
         """
-        context._standard_context_processors = None
-
         response = self.client.get('/auth_processor_attr_access/')
         self.assertContains(response, "Session accessed")
 
diff --git a/django/test/signals.py b/django/test/signals.py
index 01d5581..290fdd1 100644
--- a/django/test/signals.py
+++ b/django/test/signals.py
@@ -20,4 +20,10 @@ def update_connections_time_zone(**kwargs):
         if tz_sql:
             conn.cursor().execute(tz_sql, [tz])
 
+def clear_context_processors_cache(**kwargs):
+    if kwargs['setting'] == 'TEMPLATE_CONTEXT_PROCESSORS':
+        from django.template import context
+        context._standard_context_processors = None
+
 setting_changed.connect(update_connections_time_zone)
+setting_changed.connect(clear_context_processors_cache)
diff --git a/tests/regressiontests/admin_views/tests.py b/tests/regressiontests/admin_views/tests.py
index 12f1c67..9f71d04 100644
--- a/tests/regressiontests/admin_views/tests.py
+++ b/tests/regressiontests/admin_views/tests.py
@@ -6,7 +6,7 @@ import re
 import datetime
 import urlparse
 
-from django.conf import settings
+from django.conf import settings, global_settings
 from django.core import mail
 from django.core.exceptions import SuspiciousOperation
 from django.core.files import temp as tempfile
@@ -23,7 +23,6 @@ from django.contrib.auth import REDIRECT_FIELD_NAME
 from django.contrib.auth.models import Group, User, Permission, UNUSABLE_PASSWORD
 from django.contrib.contenttypes.models import ContentType
 from django.forms.util import ErrorList
-from django.template import context as context_module
 from django.template.response import TemplateResponse
 from django.test import TestCase
 from django.utils import formats, translation, unittest
@@ -3365,25 +3364,17 @@ class ValidXHTMLTests(TestCase):
     urlbit = 'admin'
 
     def setUp(self):
-        self._context_processors = None
-        self._use_i18n, settings.USE_I18N = settings.USE_I18N, False
-        if 'django.core.context_processors.i18n' in settings.TEMPLATE_CONTEXT_PROCESSORS:
-            self._context_processors = settings.TEMPLATE_CONTEXT_PROCESSORS
-            cp = list(settings.TEMPLATE_CONTEXT_PROCESSORS)
-            cp.remove('django.core.context_processors.i18n')
-            settings.TEMPLATE_CONTEXT_PROCESSORS = tuple(cp)
-            # Force re-evaluation of the contex processor list
-            context_module._standard_context_processors = None
         self.client.login(username='super', password='secret')
 
     def tearDown(self):
         self.client.logout()
-        if self._context_processors is not None:
-            settings.TEMPLATE_CONTEXT_PROCESSORS = self._context_processors
-            # Force re-evaluation of the contex processor list
-            context_module._standard_context_processors = None
-        settings.USE_I18N = self._use_i18n
 
+    @override_settings(
+        TEMPLATE_CONTEXT_PROCESSORS=filter(
+            lambda t:t!='django.core.context_processors.i18n',
+            global_settings.TEMPLATE_CONTEXT_PROCESSORS),
+        USE_I18N=False,
+    )
     def testLangNamePresent(self):
         response = self.client.get('/test_admin/%s/admin_views/' % self.urlbit)
         self.assertFalse(' lang=""' in response.content)
diff --git a/tests/regressiontests/templates/response.py b/tests/regressiontests/templates/response.py
index 5feb8cc..5167e36 100644
--- a/tests/regressiontests/templates/response.py
+++ b/tests/regressiontests/templates/response.py
@@ -5,13 +5,12 @@ import pickle
 import time
 from datetime import datetime
 
-from django.utils import unittest
 from django.test import RequestFactory, TestCase
 from django.conf import settings
-import django.template.context
 from django.template import Template, Context
 from django.template.response import (TemplateResponse, SimpleTemplateResponse,
                                       ContentNotRenderedError)
+from django.test.utils import override_settings
 
 def test_processor(request):
     return {'processors': 'yes'}
@@ -24,32 +23,7 @@ class CustomURLConfMiddleware(object):
         request.urlconf = 'regressiontests.templates.alternate_urls'
 
 
-class BaseTemplateResponseTest(unittest.TestCase):
-    # tests rely on fact that global context
-    # processors should only work when RequestContext is used.
-
-    def setUp(self):
-        self.factory = RequestFactory()
-        self._old_processors = settings.TEMPLATE_CONTEXT_PROCESSORS
-        self._old_TEMPLATE_DIRS = settings.TEMPLATE_DIRS
-        settings.TEMPLATE_CONTEXT_PROCESSORS = [test_processor_name]
-        settings.TEMPLATE_DIRS = (
-            os.path.join(
-                os.path.dirname(__file__),
-                'templates'
-            ),
-        )
-        # Force re-evaluation of the contex processor list
-        django.template.context._standard_context_processors = None
-
-    def tearDown(self):
-        settings.TEMPLATE_DIRS = self._old_TEMPLATE_DIRS
-        settings.TEMPLATE_CONTEXT_PROCESSORS = self._old_processors
-        # Force re-evaluation of the contex processor list
-        django.template.context._standard_context_processors = None
-
-
-class SimpleTemplateResponseTest(BaseTemplateResponseTest):
+class SimpleTemplateResponseTest(TestCase):
 
     def _response(self, template='foo', *args, **kwargs):
         return SimpleTemplateResponse(Template(template), *args, **kwargs)
@@ -215,7 +189,10 @@ class SimpleTemplateResponseTest(BaseTemplateResponseTest):
         unpickled_response = pickle.loads(pickled_response)
         repickled_response = pickle.dumps(unpickled_response)
 
-class TemplateResponseTest(BaseTemplateResponseTest):
+class TemplateResponseTest(TestCase):
+
+    def setUp(self):
+        self.factory = RequestFactory()
 
     def _response(self, template='foo', *args, **kwargs):
         return TemplateResponse(self.factory.get('/'), Template(template),
@@ -299,6 +276,11 @@ class TemplateResponseTest(BaseTemplateResponseTest):
         unpickled_response = pickle.loads(pickled_response)
         repickled_response = pickle.dumps(unpickled_response)
 
+TemplateResponseTest = override_settings(
+    TEMPLATE_CONTEXT_PROCESSORS=[test_processor_name],
+    TEMPLATE_DIRS=(os.path.join(os.path.dirname(__file__),'templates')),
+)(TemplateResponseTest)
+
 
 class CustomURLConfTest(TestCase):
     urls = 'regressiontests.templates.urls'
diff --git a/tests/regressiontests/templates/tests.py b/tests/regressiontests/templates/tests.py
index f74aa75..9c56ee3 100644
--- a/tests/regressiontests/templates/tests.py
+++ b/tests/regressiontests/templates/tests.py
@@ -37,8 +37,8 @@ from .parser import ParserTests
 from .unicode import UnicodeTests
 from .nodelist import NodelistTest, ErrorIndexTest
 from .smartif import SmartIfTests
-from .response import (TemplateResponseTest, BaseTemplateResponseTest,
-    CacheMiddlewareTest, SimpleTemplateResponseTest, CustomURLConfTest)
+from .response import (TemplateResponseTest, CacheMiddlewareTest,
+    SimpleTemplateResponseTest, CustomURLConfTest)
 
 try:
     from .loaders import RenderToStringTest, EggLoaderTest
@@ -1738,7 +1738,7 @@ class TemplateTagLoading(unittest.TestCase):
         t = template.Template(ttext)
 
 
-class RequestContextTests(BaseTemplateResponseTest):
+class RequestContextTests(unittest.TestCase):
 
     def setUp(self):
         templates = {
diff --git a/tests/regressiontests/views/tests/shortcuts.py b/tests/regressiontests/views/tests/shortcuts.py
index 24bf6bb..df7a6fa 100644
--- a/tests/regressiontests/views/tests/shortcuts.py
+++ b/tests/regressiontests/views/tests/shortcuts.py
@@ -2,6 +2,7 @@ import warnings
 
 from django.conf import settings
 from django.test import TestCase
+from django.test.utils import override_settings
 
 class ShortcutTests(TestCase):
     urls = 'regressiontests.views.generic_urls'
@@ -11,21 +12,9 @@ class ShortcutTests(TestCase):
         warnings.filterwarnings('ignore', category=DeprecationWarning,
                                 module='django.views.generic.simple')
 
-        self.old_STATIC_URL = settings.STATIC_URL
-        self.old_TEMPLATE_CONTEXT_PROCESSORS = settings.TEMPLATE_CONTEXT_PROCESSORS
-
-        settings.STATIC_URL = '/path/to/static/media/'
-        settings.TEMPLATE_CONTEXT_PROCESSORS = (
-            'django.core.context_processors.static'
-        )
-
     def tearDown(self):
         self.restore_warnings_state()
 
-    def tearDown(self):
-        settings.STATIC_URL = self.old_STATIC_URL
-        settings.TEMPLATE_CONTEXT_PROCESSORS = self.old_TEMPLATE_CONTEXT_PROCESSORS
-
     def test_render_to_response(self):
         response = self.client.get('/shortcuts/render_to_response/')
         self.assertEqual(response.status_code, 200)
@@ -75,3 +64,7 @@ class ShortcutTests(TestCase):
     def test_render_with_current_app_conflict(self):
         self.assertRaises(ValueError, self.client.get, '/shortcuts/render/current_app_conflict/')
 
+ShortcutTests = override_settings(
+    TEMPLATE_CONTEXT_PROCESSORS=('django.core.context_processors.static',),
+    STATIC_URL='/path/to/static/media/',
+)(ShortcutTests)
