--- nodereference.module#1
+++ nodereference.module
@@ -36,6 +36,7 @@
 function nodereference_field_info() {
   return array(
     'nodereference' => array('label' => 'Node Reference'),
+    'nodereferencedby' => array('label' => 'Node Referenced By'),
   );
 }
 
@@ -43,8 +44,8 @@
  * Implementation of hook_field_settings().
  */
 function nodereference_field_settings($op, $field) {
-  switch ($op) {
-    case 'form':
+  switch ($field['type'] .'/'. $op) {
+    case 'nodereference/form':
       $form = array();
       $form['referenceable_types'] = array(
         '#type' => 'checkboxes',
@@ -55,10 +56,10 @@
       );
       return $form;
 
-    case 'save':
+    case 'nodereference/save':
       return array('referenceable_types');
 
-    case 'database columns':
+    case 'nodereference/database columns':
       $columns = array(
         'nid' => array('type' => 'int', 'not null' => TRUE, 'default' => '0'),
       );
@@ -70,12 +71,19 @@
  * Implementation of hook_field().
  */
 function nodereference_field($op, &$node, $field, &$node_field, $teaser, $page) {
-  switch ($op) {
-    case 'view':
+  switch ($field['type'] .'/'. $op) {
+    case 'nodereference/view':
       foreach ($node_field as $delta => $item) {
         $node_field[$delta]['view'] = nodereference_field_view_item($field, $item, $node);
       }
       return theme('field', $node, $field, $node_field, $teaser, $page);
+      
+    case 'nodereferencedby/view':
+      $referrers = nodereference_referenced_by_list($node->nid);
+      foreach($referrers as $delta => $referrer) {
+        $node_field[$delta]['view'] = l($referrer->title, 'node/' . $referrer->nid);
+      }
+      return theme('field', $node, $field, $node_field, $teaser, $page);
   }
 }
 
@@ -106,6 +114,10 @@
       'label' => 'Autocomplete Text Field',
       'field types' => array('nodereference'),
     ),
+    'nodereferencedby_list' => array(
+      'label' => 'Referrer List',
+      'field types' => array('nodereferencedby'),
+    ),
   );
 }
 
@@ -147,7 +159,7 @@
         unset($node_field['nids']);
     }
   }
-  else {
+  elseif ($field['widget']['type'] == 'nodereference_autocomplete') {
     switch ($op) {
       case 'prepare form values':
         foreach ($node_field as $delta => $item) {
@@ -262,19 +274,25 @@
 }
 
 function nodereference_referenced_by_list($nid, $content_type = '') {
-  if ($content_type) {
-    $result = db_query("SELECT n.* FROM {node_field_nodereference_data} node_ref INNER JOIN {node} n ON n.vid = node_ref.vid AND n.type = '%s' WHERE node_ref.field_nid = %d ORDER BY delta", $nid, $content_type);
-  }
-  else {
-    $result = db_query("SELECT n.* FROM {node_field_nodereference_data} node_ref INNER JOIN {node} n ON n.vid = node_ref.vid WHERE node_ref.field_nid = %d ORDER BY delta", $nid);
-  }
-
+  // Retrieve the fields in order to find the field names of all nodereference fields
+  $fields = _content_fields();
   $values = array();
-
-  while ($value = db_fetch_object($result)) {
-    $values[] = $value;
+  foreach($fields as $field) {
+    if ($field['type'] == 'nodereference') {
+      $db_info = content_database_info($field);
+      
+      // Gather the nodereferences that refer to $nid
+      if ($content_type) {
+        $result = db_query("SELECT n.* FROM {" . $db_info['table'] . "} node_ref INNER JOIN {node} n ON n.vid = node_ref.vid AND n.type = '%s' AND n.status = 1 WHERE node_ref." . $db_info['columns']['nid']['column'] . " = %d ORDER BY delta", $content_type, $nid);
+      }
+      else {
+        $result = db_query("SELECT n.* FROM {" . $db_info['table'] . "} node_ref INNER JOIN {node} n ON n.vid = node_ref.vid AND n.status = 1 WHERE node_ref." . $db_info['columns']['nid']['column'] . " = %d ORDER BY delta", $nid);
+      }
+      while ($value = db_fetch_object($result)) {
+        $values[$value->nid] = $value; // Note: Using nid as key to avoid duplicate referrers
+      }
+    }
   }
-
   return $values;
 }
 
