diff --git a/tests/regressiontests/file_storage/tests.py b/tests/regressiontests/file_storage/tests.py
--- a/tests/regressiontests/file_storage/tests.py
+++ b/tests/regressiontests/file_storage/tests.py
@@ -5,6 +5,7 @@
 >>> import tempfile
 >>> from django.core.files.storage import FileSystemStorage
 >>> from django.core.files.base import ContentFile
+>>> import os.path
 
 # Set up a unique temporary directory
 >>> import os
@@ -43,6 +44,26 @@
   ...
 SuspiciousOperation: Attempted access to '/etc/passwd' denied.
 
+# Case should be preserved by the storage backend
+
+# Set up a unique temporary directory with a mixed case name
+>>> temp_dir2 = tempfile.mktemp()
+>>> dn, bn = os.path.split(temp_dir2)
+>>> bn = bn[0].swapcase() + bn[1:-1] + bn[-1].swapcase()
+>>> temp_dir2 = os.path.join(dn, bn)
+>>> os.makedirs(temp_dir2)
+
+>>> temp_storage2 = FileSystemStorage(location=temp_dir2)
+
+# Ask the storage backend to store a file with a mixed case filename
+>>> mixed_case = 'CaSe_SeNsItIvE'
+>>> file = temp_storage2.open(mixed_case, 'w')
+>>> file.write('storage contents')
+>>> file.close()
+>>> os.path.join(temp_dir2, mixed_case) == temp_storage2.path(mixed_case)
+True
+>>> temp_storage2.delete(mixed_case)
+
 # Custom storage systems can be created to customize behavior
 
 >>> class CustomStorage(FileSystemStorage):
@@ -70,8 +91,9 @@
 >>> custom_storage.delete(first)
 >>> custom_storage.delete(second)
 
-# Cleanup the temp dir
+# Cleanup the temp dirs
 >>> os.rmdir(temp_dir)
+>>> os.rmdir(temp_dir2)
 
 
 # Regression test for #8156: files with unicode names I can't quite figure out the
diff --git a/tests/regressiontests/file_uploads/tests.py b/tests/regressiontests/file_uploads/tests.py
--- a/tests/regressiontests/file_uploads/tests.py
+++ b/tests/regressiontests/file_uploads/tests.py
@@ -1,4 +1,5 @@
 import os
+import os.path
 import errno
 import shutil
 import unittest
@@ -229,6 +230,33 @@
             # CustomUploadError is the error that should have been raised
             self.assertEqual(err.__class__, uploadhandler.CustomUploadError)
 
+    def test_filename_case_preservation(self):
+        """
+        The storage backend shouldn't mess with the case of the filenames
+        uploaded.
+        """
+        # Synthetize the contents of a file upload with a mixed
+        # case filename so we don't have to carry such a file
+        # with the Django tests
+        OUR_BOUNDARY='oUrBoUnDaRyStRiNg'
+        post_data = [
+                '--%s' % OUR_BOUNDARY,
+                'Content-Disposition: form-data; name="file_field"; filename="MiXeD_cAsE.txt"',
+                'Content-Type: application/octet-stream',
+                '',
+                'file contents\n'
+                '',
+                '--%s--\r\n' % OUR_BOUNDARY,
+                ]
+        response = self.client.post('/file_uploads/filename_case/', '\r\n'.join(post_data),
+                'multipart/form-data; boundary=%s' % OUR_BOUNDARY)
+        self.assertEqual(response.status_code, 200)
+        id = int(response.content)
+        obj = FileModel.objects.get(pk=id)
+        # The name of the file uploaded and the file stored in the server-side
+        # shouldn't differ
+        self.assertEqual(os.path.basename(obj.testfile.path), 'MiXeD_cAsE.txt')
+
 class DirectoryCreationTests(unittest.TestCase):
     """
     Tests for error handling during directory creation
diff --git a/tests/regressiontests/file_uploads/urls.py b/tests/regressiontests/file_uploads/urls.py
--- a/tests/regressiontests/file_uploads/urls.py
+++ b/tests/regressiontests/file_uploads/urls.py
@@ -9,4 +9,5 @@
     (r'^quota/broken/$',    views.file_upload_quota_broken),
     (r'^getlist_count/$',   views.file_upload_getlist_count),
     (r'^upload_errors/$',   views.file_upload_errors),
+    (r'^filename_case/$',   views.file_upload_filename_case_view),
 )
diff --git a/tests/regressiontests/file_uploads/views.py b/tests/regressiontests/file_uploads/views.py
--- a/tests/regressiontests/file_uploads/views.py
+++ b/tests/regressiontests/file_uploads/views.py
@@ -88,3 +88,12 @@
 def file_upload_errors(request):
     request.upload_handlers.insert(0, ErroringUploadHandler())
     return file_upload_echo(request)
+
+def file_upload_filename_case_view(request):
+    # Adding the file to the database should succeed
+    file = request.FILES['file_field']
+    obj = FileModel()
+    obj.testfile.save(file.name, file)
+
+    return HttpResponse('%d' % obj.pk)
+
