diff --git a/reviewboard/diffviewer/forms.py b/reviewboard/diffviewer/forms.py
index e3f5fa3796a10e18c1123d5cd139ca26957191dd..7d1f6e9b1e6b2e959c8ebfbcb118a601adeef0e1 100644
--- a/reviewboard/diffviewer/forms.py
+++ b/reviewboard/diffviewer/forms.py
@@ -99,10 +99,13 @@ class UploadDiffForm(forms.Form):
         parent_changeset_id = None
 
         if parent_diff_file:
+            diff_filenames = set([f.origFile for f in files])
+
             # If the user supplied a base diff, we need to parse it and
             # later apply each of the files that are in the main diff
             for f in self._process_files(parent_diff_file, basedir,
-                                         check_existance=True):
+                                         check_existance=True,
+                                         limit_to=diff_filenames):
                 parent_files[f.origFile] = f
 
                 # Store the original changeset ID if we have it; this should
@@ -154,7 +157,8 @@ class UploadDiffForm(forms.Form):
 
         return diffset
 
-    def _process_files(self, file, basedir, check_existance=False):
+    def _process_files(self, file, basedir, check_existance=False,
+                       limit_to=None):
         tool = self.repository.get_scmtool()
 
         for f in tool.get_parser(file.read()).parse():
@@ -166,6 +170,11 @@ class UploadDiffForm(forms.Form):
             else:
                 filename = os.path.join(basedir, f2).replace("\\", "/")
 
+            if limit_to is not None and filename not in limit_to:
+                # This file isn't actually needed for the diff, so save
+                # ourselves a remote file existence check and some storage.
+                continue
+
             # FIXME: this would be a good place to find permissions errors
             if (revision != PRE_CREATION and
                 revision != UNKNOWN and
diff --git a/reviewboard/diffviewer/tests.py b/reviewboard/diffviewer/tests.py
index eb44c91c4a6b22887c4449aab167c04305790e9a..c24160a737fd63c582677a2d38fbd8fc668f3520 100644
--- a/reviewboard/diffviewer/tests.py
+++ b/reviewboard/diffviewer/tests.py
@@ -1,14 +1,16 @@
 import os
 import unittest
 
+from django.core.files.uploadedfile import SimpleUploadedFile
 from django.test import TestCase
 from djblets.siteconfig.models import SiteConfiguration
 
+from reviewboard.diffviewer.forms import UploadDiffForm
 from reviewboard.diffviewer.models import DiffSet, FileDiff
 from reviewboard.diffviewer.templatetags.difftags import highlightregion
 import reviewboard.diffviewer.diffutils as diffutils
 import reviewboard.diffviewer.parser as diffparser
-from reviewboard.scmtools.models import Repository
+from reviewboard.scmtools.models import Repository, Tool
 
 
 class MyersDifferTest(TestCase):
@@ -448,3 +450,86 @@ class DbTests(TestCase):
         filediff2.save()
 
         self.assertEquals(filediff1.diff_hash, filediff2.diff_hash)
+
+
+class UploadDiffFormTests(TestCase):
+    """Unit tests for UploadDiffForm."""
+    fixtures = ['test_scmtools']
+
+    def test_parent_diff_filtering(self):
+        """Testing UploadDiffForm and filtering parent diff files"""
+        saw_file_exists = {}
+
+        def get_file_exists(filename, revision):
+            saw_file_exists[(filename, revision)] = True
+            return True
+
+        diff = (
+            'Index: README\n'
+            '==========================================================='
+            '========\n'
+            '--- README  (revision 124)\n'
+            '+++ README  (new)\n'
+            '@ -1,1 +1,1 @@\n'
+            '-blah blah\n'
+            '+blah!\n'
+        )
+        parent_diff_1 = (
+            'Index: README\n'
+            '==========================================================='
+            '========\n'
+            '--- README  (revision 123)\n'
+            '+++ README  (new)\n'
+            '@ -1,1 +1,1 @@\n'
+            '-blah..\n'
+            '+blah blah\n'
+        )
+        parent_diff_2 = (
+            'Index: UNUSED\n'
+            '==========================================================='
+            '========\n'
+            '--- UNUSED  (revision 123)\n'
+            '+++ UNUSED  (new)\n'
+            '@ -1,1 +1,1 @@\n'
+            '-foo\n'
+            '+bar\n'
+        )
+        parent_diff = parent_diff_1 + parent_diff_2
+
+        diff_file = SimpleUploadedFile('diff', diff,
+                                       content_type='text/x-patch')
+        parent_diff_file = SimpleUploadedFile('parent_diff', parent_diff,
+                                              content_type='text/x-patch')
+
+        # Note that we're using SVN here for the test just because it's
+        # a bit easier to test with than Git (easier diff parsing logic
+        # and revision numbers).
+        repository = Repository.objects.create(
+            name='Subversion SVN',
+            path='file://%s' % (os.path.join(os.path.dirname(__file__),
+                                             '..', 'scmtools', 'testdata',
+                                             'svn_repo')),
+            tool=Tool.objects.get(name='Subversion'))
+        repository.get_file_exists = get_file_exists
+
+        form = UploadDiffForm(
+            repository=repository,
+            data={
+                'basedir': '/',
+            },
+            files={
+                'path': diff_file,
+                'parent_diff_path': parent_diff_file,
+            })
+        self.assertTrue(form.is_valid())
+
+        diffset = form.create(diff_file, parent_diff_file)
+        self.assertEqual(diffset.files.count(), 1)
+
+        filediff = diffset.files.get()
+        self.assertEqual(filediff.diff, diff)
+        self.assertEqual(filediff.parent_diff, parent_diff_1)
+
+        self.assertTrue(('/README', '123') in saw_file_exists)
+        self.assertFalse(('/UNUSED', '123') in saw_file_exists)
+        self.assertEqual(len(saw_file_exists), 1)
