diff -upN mappers/nodereference.inc
--- mappers/nodereference.inc	1969-12-31 19:00:00.000000000 -0500
+++ mappers/nodereference.inc	2010-09-30 17:24:55.000000000 -0400
@@ -0,0 +1,101 @@
+<?php
+// $Id$
+
+/**
+ * @file
+ * Implementation of Feeds API for mapping nodereference.module fields (CCK).
+ */
+
+/**
+ * Implementation of hook_feeds_node_processor_targets_alter().
+ *
+ * @see FeedsNodeProcessor::getMappingTargets()
+ */
+function nodereference_feeds_node_processor_targets_alter(&$targets, $content_type) {
+  $info = content_types($content_type);
+  if (isset($info['fields']) && count($info['fields'])) {
+    foreach ($info['fields'] as $field_name => $field) {
+      if (in_array($field['type'], array('nodereference'))) {
+        $field_label = isset($field['widget']['label']) ? $field['widget']['label'] : $field_name;
+        $targets[$field_name . ':title'] = array(
+          'name' => $field_label . ' (Node reference by node title)',
+          'callback' => 'nodereference_feeds_set_target',
+          'description' => t('The CCK node reference !name of the node matched by node title.', array('!name' => $field_label)),
+          'real_target' => $field_name,
+        );
+        $targets[$field_name . ':nid'] = array(
+          'name' => $field_label . ' (Node reference by node ID)',
+          'callback' => 'nodereference_feeds_set_target',
+          'description' => t('The CCK node reference !name of the node matched by node ID.', array('!name' => $field_label)),
+          'real_target' => $field_name,
+        );
+      }
+    }
+  }
+}
+
+/**
+ * Implementation of hook_feeds_set_target().
+ *
+ * The actual field mapping happens in this callback function.
+ *
+ * @param obj $target_node
+ *   The node to to be created or updated.
+ * @param str $target_element
+ *   The name of the field on the node to be mapped.
+ * @param array $value
+ *   The value(s) of the source feed item element to be mapped.
+ */
+function nodereference_feeds_set_target($target_node, $target_element, $value) {
+  // Determine on which key to match the node reference.
+  list($target_element, $match_key) = split(':', $target_element);
+
+  // Load field definition.
+  $field_info = content_fields($target_element, $target_node->type);
+
+  // Store all values for this target element across different sources.
+  if (empty($target_node->feeds_nodereference_map->{$target_element}->values)) {
+    $target_node->feeds_nodereference_map->{$target_element}->values = array();
+  }
+  if (empty($target_node->feeds_nodereference_map->{$target_element}->nids)) {
+    $target_node->feeds_nodereference_map->{$target_element}->nids = array();
+  }
+
+  // Allow for multiple-value fields.
+  if (!is_array($value)) {
+    $value = array($value);
+  }
+
+  // Match values against nodes and add to field.
+  foreach ($value as $v) {
+    $nid = NULL;
+
+    switch ($match_key) {
+      case 'title':
+        // Validate title.
+        if ((is_string($v) && $v !== '') || is_numeric($v)) {
+          // Lookup potential exact matches for the value (limit to one result).
+          $matches = _nodereference_potential_references($field_info, $v, 'equals', array(), 1);
+          // Use the first element of the potential matches.
+          $nid = key($matches);
+        }
+        break;
+
+      case 'nid':
+        $nid = $v;
+        break;
+    }
+
+    if (isset($nid)) {
+      // Validate nid.
+      if (is_numeric($nid) && $nid > 0 && !isset($target_node->feeds_nodereference_map->{$target_element}->nids[$nid])) {
+        // Store so reference isn't added twice.
+        $target_node->feeds_nodereference_map->{$target_element}->nids[$nid] = TRUE;
+        // Add nodereference to field.
+        $target_node->feeds_nodereference_map->{$target_element}->values[] = array('nid' => $nid);
+      }
+    }
+  }
+
+  $target_node->{$target_element} = $target_node->feeds_nodereference_map->{$target_element}->values;
+}
