diff --git a/reviewboard/diffviewer/evolutions/__init__.py b/reviewboard/diffviewer/evolutions/__init__.py
index 0dacf1273ced973072289971991037d68c8d803c..b9b03f54c136e4c77f29077daa293cfe31fe477d 100644
--- a/reviewboard/diffviewer/evolutions/__init__.py
+++ b/reviewboard/diffviewer/evolutions/__init__.py
@@ -4,4 +4,5 @@ SEQUENCE = [
     'diffset_basedir',
     'filediff_status',
     'add_diff_hash',
+    'diffsethistory_diff_updated'
 ]
diff --git a/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py b/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py
new file mode 100644
index 0000000000000000000000000000000000000000..4e3c7d10cb9f06ee686b5d320a1f06d217c33329
--- /dev/null
+++ b/reviewboard/diffviewer/evolutions/diffsethistory_diff_updated.py
@@ -0,0 +1,17 @@
+from django_evolution.mutations import AddField, SQLMutation
+from django.db import models
+
+MUTATIONS = [
+    AddField('DiffSetHistory', 'last_diff_updated',
+             models.DateTimeField, null=True),
+    SQLMutation('populate_last_diff_updated',
+                ["""UPDATE diffviewer_diffsethistory
+                    SET last_diff_updated = (
+                    SELECT diffviewer_diffset.timestamp
+                    FROM diffviewer_diffset
+                    WHERE diffviewer_diffset.history_id =
+                    diffviewer_diffsethistory.id
+                    ORDER BY diffviewer_diffset.timestamp DESC
+                    LIMIT 1)
+                """])
+    ]
diff --git a/reviewboard/diffviewer/models.py b/reviewboard/diffviewer/models.py
index 6e9b43b72febd172b11e909e22cbcbe5699e77d7..e426c8892c0566bd54c053a905a54e15b4a2666e 100644
--- a/reviewboard/diffviewer/models.py
+++ b/reviewboard/diffviewer/models.py
@@ -149,6 +149,9 @@ class DiffSet(models.Model):
             else:
                 self.revision = self.history.diffsets.latest().revision + 1
 
+        if self.history:
+            self.history.last_diff_updated = self.timestamp
+            self.history.save()
         super(DiffSet, self).save()
 
     def __unicode__(self):
@@ -168,6 +171,8 @@ class DiffSetHistory(models.Model):
     """
     name = models.CharField(_('name'), max_length=256)
     timestamp = models.DateTimeField(_("timestamp"), default=timezone.now)
+    last_diff_updated = models.DateTimeField(_("last updated"), blank=True,
+            null=True, default=None)
 
     def __unicode__(self):
         return u'Diff Set History (%s revisions)' % self.diffsets.count()
diff --git a/reviewboard/reviews/datagrids.py b/reviewboard/reviews/datagrids.py
index aaca417f27724a255356372b586aed04b7547a49..ab335ec237d3e1341131f29b1bcdb0e1d3491e72 100644
--- a/reviewboard/reviews/datagrids.py
+++ b/reviewboard/reviews/datagrids.py
@@ -1,6 +1,5 @@
 import pytz
 
-from django.conf import settings
 from django.contrib.auth.models import User
 from django.contrib.staticfiles.templatetags.staticfiles import static
 from django.http import Http404
@@ -341,7 +340,7 @@ class PeopleColumn(Column):
 
     def render_data(self, review_request):
         people = review_request.target_people.all()
-        return reduce(lambda a,d: a+d.username+' ', people, '')
+        return reduce(lambda a, d: a + d.username + ' ', people, '')
 
 
 class GroupsColumn(Column):
@@ -354,7 +353,7 @@ class GroupsColumn(Column):
 
     def render_data(self, review_request):
         groups = review_request.target_groups.all()
-        return reduce(lambda a,d: a+d.name+' ', groups, '')
+        return reduce(lambda a, d: a + d.name + ' ', groups, '')
 
 
 class GroupMemberCountColumn(Column):
@@ -407,6 +406,47 @@ class ReviewCountColumn(Column):
         return "%s#last-review" % review_request.get_absolute_url()
 
 
+class DiffUpdatedColumn(DateTimeColumn):
+    """
+    A column indicating the date and time the diff was last updated.
+    """
+    def __init__(self, *args, **kwargs):
+        DateTimeColumn.__init__(self, _("Diff Updated"),
+        db_field="diffset_history__last_diff_updated",
+        field_name='last_diff_updated', sortable=True, link=False,
+        *args, **kwargs)
+
+    def augment_queryset(self, queryset):
+        return queryset.select_related('diffset_history')
+
+    def render_data(self, obj):
+        if obj.diffset_history.last_diff_updated:
+            return DateTimeColumn.render_data(self, obj.diffset_history)
+        else:
+            return ""
+
+
+class DiffUpdatedSinceColumn(DateTimeSinceColumn):
+    """
+    A column indicating the elapsed time since the diff was last
+    updated.
+    """
+    def __init__(self, *args, **kwargs):
+        DateTimeSinceColumn.__init__(self, _("Diff Updated"),
+        db_field="diffset_history__last_diff_updated",
+        field_name='last_diff_updated', sortable=True, link=False,
+        *args, **kwargs)
+
+    def augment_queryset(self, queryset):
+        return queryset.select_related('diffset_history')
+
+    def render_data(self, obj):
+        if obj.diffset_history.last_diff_updated:
+            return DateTimeSinceColumn.render_data(self, obj.diffset_history)
+        else:
+            return ""
+
+
 class ReviewRequestDataGrid(DataGrid):
     """
     A datagrid that displays a list of review requests.
@@ -433,11 +473,8 @@ class ReviewRequestDataGrid(DataGrid):
         db_field="last_updated",
         field_name="last_updated",
         css_class=lambda r: ageid(r.last_updated))
-    diff_updated = DateTimeColumn(_("Diff Updated"),
-        format="F jS, Y, P", shrink=True,
-        field_name="last_updated",
-        css_class=lambda r: ageid(r.last_updated))
-
+    diff_updated = DiffUpdatedColumn(format="F jS, Y, P", shrink=True,
+        css_class=lambda r: ageid(r.diffset_history.last_diff_updated))
     time_added_since = DateTimeSinceColumn(_("Posted"),
         detailed_label=_("Posted Time (Relative)"),
         field_name="time_added", shrink=True,
@@ -447,10 +484,9 @@ class ReviewRequestDataGrid(DataGrid):
         db_field="last_updated",
         field_name="last_updated",
         css_class=lambda r: ageid(r.last_updated))
-    diff_updated_since = DateTimeSinceColumn(_("Diff Updated"),
-        detailed_label=_("Diff Updated (Relative)"),
-        field_name="last_updated", shrink=True,
-        css_class=lambda r: ageid(r.last_updated))
+    diff_updated_since = DiffUpdatedSinceColumn(
+        detailed_label=_("Diff Updated (Relative)"), shrink=True,
+        css_class=lambda r: ageid(r.diffset_history.last_diff_updated))
 
     review_count = ReviewCountColumn()
 
@@ -592,7 +628,7 @@ class DashboardDataGrid(ReviewRequestDataGrid):
                 # group exists and show a 404 if it doesn't. Otherwise, we'll
                 # show an empty datagrid with the name.
                 if not Group.objects.filter(name=group,
-                                            local_site=self.local_site).exists():
+                    local_site=self.local_site).exists():
                     raise Http404
                 self.queryset = ReviewRequest.objects.to_group(
                     group, self.local_site, user)
