diff --git a/node_reference/node_reference.module b/node_reference/node_reference.module
index 81abb75..2205ca6 100644
--- a/node_reference/node_reference.module
+++ b/node_reference/node_reference.module
@@ -285,31 +285,118 @@ function node_reference_field_is_empty($item, $field) {
 function node_reference_field_formatter_info() {
   $ret = array(
     'node_reference_default' => array(
-      'label'       => t('Title (link)'),
+      'label' => t('Title (link)'),
       'description' => t('Display the title of the referenced node as a link to the node page.'),
       'field types' => array('node_reference'),
     ),
     'node_reference_plain' => array(
-      'label'       => t('Title (no link)'),
+      'label' => t('Title (no link)'),
       'description' => t('Display the title of the referenced node as plain text.'),
       'field types' => array('node_reference'),
     ),
     'node_reference_node' => array(
-      'label'       => t('Rendered node'),
+      'label' => t('Rendered node'),
       'description' => t('Display the referenced node in a specific view mode'),
       'field types' => array('node_reference'),
-      'settings'    => array('node_reference_view_mode' => 'full'),
+      'settings' => array('node_reference_view_mode' => 'full'),
+    ),
+    'node_reference_nid' => array(
+      'label' => t('Node ID'),
+      'description' => t('Display the referenced node ID'),
+      'field types' => array('node_reference'),
+    ),
+    'node_reference_path' => array(
+      'label' => t('URL as plain text'),
+      'description' => t('Display the URL of the referenced node'),
+      'field types' => array('node_reference'),
+      'settings' => array(
+        'alias' => TRUE,
+        'absolute' => FALSE
+      ),
     ),
   );
   return $ret;
 }
 
 /**
+ * Implements hook_field_formatter_settings_form().
+ */
+function node_reference_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+
+  $element = array();
+
+  switch ($display['type']) {
+    case 'node_reference_node':
+      $entity_info = entity_get_info('node');
+      $modes = $entity_info['view modes'];
+      $options = array();
+      foreach ($modes as $name => $mode) {
+        $options[$name] = $mode['label'];
+      }
+      $element['node_reference_view_mode'] = array(
+        '#title' => t('View mode'),
+        '#type' => 'select',
+        '#options' => $options,
+        '#default_value' => $settings['node_reference_view_mode'],
+        // Never empty, so no #empty_option
+      );
+      break;
+
+    case 'node_reference_path':
+      $element['alias'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Display the aliased path (if exists) instead of the system path'),
+        '#default_value' => $settings['alias'],
+      );
+      $element['absolute'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Display an absolute URL'),
+        '#default_value' => $settings['absolute'],
+      );
+      break;
+  }
+
+  return $element;
+}
+
+/**
+ * Implements hook_field_formatter_settings_summary().
+ */
+function node_reference_field_formatter_settings_summary($field, $instance, $view_mode) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+  $summary = array();
+
+  switch ($display['type']) {
+    case 'node_reference_node':
+      $entity_info = entity_get_info('node');
+      $modes = $entity_info['view modes'];
+      $mode = $modes[$settings['node_reference_view_mode']]['label'];
+      $summary[] = t('View mode: %mode', array('%mode' => $mode));
+      break;
+
+    case 'node_reference_path':
+      $summary[] = t('Aliased path: %yes_no', array('%yes_no' => $settings['alias'] ? t('Yes') : t('No')));
+      $summary[] = t('Absolute URL: %yes_no', array('%yes_no' => $settings['absolute'] ? t('Yes') : t('No')));
+      break;
+  }
+
+  return implode('<br />', $summary);
+}
+
+/**
  * Implements hook_field_formatter_prepare_view().
  *
  * Preload all nodes referenced by items using 'full entity' formatters.
  */
 function node_reference_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
+  // For each item, $item['node'] has been populated with information from the
+  // base table in node_reference_field_prepare_view().
+  // For the 'node_reference_node' formatter, however, we need fully loaded
+  // nodes. 
+
   // Collect nids to load.
   // @todo : can we make clever use of the recursion queue here ?
   $nids = array();
@@ -337,56 +424,10 @@ function node_reference_field_formatter_prepare_view($entity_type, $entities, $f
 }
 
 /**
- * Implements hook_field_formatter_settings_form().
- */
-function node_reference_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  // Only build this information for node_reference_node displays
-  if ($display['type'] !== 'node_reference_node') {
-    return NULL;
-  }
-
-  $entity_info = entity_get_info('node');
-  $modes = $entity_info['view modes'];
-  $options = array();
-  foreach ($modes as $name => $mode) {
-    $options[$name] = $mode['label'];
-  }
-  $element['node_reference_view_mode'] = array(
-    '#title'   => t('View mode'),
-    '#type'    => 'select',
-    '#options' => $options,
-    '#default_value' => $settings['node_reference_view_mode'],
-    // Never empty, so no #empty_option
-  );
-  return $element;
-}
-
-/**
- * Implements hook_field_formatter_settings_summary().
- */
-function node_reference_field_formatter_settings_summary($field, $instance, $view_mode) {
-  $display = $instance['display'][$view_mode];
-  $settings = $display['settings'];
-
-  if ($display['type'] === 'node_reference_node') {
-    $entity_info = entity_get_info('node');
-    $modes = $entity_info['view modes'];
-    $mode = $modes[$settings['node_reference_view_mode']]['label'];
-    $summary = t('View mode: %mode', array('%mode' => $mode));
-  }
-  else {
-    $summary = NULL;
-  }
-  return $summary;
-}
-
-/**
  * Implements hook_field_formatter_view().
  */
 function node_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
+  $settings = $display['settings'];
   $result = array();
 
   switch ($display['type']) {
@@ -418,7 +459,6 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins
       break;
 
     case 'node_reference_node':
-      $view_mode = $display['settings']['node_reference_view_mode'];
       // To prevent infinite recursion caused by reference cycles, we store
       // diplayed nodes in a recursion queue.
       $recursion_queue = &drupal_static(__FUNCTION__, array());
@@ -453,7 +493,7 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins
           $nodes_display[$nid]->referencing_entity = $entity;
           $nodes_display[$nid]->referencing_field = $field['field_name'];
         }
-        $nodes_built = node_view_multiple($nodes_display, $view_mode);
+        $nodes_built = node_view_multiple($nodes_display, $settings['node_reference_view_mode']);
       }
 
       // Assemble the render array.
@@ -479,6 +519,33 @@ function node_reference_field_formatter_view($entity_type, $entity, $field, $ins
         }
       }
       break;
+
+    case 'node_reference_nid':
+      foreach ($items as $delta => $item) {
+        if ($item['access']) {
+          $result[$delta] = array(
+            '#markup' => $item['nid'],
+          );
+        }
+      }
+      break;
+
+    case 'node_reference_path':
+      foreach ($items as $delta => $item) {
+        if ($item['access']) {
+          $uri = entity_uri('node', $item['node']);
+          $options = array(
+            'absolute' => $settings['absolute'],
+            'alias' => !$settings['alias'],
+          );
+
+          $options += $uri['options'];
+          $result[$delta] = array(
+            '#markup' => url($uri['path'], $options),
+          );
+        }
+      }
+      break;
   }
 
   return $result;
diff --git a/user_reference/user_reference.module b/user_reference/user_reference.module
index 0d4f074..7d04653 100644
--- a/user_reference/user_reference.module
+++ b/user_reference/user_reference.module
@@ -223,6 +223,50 @@ function user_reference_field_validate($entity_type, $entity, $field, $instance,
 }
 
 /**
+ * Implements hook_field_prepare_view().
+ */
+function user_reference_field_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items) {
+  // @todo : do we need the static ?
+  $fetched_users = &drupal_static(__FUNCTION__, array());
+
+  // Extract nids to check.
+  $ids = array();
+  foreach ($items as $id => $entity_items) {
+    foreach ($entity_items as $delta => $item) {
+      if (is_array($item)) {
+        // @todo Keep that ?
+        // Default to 'not accessible'.
+        $items[$id][$delta]['access'] = FALSE;
+        if (!empty($item['uid']) && is_numeric($item['uid'])) {
+          $ids[$item['uid']] = $item['uid'];
+        }
+      }
+    }
+  }
+
+  if ($ids) {
+    // Load information about nids that we haven't already loaded during
+    // this page request.
+    $missing_ids = array_diff($ids, array_keys($fetched_users));
+    if (!empty($missing_ids)) {
+      $query = db_select('users', 'u')
+        ->fields('u')
+        ->condition('u.uid', $missing_ids, 'IN');
+      $fetched_users += $query->execute()->fetchAllAssoc('uid');
+    }
+
+    foreach ($items as $id => $entity_items) {
+      foreach ($entity_items as $delta => $item) {
+        if (is_array($item) && !empty($item['uid']) && isset($fetched_users[$item['uid']])) {
+          $items[$id][$delta]['user'] = $fetched_users[$item['uid']];
+          $items[$id][$delta]['access'] = TRUE;
+        }
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_field_is_empty().
  */
 function user_reference_field_is_empty($item, $field) {
@@ -244,13 +288,73 @@ function user_reference_field_formatter_info() {
       'description' => t('Display the name of the referenced user as plain text.'),
       'field types' => array('user_reference'),
     ),
+    'user_reference_uid' => array(
+      'label' => t('User ID'),
+      'description' => t('Display the referenced user ID'),
+      'field types' => array('user_reference'),
+    ),
+    'user_reference_path' => array(
+      'label' => t('URL as plain text'),
+      'description' => t('Display the URL of the referenced user'),
+      'field types' => array('user_reference'),
+      'settings' => array(
+        'alias' => TRUE,
+        'absolute' => FALSE
+      ),
+    ),
   );
 }
 
 /**
+ * Implements hook_field_formatter_settings_form().
+ */
+function user_reference_field_formatter_settings_form($field, $instance, $view_mode, $form, &$form_state) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+
+  $element = array();
+
+  switch ($display['type']) {
+    case 'user_reference_path':
+      $element['alias'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Display the aliased path (if exists) instead of the system path'),
+        '#default_value' => $settings['alias'],
+      );
+      $element['absolute'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Display an absolute URL'),
+        '#default_value' => $settings['absolute'],
+      );
+      break;
+  }
+
+  return $element;
+}
+
+/**
+ * Implements hook_field_formatter_settings_summary().
+ */
+function user_reference_field_formatter_settings_summary($field, $instance, $view_mode) {
+  $display = $instance['display'][$view_mode];
+  $settings = $display['settings'];
+  $summary = array();
+
+  switch ($display['type']) {
+    case 'user_reference_path':
+      $summary[] = t('Aliased path: %yes_no', array('%yes_no' => $settings['alias'] ? t('Yes') : t('No')));
+      $summary[] = t('Absolute URL: %yes_no', array('%yes_no' => $settings['absolute'] ? t('Yes') : t('No')));
+      break;
+  }
+
+  return implode('<br />', $summary);
+}
+
+/**
  * Implements hook_field_formatter_view().
  */
 function user_reference_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
+  $settings = $display['settings'];
   $result = array();
 
   // @todo Optimisation: use hook_field_formatter_prepare_view() to load
@@ -265,18 +369,49 @@ function user_reference_field_formatter_view($entity_type, $entity, $field, $ins
   switch ($display['type']) {
     case 'user_reference_default':
     case 'user_reference_plain':
-      $titles = _user_reference_get_user_names($uids);
       foreach ($items as $delta => $item) {
-        if ($display['type'] == 'user_reference_default') {
+        if ($item['access']) {
+          $user = $item['user'];
+          if ($display['type'] == 'user_reference_default') {
+            $uri = entity_uri('user', $user);
+            $result[$delta] = array(
+              '#type' => 'link',
+              '#title' => $user->name,
+              '#href' => $uri['path'],
+              '#options' => $uri['options'],
+            );
+          }
+          else {
+            $result[$delta] = array(
+              '#markup' => check_plain($user->name),
+            );
+          }
+        }
+      }
+      break;
+
+    case 'user_reference_uid':
+      foreach ($items as $delta => $item) {
+        if ($item['access']) {
           $result[$delta] = array(
-            '#type' => 'link',
-            '#title' => $titles[$item['uid']],
-            '#href' => 'user/' . $item['uid'],
+            '#markup' => $item['uid'],
           );
         }
-        else {
+      }
+      break;
+
+    case 'user_reference_path':
+      foreach ($items as $delta => $item) {
+        if ($item['access']) {
+          $uri = entity_uri('user', $item['user']);
+          $options = array(
+            'absolute' => $settings['absolute'],
+            'alias' => !$settings['alias'],
+          );
+
+          $options += $uri['options'];
           $result[$delta] = array(
-            '#markup' => check_plain($titles[$item['uid']]),
+            '#markup' => url($uri['path'], $options),
           );
         }
       }
