--- ../../orig.modules/salesforce_account/salesforce_sync_api.inc	2007-11-20 12:51:57.000000000 -0800
+++ salesforce_sync_api.inc	2008-02-04 16:43:34.000000000 -0800
@@ -15,10 +15,30 @@
  */
 
 /**
- * Truncate field names at 26 characters
+ * Creates a field name at 26 characters and do not duplicate any existing field names
+ * 
+ * @param $field_name The full field name in Salesforce Object
+ * @param $sf_type The Salesforce Object type
+ * @param $node_type The Drupal node type
  */
-function _salesforce_sync_truncate_field_name( $field_name ) {
-	return substr($field_name, 0, 26);
+function _salesforce_sync_make_field_name( $field_name, $sf_type, $node_type ) {
+  $fields = content_fields();
+  $type   = content_types($node_type);
+  
+  $field_name = trim($field_name);
+  $field_name = str_replace(array(' ', '-'), '_', $field_name);
+  $field_name = preg_replace('/[^a-z0-9_]/', '', $field_name);
+  $field_name = 'field_'. $sf_type .'_'. $field_name;
+  $field_name = drupal_strtolower($field_name);
+  $field_name = substr($field_name, 0, 31);
+  if (isset($fields[$field_name])) {
+    $counter = 0;
+    do {
+      $new_name = substr($field_name, 0, 29) .'_'. $counter++;
+    }   while (isset($fields[$new_name]));
+    $field_name = $new_name;
+  }
+  return $field_name;
 }
 
 
@@ -27,7 +47,7 @@ function _salesforce_sync_truncate_field
  *
  * @param $field_info = (array) Array containing information about this field from Salesforce
  *  	describeObject method.
- * @param $prefix = (string) Prefix for all newly create field names.
+ * @param $type = (string) The salesforce object type
  * @param $node_type = (string) Machine readable name of the node type that fields should be added to
  * @param $params = (array) Additional paramters for new fields.
  *		'field_widget_type' => the CCK widget/field type to use
@@ -45,18 +65,18 @@ function _salesforce_sync_truncate_field
  * Most of the code for this function is taken directly from  the content_copy.module included with
  * content.module http://drupal.org/project/content
  */
-function _salesforce_sync_make_field ( $field_info, $prefix, $node_type, $params )
+function _salesforce_sync_make_field ( $field_info, $type, $node_type, $params )
 {
 
 	global $field_prefix;
 
 	$values = array(
-		'field_name' 				=> _salesforce_sync_truncate_field_name($prefix . strtolower($field_info['name'])),
+		'field_name' 				=> _salesforce_sync_make_field_name(strtolower($field_info['name']), $type, $node_type),
 		'label' 						=> $field_info['label'],
 		'field_widget_type' => $params['field_widget_type'],
 		'type_name' 				=> $node_type
 		);
-	
+    
 	$values2 = array(
 		'type_name' 				=> $node_type,
 		'widget_type' 			=> $params['widget_type'],
@@ -218,8 +238,7 @@ function _salesforce_sync_import_object_
 				$skipped++;
 			} else {
 				// Call the appropriate make field function with approriate arguments
-				$prefix = 'field_'.strtolower($type).'_';
-				$field_name = _salesforce_sync_make_field($field_info, $prefix, $node_type, $field_type_params[$field_info['type']]);
+				$field_name = _salesforce_sync_make_field($field_info, $type, $node_type, $field_type_params[$field_info['type']]);
 				db_query('INSERT INTO {salesforce_field_map} (salesforce_name,drupal_name,node_type) VALUES ("%s", "%s", "%s")', $field_info['name'], $field_name, $node_type);
 				$inserted++;
 			}
