diff --git a/django/core/handlers/modpython.py b/django/core/handlers/modpython.py
index b1e3e17..6d1cc1e 100644
--- a/django/core/handlers/modpython.py
+++ b/django/core/handlers/modpython.py
@@ -1,5 +1,9 @@
 import os
 from pprint import pformat
+try:
+    from cStringIO import StringIO
+except ImportError:
+    from StringIO import StringIO
 
 from django import http
 from django.core import signals
@@ -82,9 +86,8 @@ class ModPythonRequest(http.HttpRequest):
             return
 
         if 'content-type' in self._req.headers_in and self._req.headers_in['content-type'].startswith('multipart'):
-            self._raw_post_data = ''
             try:
-                self._post, self._files = self.parse_file_upload(self.META, self._req)
+                self._post, self._files = self.parse_file_upload(self.META, StringIO(self.raw_post_data))
             except:
                 # See django.core.handlers.wsgi.WSGIHandler for an explanation
                 # of what's going on here.
diff --git a/django/core/handlers/wsgi.py b/django/core/handlers/wsgi.py
index 927b098..1f344e7 100644
--- a/django/core/handlers/wsgi.py
+++ b/django/core/handlers/wsgi.py
@@ -132,9 +132,9 @@ class WSGIRequest(http.HttpRequest):
         # Populates self._post and self._files
         if self.method == 'POST':
             if self.environ.get('CONTENT_TYPE', '').startswith('multipart'):
-                self._raw_post_data = ''
+                body = StringIO(self.raw_post_data)
                 try:
-                    self._post, self._files = self.parse_file_upload(self.META, self.environ['wsgi.input'])
+                    self._post, self._files = self.parse_file_upload(self.META, body)
                 except:
                     # An error occured while parsing POST data.  Since when
                     # formatting the error the request handler might access
diff --git a/tests/regressiontests/requests/tests.py b/tests/regressiontests/requests/tests.py
index 1615a73..ae2ee4e 100644
--- a/tests/regressiontests/requests/tests.py
+++ b/tests/regressiontests/requests/tests.py
@@ -44,4 +44,23 @@ https://www.example.com/asdf
 >>> request.path = ''
 >>> print request.build_absolute_uri(location="/path/with:colons")
 http://www.example.com/path/with:colons
+
+>>> from django.core.handlers.wsgi import WSGIRequest
+>>> from django.test.client import MULTIPART_CONTENT, BOUNDARY, FakePayload, encode_multipart
+>>> post_data = encode_multipart(BOUNDARY,dict(testkey="testvalue"))
+>>> env =  {'SERVER_PROTOCOL': 'HTTP/1.0','REQUEST_METHOD':'POST','wsgi.input':FakePayload(post_data),'CONTENT_TYPE':MULTIPART_CONTENT,'CONTENT_LENGTH':len(post_data)}
+>>> req = WSGIRequest(env)
+>>> nop = req.raw_post_data   #acessing the raw data
+>>> print req.POST['testkey'] #after acessing raw data POST still should be accesible
+testvalue
+
+>>> from django.core.handlers.wsgi import WSGIRequest
+>>> from django.test.client import MULTIPART_CONTENT, BOUNDARY, FakePayload, encode_multipart
+>>> post_data = encode_multipart(BOUNDARY,dict(testkey="testvalue"))
+>>> env =  {'SERVER_PROTOCOL': 'HTTP/1.0','REQUEST_METHOD':'POST','wsgi.input':FakePayload(post_data),'CONTENT_TYPE':MULTIPART_CONTENT,'CONTENT_LENGTH':len(post_data)}
+>>> req = WSGIRequest(env)
+>>> nop = req.POST['testkey'] #acessing POST keys
+>>> len(req.raw_post_data) == len(post_data)   #after that raw_post_data should still be non empty
+True
 """
+
