diff --git a/django/website/data_layer/models.py b/django/website/data_layer/models.py
index 68779919e4345a5b6d7873d8fe6466a746181001..3970173f99762c40bfa29d193dfdcaa5b540f9fa 100644
--- a/django/website/data_layer/models.py
+++ b/django/website/data_layer/models.py
@@ -13,7 +13,7 @@ class DataLayerModel(models.Model):
         abstract = True
 
     def note_external_modification(self):
-        self.last_modified = timezone.now()
+        # This will set the last_modified field
         self.save()
 
 
@@ -55,5 +55,6 @@ Item = Message
 @receiver(models.signals.m2m_changed, sender=Item.terms.through,
           dispatch_uid="data_layer.models.terms_signal_handler")
 def terms_signal_handler(sender, **kwargs):
-    instance = kwargs.get('instance')
-    instance.note_external_modification()
+    if kwargs.get('action') == 'post_add':
+        instance = kwargs.get('instance')
+        instance.note_external_modification()
diff --git a/django/website/data_layer/tests/item_tests.py b/django/website/data_layer/tests/item_tests.py
index 90ab4d95704b24deb4a866ee62519aafe63bddf6..665588e20f544151bf81277ccc492aa9fb5e93f6 100644
--- a/django/website/data_layer/tests/item_tests.py
+++ b/django/website/data_layer/tests/item_tests.py
@@ -17,13 +17,23 @@ def last_modified(item):
 # Ensure value of "now" always increases by amount sufficient
 # to show up as a change, even if db resolution for datetime
 # is one second.
+def time_granularity():
+    return datetime.timedelta(hours=1)
+
+
 def now_iter(start):
     t = start
     while True:
-        t += datetime.timedelta(hours=1)
+        t += time_granularity()
         yield t
 
 
+def num_updates(old_time, new_time):
+    elapsed_time = new_time - old_time
+
+    return elapsed_time.seconds / time_granularity().seconds
+
+
 @pytest.mark.django_db
 def test_last_modified_date_updates_on_body_change():
     item = ItemFactory()
@@ -35,7 +45,7 @@ def test_last_modified_date_updates_on_body_change():
         item.body = 'replacement text'
         item.save()
 
-        assert orig_last_modified < last_modified(item)
+        assert num_updates(orig_last_modified,  last_modified(item)) == 1
 
 
 @pytest.mark.django_db
@@ -49,4 +59,4 @@ def test_last_modified_date_updates_on_category_change():
         term = TermFactory()
         item.terms.add(term)
 
-        assert orig_last_modified < last_modified(item)
+        assert num_updates(orig_last_modified,  last_modified(item)) == 1