Index: sf_node/sf_node.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_node/sf_node.module,v
retrieving revision 1.2.2.12
diff -u -p -r1.2.2.12 sf_node.module
--- sf_node/sf_node.module	31 Aug 2009 15:00:22 -0000	1.2.2.12
+++ sf_node/sf_node.module	3 Feb 2010 15:14:08 -0000
@@ -55,14 +55,22 @@ function sf_node_nodeapi(&$node, $op, $a
       $node->salesforce = salesforce_api_id_load('node', $node->nid);
       break;
     case 'insert':
+    case 'update':
       // When importing *from* Salesforce, don't export *back* to Salesforce.
       if (isset($node->sf_node_skip_export)) {
-        return;
+        break;
+      }
+      if ($node->nid) {
+        $salesforce = salesforce_api_id_load('node', $node->nid);
+        if ($salesforce['fieldmap'] && $salesforce['sfid']) {
+          sf_node_export($node, $salesforce['fieldmap'], $salesforce['sfid']);
+          break;
+        }
       }
       // Detect whether or not this should be an auto-update for this node
       $options = salesforce_api_fieldmap_options('node_'. $node->type, NULL, TRUE);
       if (empty($options)) {
-        return;
+        break;
       }
       if (count($options) > 0) {
         $map = key($options);
@@ -72,16 +80,6 @@ function sf_node_nodeapi(&$node, $op, $a
       }
       sf_node_export($node, $map);
       break;
-    case 'update':
-      // When importing *from* Salesforce, don't export *back* to Salesforce.
-      if (isset($node->sf_node_skip_export)) {
-        return;
-      }
-      $salesforce = salesforce_api_id_load('node', $node->nid);
-      if ($salesforce['fieldmap'] && $salesforce['sfid']) {
-        sf_node_export($node, $salesforce['fieldmap'], $salesforce['sfid']);
-      }
-      break;
   }
 }
 
Index: sf_user/sf_user.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/salesforce/sf_user/sf_user.module,v
retrieving revision 1.2.2.6
diff -u -p -r1.2.2.6 sf_user.module
--- sf_user/sf_user.module	31 Aug 2009 15:00:22 -0000	1.2.2.6
+++ sf_user/sf_user.module	3 Feb 2010 15:14:08 -0000
@@ -53,6 +53,36 @@ function sf_user_user($op, &$edit, &$acc
     case 'load':
       $account->salesforce = salesforce_api_id_load('user', $account->uid);
       break;
+
+    case 'delete':
+      db_query('DELETE FROM {salesforce_ids} WHERE drupal_type = "user" AND drupal_id = %d', $account->uid);
+      break;
+
+    case 'insert':
+    case 'update':
+      // When importing *from* Salesforce, don't export *back* to Salesforce.
+      if (isset($account->sf_user_skip_export) || isset($edit['sf_user_skip_export'])) {
+        break;
+      }
+      if ($account->uid) {
+        $salesforce = salesforce_api_id_load('user', $account->uid);
+        if ($salesforce['fieldmap'] && $salesforce['sfid']) {
+          sf_user_export($account->uid, $salesforce['fieldmap'], $salesforce['sfid']);
+        }
+      }      
+      // Detect whether or not this should be an auto-update for this node
+      $options = salesforce_api_fieldmap_options('user', NULL, TRUE);
+      if (empty($options)) { 
+        break;
+      }
+      if (count($options) > 0) {
+        $map = key($options);
+      }
+      elseif (count($options) > 1 && user_access('administer salesforce')) {
+        drupal_set_message(t('Warning: more than one "automatic" salesforce mapping detected. Used @map.', array('@map' => $map[$key])), 'error');
+      }
+      sf_user_export($account->uid, $map);
+     break;
   }
 }
 
@@ -426,7 +456,12 @@ function sf_user_import($sfid, $fieldmap
     }
 
     //drupal_set_message('<pre>'. print_r($changes, TRUE) .'</pre>');
-    user_save($account, $changes);
+    // We don't want to trigger an export while we're running import.
+    // sf_user_skip_export is a flag to tell hook_user not to export this object.
+    $account->sf_user_skip_export = TRUE;
+    $changes['sf_user_skip_export'] = TRUE;
+    $account = user_save($account, $changes);
+    unset($account->sf_user_skip_export);
   }
 
   return $account->uid;
