diff --git a/smash/web/redcap_connector.py b/smash/web/redcap_connector.py
index 6f12fea531b8af6f3e1bb853c2287ec8509e3e24..01ada9e9c12d07b945679485dbcd6aa6dc870d7e 100644
--- a/smash/web/redcap_connector.py
+++ b/smash/web/redcap_connector.py
@@ -218,40 +218,41 @@ class RedcapConnector(object):
                                 smasch_appointment.visit.is_finished = True
                                 smasch_appointment.visit.save()
                         if visit.virus is not None or visit.virus_inconclusive:
+                            changes = None
                             if visit.visit_number == 1 and subject.virus_test_1 != visit.virus:
-                                subject.virus_test_1 = visit.virus
-                                subject.virus_test_1_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_1', visit.virus), ('virus_test_1_updated', datetime.datetime.now())]
                             if visit.visit_number == 2 and subject.virus_test_2 != visit.virus:
-                                subject.virus_test_2 = visit.virus
-                                subject.virus_test_2_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_2', visit.virus), ('virus_test_2_updated', datetime.datetime.now())]
                             if visit.visit_number == 3 and subject.virus_test_3 != visit.virus:
-                                subject.virus_test_3 = visit.virus
-                                subject.virus_test_3_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_3', visit.virus), ('virus_test_3_updated', datetime.datetime.now())]
                             if visit.visit_number == 4 and subject.virus_test_4 != visit.virus:
-                                subject.virus_test_4 = visit.virus
-                                subject.virus_test_4_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_4', visit.virus), ('virus_test_4_updated', datetime.datetime.now())]
                             if visit.visit_number == 5 and subject.virus_test_5 != visit.virus:
-                                subject.virus_test_5 = visit.virus
-                                subject.virus_test_5_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_5', visit.virus), ('virus_test_5_updated', datetime.datetime.now())]
                             if visit.visit_number == 1 and subject.virus_test_1_updated is None and visit.virus_inconclusive:
-                                subject.virus_test_1_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_1_updated', datetime.datetime.now())]
                             if visit.visit_number == 2 and subject.virus_test_2_updated is None and visit.virus_inconclusive:
-                                subject.virus_test_2_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_2_updated', datetime.datetime.now())]
                             if visit.visit_number == 3 and subject.virus_test_3_updated is None and visit.virus_inconclusive:
-                                subject.virus_test_3_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_3_updated', datetime.datetime.now())]
                             if visit.visit_number == 4 and subject.virus_test_4_updated is None and visit.virus_inconclusive:
-                                subject.virus_test_4_updated = datetime.datetime.now()
-                                subject.save()
+                                changes = [('virus_test_4_updated', datetime.datetime.now())]
                             if visit.visit_number == 5 and subject.virus_test_5_updated is None and visit.virus_inconclusive:
-                                subject.virus_test_5_updated = datetime.datetime.now()
+                                changes = [('virus_test_5_updated', datetime.datetime.now())]
+                            #
+                            if changes is not None:
+                                for field, new_value in changes:
+                                    old_value = getattr(subject, field)
+                                    description = u'{} changed from "{}" to "{}"'.format(field, old_value, new_value)
+                                    p = Provenance(modified_table=StudySubject._meta.db_table,
+                                                modified_table_id=subject.id,
+                                                modification_author=self.importer_user,
+                                                previous_value=old_value,
+                                                new_value=new_value,
+                                                modification_description=description,
+                                                modified_field=field)
+                                    setattr(subject, field, new_value)
+                                    p.save()
                                 subject.save()
 
         return result