diff --git a/reviewboard/attachments/evolutions/__init__.py b/reviewboard/attachments/evolutions/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..a3d5e1271386dd274136ccb26188821f5f411683
--- /dev/null
+++ b/reviewboard/attachments/evolutions/__init__.py
@@ -0,0 +1,3 @@
+SEQUENCE = [
+    'add_binary_attachment',
+]
diff --git a/reviewboard/attachments/evolutions/add_binary_attachment.py b/reviewboard/attachments/evolutions/add_binary_attachment.py
new file mode 100644
index 0000000000000000000000000000000000000000..372b69cc2e7e5438e88c4b2d276b57cbbc236ca0
--- /dev/null
+++ b/reviewboard/attachments/evolutions/add_binary_attachment.py
@@ -0,0 +1,9 @@
+from django_evolution.mutations import *
+from django.db import models
+
+MUTATIONS = [
+    AddField('FileAttachment', 'diff_source_file', models.CharField,
+              max_length=1024, null=True),
+    AddField('FileAttachment', 'diff_source_revision', models.CharField,
+              max_length=512, null=True),
+]
diff --git a/reviewboard/attachments/models.py b/reviewboard/attachments/models.py
index 6def57d6c9ce0352cde149c107e9d1d89fc8e38c..9b275a882de40b433cd9fdb2f756e3d3ae934c16 100644
--- a/reviewboard/attachments/models.py
+++ b/reviewboard/attachments/models.py
@@ -21,6 +21,11 @@ class FileAttachment(models.Model):
                                                      '%Y', '%m', '%d'))
     mimetype = models.CharField(_('mimetype'), max_length=256, blank=True)
 
+    diff_source_file = models.CharField(_("source file"), max_length=1024,
+                                        blank=True, null=True)
+    diff_source_revision = models.CharField(_("source file revision"),
+                                        max_length=512, blank=True, null=True)
+
     @property
     def filename(self):
         """Returns the filename for display purposes."""
diff --git a/reviewboard/attachments/tests.py b/reviewboard/attachments/tests.py
index 4c0e62b0fea75b82ad28f11adc629752ce0207a2..3705a6069bed60acda991ceb4346265f25b7be43 100644
--- a/reviewboard/attachments/tests.py
+++ b/reviewboard/attachments/tests.py
@@ -31,3 +31,11 @@ class FileAttachmentTests(TestCase):
         self.assertEqual(os.path.basename(file_attachment.file.name),
                          'trophy.png')
         self.assertEqual(file_attachment.mimetype, 'image/png')
+
+    def test_binary_diff_attachment(self):
+        """Testing the database model for binary diff attachments."""
+        attachments = FileAttachment.objects.filter(diff_source_file="x.png",
+                          diff_source_revision="abcdef1234567890")
+        attachment = FileAttachment.objects.get(pk=1)
+
+        self.assertEqual(attachments.count(), 1)
\ No newline at end of file
diff --git a/reviewboard/diffviewer/views.py b/reviewboard/diffviewer/views.py
index 3e1edf6a9d5e8dacfdfb1952dd0efd7fd6429627..891e8c82ee693e3572a8e9cbf3f67ad8273536b3 100644
--- a/reviewboard/diffviewer/views.py
+++ b/reviewboard/diffviewer/views.py
@@ -12,6 +12,7 @@ from django.utils.translation import ugettext as _
 from djblets.siteconfig.models import SiteConfiguration
 from djblets.util.misc import cache_memoize, get_object_or_none
 
+from reviewboard.attachments.models import FileAttachment
 from reviewboard.diffviewer.models import DiffSet, FileDiff
 from reviewboard.diffviewer.diffutils import UserVisibleError, \
                                              get_diff_files, \
@@ -53,6 +54,14 @@ def build_diff_fragment(request, file, chunkindex, highlighting, collapseall,
 
     context['file'] = file
 
+    revision_prefix_count = 9
+
+    attachments = FileAttachment.objects.filter(
+                  diff_source_file=file['depot_filename'],
+                  diff_source_revision=file['revision'][revision_prefix_count:])
+
+    context['attachments'] = attachments
+
     return cache_memoize(key,
         lambda: render_to_string(template_name,
                                  RequestContext(request, context)))
@@ -208,6 +217,10 @@ def view_diff_fragment(
     interdiffset = get_object_or_none(DiffSet, pk=interdiffset_id)
     highlighting = get_enable_highlighting(request.user)
 
+    attachments = FileAttachment.objects.filter(
+                                diff_source_file=filediff.source_file,
+                                diff_source_revision=filediff.source_revision)
+
     if chunkindex:
         collapseall = False
     else:
@@ -220,6 +233,7 @@ def view_diff_fragment(
             context = {
                 'standalone': chunkindex is not None,
                 'base_url': base_url,
+                'attachments': attachments,
             }
 
             return HttpResponse(build_diff_fragment(request, file,
diff --git a/reviewboard/reviews/fixtures/test_reviewrequests.json b/reviewboard/reviews/fixtures/test_reviewrequests.json
index 1c77fd2f99c047ff0a933ea51ad495ea65cfc552..31c6f3373de2deb293afc42c461cbc2b1b4bd4d3 100644
--- a/reviewboard/reviews/fixtures/test_reviewrequests.json
+++ b/reviewboard/reviews/fixtures/test_reviewrequests.json
@@ -4,9 +4,11 @@
         "model": "attachments.fileattachment", 
         "fields": {
             "mimetype": "image/png", 
+            "diff_source_file": "x.png", 
+            "diff_source_revision": "abcdef1234567890", 
+            "draft_caption": "Test", 
             "caption": "Test", 
-            "file": "uploaded/files/2011/07/29/x.png", 
-            "draft_caption": "Test"
+            "file": "uploaded/files/2011/07/29/x.png"
         }
     }, 
     {
@@ -1015,7 +1017,7 @@
         "pk": 4, 
         "model": "reviews.reviewrequest", 
         "fields": {
-            "changedescs": [],
+            "changedescs": [], 
             "last_updated": "2007-06-24 01:11:24", 
             "target_people": [
                 2
@@ -1478,4 +1480,4 @@
             "reviewed_diffset": null
         }
     }
-]
+]
\ No newline at end of file
diff --git a/reviewboard/templates/diffviewer/diff_file_fragment.html b/reviewboard/templates/diffviewer/diff_file_fragment.html
index b2be6e7eb27f80d4b1fcb13ff9ffa523d21ec555..e59e9a5d29edf5ad0c476211ae16421074041368 100644
--- a/reviewboard/templates/diffviewer/diff_file_fragment.html
+++ b/reviewboard/templates/diffviewer/diff_file_fragment.html
@@ -35,7 +35,45 @@
   <tr>
    <td colspan="4">{% trans "This is a binary file. The content cannot be displayed." %}</td>
   </tr>
+  <tr>
+   <td colspan="4">
+    <div class="content clearfix"{% ifequal attachments.count 0 %}
+style="display: none;"{% endifequal %}>
+    <label for="file-list">{% trans "Attachments" %}:</label>
+    <div id="file-list">
+{% for attachment in attachments.all %}
+     <div class="file-container" data-file-id="{{attachment.id}}">
+      <div class="file">
+      <ul class="actions">
+       <li class="file-add-comment"><a href="#">{% trans "Add
+Comment"%}</a></li>
+      </ul>
+      <div class="file-header">
+       <a href="{{attachment.get_absolute_url}}">
+        <img src="{{attachment.icon_url}}" />
+        {{attachment.filename}}</a>
+{% ifuserorperm review_request.submitter "reviews.delete_file" %}
+       <a href="#" class="delete">
+        <img src="{{MEDIA_URL}}rb/images/delete.png?{{MEDIA_SERIAL}}" alt="{%
+trans "Delete File" %}" />
+       </a>
+{% endifuserorperm %}
+      </div>
+      <div class="file-caption">
+       <a href="{{attachment.get_absolute_url}}" class="edit">
+{% if draft %}{{attachment.draft_caption}}{% else
+%}{{attachment.caption}}{% endif %}</a>
+      </div>
+     </div>
+    </div>
+{% endfor %}
+     <br clear="both" />
+    </div>
+    </div>
+   </td>
+  </tr>
  </tbody>
+
 {%  else %}
 {%   if file.deleted %}
  <tbody class="deleted">
