Index: backreference.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/backreference/backreference.module,v
retrieving revision 1.1.2.3
diff -u -p -r1.1.2.3 backreference.module
--- backreference.module	19 Aug 2010 03:55:39 -0000	1.1.2.3
+++ backreference.module	9 Feb 2011 10:24:06 -0000
@@ -242,7 +242,7 @@ function _backreference_old_values_remov
 function _backreference_linkback_multiple_field($right_table, $right_field_column, $left_nid, $right_vid, $right_nid, $left_multiple) {
   // This is a new reference, so we need to insert it after other references.
   // This was a race condition, but the LOCK TABLES should handle that.
-  $delta_row = db_fetch_array(db_query_range("SELECT delta, $right_field_column, nid FROM {". $right_table ."} WHERE nid = %d ORDER BY delta DESC", $right_nid, 0, 1));
+  $delta_row = db_fetch_array(db_query_range("SELECT delta, $right_field_column, nid FROM {". $right_table ."} WHERE vid = %d ORDER BY delta DESC", $right_vid, 0, 1));
   $delta = $delta_row['delta'];
 
   if ($delta == 0 && empty($delta_row[$right_field_column]) && !empty($delta_row['nid'])) {
Index: tests/backreference_multi.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/backreference/tests/Attic/backreference_multi.test,v
retrieving revision 1.1.2.1
diff -u -p -r1.1.2.1 backreference_multi.test
--- tests/backreference_multi.test	19 Aug 2010 03:55:39 -0000	1.1.2.1
+++ tests/backreference_multi.test	9 Feb 2011 10:24:06 -0000
@@ -179,6 +179,78 @@ class BackReferenceMultipleValueTest ext
                                $node_2->vid, $node->nid,
                                'node[1]', 'node[0]');
   }
+
+  /**
+   * Reference between fields with revisions on the node
+   */
+  function testBasicNodeReferenceReferenceBetweenTypesAndRevisions() {
+
+    $user = $this->drupalCreateUser($this->permissions);
+    $this->drupalLogin($user);
+
+    $this->acquireContentTypes(2);
+    $field_settings_1 = array(
+      'type' => 'nodereference',
+      'widget_type' => 'nodereference_autocomplete',
+      'type_name' => $this->content_types[0]->type,
+      'label' => 'simpletest F1',
+      'multiple' => 1,
+    );
+
+    $field_1 = $this->createField($field_settings_1, 0);
+
+    $field_settings_2 = array(
+      'type' => 'nodereference',
+      'widget_type' => 'nodereference_autocomplete',
+      'type_name' => $this->content_types[1]->type,
+      'label' => 'simpletest F2',
+      'multiple' => 1,
+    );
+
+    $field_2 = $this->createField($field_settings_2, 1);
+
+    $field_1_db_info = content_database_info($field_1);
+    $field_2_db_info = content_database_info($field_2);
+
+    db_query("INSERT INTO {backreference_field_symmetry} (field_left, field_right) VALUES ('%s', '%s')",
+             $field_1['field_name'], $field_2['field_name']);
+    db_query("INSERT INTO {backreference_field_symmetry} (field_left, field_right) VALUES ('%s', '%s')",
+             $field_2['field_name'], $field_1['field_name']);
+
+    $result = db_query("SELECT * FROM {backreference_field_symmetry}");
+    $table = array();
+    while ($row = db_fetch_array($result)) {
+      $table[] = $row;
+    }
+    $this->pass(print_r($table, TRUE));
+
+    $this->acquireNodes(1); // create two nodes, one in each type.
+
+    // Create a new revision of the destination node, having two versions
+    $node = node_load($this->nodes[1]->nid);
+    for ($i = 0; $i < 2; $i++) {
+      $node->revision = 1;
+      $node->log = "Test revision";
+      node_save($node);
+    }
+    $node_dest_vid = $node->vid;
+
+    $node = node_load($this->nodes[0]->nid);
+    $node->{$field_1['field_name']}[0] = $this->nodes[1]->nid;
+    node_save($node);
+
+    // Test that node[0] points to node[1]:
+    $this->assertNodeReference($field_1_db_info['columns']['nid']['column'],
+                               $field_1_db_info['table'],
+                               $node->vid, $this->nodes[1]->nid,
+                               'node[0]', 'node[1]');
+
+    // Test that node[1] points to node[0]:
+    $this->assertNodeReference($field_2_db_info['columns']['nid']['column'],
+                               $field_2_db_info['table'],
+                               $node_dest_vid, $node->nid,
+                               'node[1]', 'node[0]');
+  }
 }
 
 class BackReferenceMultipleValueThreeNodeTest extends BackReferenceMultipleTestCase {
