--- nodereference.module.orig	2008-04-28 18:50:29.000000000 -0500
+++ nodereference.module	2008-05-18 03:39:37.000000000 -0500
@@ -111,6 +111,7 @@
  * Implementation of hook_field().
  */
 function nodereference_field($op, &$node, $field, &$items, $teaser, $page) {
+  $db_info = content_database_info($field);
   switch ($op) {
     case 'validate':
       $refs = _nodereference_potential_references($field, TRUE);
@@ -124,6 +125,67 @@
         }
       }
       return;
+
+    case 'load':
+      $additions = array();
+
+      $query = 'SELECT '. $field['field_name'] .'_nid AS nid FROM {'. $db_info['table'] .'} WHERE vid = %d';
+      if ($field['multiple']) {
+        $result = db_query($query .' ORDER BY delta', $node->vid);
+      }
+      else {
+        $result = db_query_range($query, $node->vid, 0, 1);
+      }
+      $nids="";
+      while ($value = db_fetch_array($result)) {
+        $additions[$field['field_name']][] = $value;
+	$nids.=$value['nid'].",";
+      }
+      $nids.="0";
+
+      $query = 'SELECT nid FROM {'. $db_info['table'] .'} WHERE '. $field['field_name'] .'_nid = %d AND nid NOT IN ('.$nids.') AND vid IN (SELECT vid FROM node)';
+      if ($field['multiple']) {
+        $result = db_query($query .' ORDER BY delta', $node->nid);
+      }
+      else {
+        $result = db_query_range($query, $node->nid, 0, 1);
+      }
+      while ($value = db_fetch_array($result)) {
+        $additions[$field['field_name']][] = $value;
+      }
+
+      return $additions;
+
+   case 'update':
+      if ($field['multiple'])
+        db_query('DELETE FROM {'. $db_info['table'] .'} WHERE vid = %d OR '. $field['field_name'] .'_nid = %d', $node->vid, $node->nid);
+      else
+        db_query('UPDATE {'. $db_info['table'] .'} SET '. $field['field_name'] .'_nid = 0 WHERE vid = %d OR '. $field['field_name'] .'_nid = %d', $node->vid, $node->nid);
+
+
+
+      foreach ($items as $delta => $item) {
+        if ($field['multiple']) {
+          db_query('INSERT INTO {'. $db_info['table'] .'} ('. $field['field_name'] .'_nid, vid, nid, delta) VALUES (%d, %d, %d, %d)', $item['nid'],$node->vid, $node->nid, $delta);
+        }
+        else {
+            db_query('UPDATE {'. $db_info['table'] .'} SET '. $field['field_name'] .'_nid = %d WHERE vid = %d', $item['nid'], $node->vid);
+        }
+      }
+      // clear old data
+      db_query('DELETE FROM {cache}');
+      db_query('DELETE FROM {cache_content}');
+      db_query('DELETE FROM {cache_filter}');
+      db_query('DELETE FROM {cache_menu}');
+      db_query('DELETE FROM {cache_page}');
+      db_query('DELETE FROM {cache_views}');
+
+      return;
+
+    case 'delete':
+      db_query('DELETE FROM {'. $db_info['table'] .'} WHERE nid = %d OR '. $field['field_name'] .'_nid = %d', $node->nid, $node->nid);
+      return;
+
   }
 }
 
