diff --git a/i18n_sync/i18n_sync.module b/i18n_sync/i18n_sync.module
index 908159e..5c2414a 100644
--- a/i18n_sync/i18n_sync.module
+++ b/i18n_sync/i18n_sync.module
@@ -185,7 +185,17 @@ function i18n_sync_node_delete_prepare($nid) {
  * Check whether this node is to be synced
  */
 function i18n_sync_node_check($node) {
-  return translation_supported_type($node->type) && i18n_object_langcode($node) && i18n_sync();
+  // We do not wish to update the same node twice in a given save, so we
+  // maintain an in memory list of nodes that have passed the access check
+  // below.
+  static $nids = array();
+  if (in_array($node->nid, $nids)) {
+    return FALSE;
+  }
+  else {
+    $nids[] = $node->nid;
+    return translation_supported_type($node->type) && i18n_object_langcode($node) && i18n_sync();
+  }
 }
 
 /**
