diff --git a/dsr_civicrm.module b/dsr_civicrm.module
index 8bdfc299c8fc5742b19ed0b361bce7c6f900cdd3..6a2ab2a95ce44e2c188a3512ed16671edb8ff246 100644
--- a/dsr_civicrm.module
+++ b/dsr_civicrm.module
@@ -407,6 +407,14 @@ function dsr_civicrm_civicrm_map_civi_data_to_shareholder($objectName, &$objectR
   dsr_civicrm_apply_shareholder_info_to_shareholder($shareholder_info, $shareholder);
 }
 
+function dsr_civicrm_save_new_shareholder_revision($shareholder, $log_message = NULL) {
+  $shareholder->setNewRevision(TRUE);
+  $shareholder->setRevisionLogMessage($log_message ?? 'Update from civicrm');
+  $shareholder->setRevisionCreationTime(REQUEST_TIME);
+  $shareholder->setRevisionUserId(\Drupal::currentUser()->id());
+  $shareholder->save();
+}
+
 /**
  * Implements hook_civicrm_post().
  */
@@ -436,8 +444,8 @@ function dsr_civicrm_civicrm_post($op, $objectName, $objectId, &$objectRef) {
       }
 
       dsr_civicrm_civicrm_map_civi_data_to_shareholder($objectName, $objectRef, $shareholder);
+      dsr_civicrm_save_new_shareholder_revision($shareholder, "Update $objectName $objectId from civicrm");
 
-      $shareholder->save();
       $lock->release($lockname);
     }
   }
@@ -478,7 +486,7 @@ function dsr_civicrm_civicrm_custom($op, $groupId, $entityId, &$params ) {
         return;
       }
       dsr_civicrm_apply_shareholder_info_to_shareholder($shareholder_info, $shareholder);
-      $shareholder->save();
+      dsr_civicrm_save_new_shareholder_revision($shareholder);
       $lock->release($lockname);
     }
   }