diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 7d2ee44..3b0273f 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -238,7 +238,7 @@ class WSGIHandler(base.BaseHandler):
             signals.request_finished.send(sender=self.__class__)
 
         try:
-            status_text = STATUS_CODE_TEXT[response.status_code]
+            status_text = response.status_text or STATUS_CODE_TEXT[response.status_code]
         except KeyError:
             status_text = 'UNKNOWN STATUS CODE'
         status = '%s %s' % (response.status_code, status_text)
diff --git a/django/http/__init__.py b/django/http/__init__.py
index 49acd57..0b1d279 100644
--- a/django/http/__init__.py
+++ b/django/http/__init__.py
@@ -537,6 +537,7 @@ class HttpResponseBase(object):
     """
 
     status_code = 200
+    status_text = None
 
     def __init__(self, content_type=None, status=None, mimetype=None):
         # _headers is a mapping of the lower-case name to the original case of
@@ -554,7 +555,10 @@ class HttpResponseBase(object):
                     self._charset)
         self.cookies = SimpleCookie()
         if status:
-            self.status_code = status
+            if isinstance(status, (list, tuple)):
+                self.status_code, self.status_text = status
+            else:
+                self.status_code = status
 
         self['Content-Type'] = content_type
 
diff --git a/docs/ref/request-response.txt b/docs/ref/request-response.txt
index 89d0fe8..cc0fc51 100644
--- a/docs/ref/request-response.txt
+++ b/docs/ref/request-response.txt
@@ -622,6 +622,14 @@ Attributes
 
     The `HTTP Status code`_ for the response.
 
+.. attribute:: HttpResponse.status_text
+
+    .. versionadded:: 1.5
+
+    The `HTTP Status code`_ text for the response. This is the human readable
+    string passed with the status code in the status line.  If not provided, the
+    standard text corresponding to ``status_code`` is used.
+
 .. attribute:: HttpResponse.streaming
 
     This is always ``False``.
@@ -650,7 +658,11 @@ Methods
 
     Historically, this parameter was called ``mimetype`` (now deprecated).
 
-    ``status`` is the `HTTP Status code`_ for the response.
+    ``status`` is either the `HTTP Status code`_ for the response or a tuple
+    containing the status code together with a customized status text. For
+    example::
+
+        status=(404, "We are so sorry, this page has not been found")
 
 
 .. method:: HttpResponse.__setitem__(header, value)
diff --git a/tests/regressiontests/httpwrappers/tests.py b/tests/regressiontests/httpwrappers/tests.py
index bfb4ae1..33e1d88 100644
--- a/tests/regressiontests/httpwrappers/tests.py
+++ b/tests/regressiontests/httpwrappers/tests.py
@@ -283,6 +283,17 @@ class HttpResponseTests(unittest.TestCase):
         self.assertRaises(BadHeaderError, r.__setitem__, 'test\rstr', 'test')
         self.assertRaises(BadHeaderError, r.__setitem__, 'test\nstr', 'test')
 
+    def test_status(self):
+        """
+        Test setting of status code and status text
+        """
+        r = HttpResponse()
+        self.assertEqual(r.status_code, 200)
+        self.assertEqual(r.status_text, None)
+        r = HttpResponse(status=(202, "Thanks!"))
+        self.assertEqual(r.status_code, 202)
+        self.assertEqual(r.status_text, "Thanks!")
+
     def test_dict_behavior(self):
         """
         Test for bug #14020: Make HttpResponse.get work like dict.get
diff --git a/tests/regressiontests/wsgi/tests.py b/tests/regressiontests/wsgi/tests.py
index 6c1483d..4a6ec97 100644
--- a/tests/regressiontests/wsgi/tests.py
+++ b/tests/regressiontests/wsgi/tests.py
@@ -42,6 +42,20 @@ class WSGITest(TestCase):
             bytes(response),
             b"Content-Type: text/html; charset=utf-8\r\n\r\nHello World!")
 
+    def test_custom_status(self):
+        application = get_wsgi_application()
+        environ = RequestFactory().get('/status/').environ
+
+        response_data = {}
+
+        def start_response(status, headers):
+            response_data["status"] = status
+            response_data["headers"] = headers
+
+        response = application(environ, start_response)
+
+        self.assertEqual(response_data["status"], "220 Pretty good")
+
 
 class GetInternalWSGIApplicationTest(unittest.TestCase):
     @override_settings(WSGI_APPLICATION="regressiontests.wsgi.wsgi.application")
diff --git a/tests/regressiontests/wsgi/urls.py b/tests/regressiontests/wsgi/urls.py
index 9639f0f..f8d40d6 100644
--- a/tests/regressiontests/wsgi/urls.py
+++ b/tests/regressiontests/wsgi/urls.py
@@ -4,7 +4,11 @@ from django.http import HttpResponse
 def helloworld(request):
     return HttpResponse("Hello World!")
 
+def custom_status(request):
+    return HttpResponse("Hello", status=[220, "Pretty good"])
+
 urlpatterns = patterns(
     "",
-    url("^$", helloworld)
+    url("^$", helloworld),
+    url("^status/$", custom_status),
     )
