diff -urp cck-old/nodereference.install cck/nodereference.install
--- cck-old/nodereference.install	2007-01-25 09:23:26.000000000 -0800
+++ cck/nodereference.install	2008-08-22 08:05:51.000000000 -0700
@@ -90,3 +90,30 @@ function nodereference_update_3() {
   db_query('DELETE FROM {cache}');
   return $ret;
 }
+
+/**
+ * Add title column per-field tables.
+ */
+function nodereference_update_4() {
+  $ret = array();
+
+  include_once('./'. drupal_get_path('module', 'content') .'/content.module');
+  include_once('./'. drupal_get_path('module', 'content') .'/content_admin.inc');
+
+  content_clear_type_cache();
+  $fields = content_fields();
+
+  foreach ($fields as $field) {
+    switch ($field['type']) {
+      case 'nodereference':
+        $columns = array(
+          'title' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'default' => "''", 'sortable' => true),
+        );
+        @content_alter_db_field(array(), array(), $field, $columns);
+        break;
+    }
+  }
+
+  db_query('DELETE FROM {cache}');
+  return $ret;
+}
diff -urp cck-old/nodereference.module cck/nodereference.module
--- cck-old/nodereference.module	2008-04-28 16:50:29.000000000 -0700
+++ cck/nodereference.module	2008-08-22 07:51:36.000000000 -0700
@@ -91,6 +91,7 @@ function nodereference_field_settings($o
     case 'database columns':
       $columns = array(
         'nid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
+        'title' => array('type' => 'varchar', 'length' => 255, 'not null' => true, 'default' => "''", 'sortable' => true),
       );
       return $columns;
 
@@ -180,13 +181,23 @@ function nodereference_field_formatter($
     elseif ($referenced_node = node_load($item['nid'])) {
       $referenced_node->referencing_node = $node;
       $referenced_node->referencing_field = $field;
-      $titles[$item['nid']] = $referenced_node->title;
+      if($item['title'] != '') {
+        $titles[$item['nid']] = $item['title'];
+      }
+      else {
+        $titles[$item['nid']] = $referenced_node->title;
+      }
     }
   }
 
   if (!isset($titles[$item['nid']])) {
-    $title = db_result(db_query("SELECT title FROM {node} WHERE nid=%d", $item['nid']));
-    $titles[$item['nid']] = $title ? $title : '';
+    if($item['title'] != '') {
+      $titles[$item['nid']] = $item['title'];
+    }
+    else {
+      $title = db_result(db_query("SELECT title FROM {node} WHERE nid=%d", $item['nid']));
+      $titles[$item['nid']] = $title ? $title : '';
+    }
   }
 
   switch ($formatter) {
@@ -271,6 +282,7 @@ function nodereference_widget($op, &$nod
         }
         else {
           $items[0]['nid'] = $items['nids'];
+          $items[0]['title'] = '';
         }
         // Remove the widget's data representation so it isn't saved.
         unset($items['nids']);
@@ -284,7 +296,12 @@ function nodereference_widget($op, &$nod
       case 'prepare form values':
         foreach ($items as $delta => $item) {
           if (!empty($items[$delta]['nid'])) {
-            $items[$delta]['default node_name'] = db_result(db_query(db_rewrite_sql('SELECT n.title FROM {node} n WHERE n.nid = %d'), $items[$delta]['nid']));
+            if(!empty($items[$delta]['title'])) {
+              $items[$delta]['default node_name'] = $items[$delta]['title'];
+            }
+            else {
+              $items[$delta]['default node_name'] = db_result(db_query(db_rewrite_sql('SELECT n.title FROM {node} n WHERE n.nid = %d'), $items[$delta]['nid']));
+            }
             $items[$delta]['default node_name'] .= ' [nid:'. $items[$delta]['nid'] .']';
           }
         }
@@ -341,7 +358,7 @@ function nodereference_widget($op, &$nod
               // explicit nid
               list(, $title, $nid) = $matches;
               if (!empty($title) && ($n = node_load($nid)) && $title != $n->title) {
-                form_set_error($error_field, t('%name : Title mismatch. Please check your selection.'), array('%name' => t($field['widget']['label'])));
+                // form_set_error($error_field, t('%name : Title mismatch. Please check your selection.'), array('%name' => t($field['widget']['label'])));
               }
             }
           }
@@ -356,6 +373,7 @@ function nodereference_widget($op, &$nod
             if (!empty($matches)) {
               // explicit nid
               $nid = $matches[2];
+              $title = $matches[1];
             }
             else {
               // no explicit nid
@@ -371,6 +389,7 @@ function nodereference_widget($op, &$nod
           unset($items[$delta]['node_name']);
           if (!empty($nid)) {
             $items[$delta]['nid'] = $nid;
+            $items[$delta]['title'] = $title;
             $items[$delta]['error_field'] = $field['field_name'] .']['. $delta .'][node_name';
           }
           elseif ($delta > 0) {
