diff --git a/includes/name.content.inc b/includes/name.content.inc
index dcee1ed..ab3e51d 100644
--- a/includes/name.content.inc
+++ b/includes/name.content.inc
@@ -385,12 +385,13 @@ function _name_field_instance_settings_form($field, $instance = NULL) {
   );
 
   // Add the overwrite user name option.
-  if ($instance['entity_type'] == 'user' && $instance['bundle'] == 'user') {
-    $preferred_field = variable_get('name_user_preferred', '');
+  if (($instance['entity_type'] == 'user' && $instance['bundle'] == 'user') ||
+       $instance['entity_type'] == 'profile2') {
+    $preferred_field_info = variable_get('name_user_preferred', array());
     $form['name_user_preferred'] = array(
       '#type' => 'checkbox',
       '#title' => t('Use this field to override the users login name?'),
-      '#default_value' => $preferred_field == $instance['field_name'] ? 1 : 0,
+      '#default_value' => $preferred_field_info['field_name'] == $instance['field_name'] ? 1 : 0,
     );
     $form['override_format'] = array(
       '#type' => 'select',
diff --git a/includes/webform.components.inc b/includes/webform.components.inc
index a277897..2fa4e1e 100644
--- a/includes/webform.components.inc
+++ b/includes/webform.components.inc
@@ -91,8 +91,8 @@ function _webform_edit_name($name) {
     '#options' => $components,
   );
 
-  $user_field_name = variable_get('name_user_preferred', '');
-  $user_field = $user_field_name ? field_info_instance('user', $user_field_name, 'user') : NULL;
+  $user_field_info = variable_get('name_user_preferred', array());
+  $user_field = $user_field_info ? field_info_instance($user_field_info['entity_type'], $user_field_info['field_name'], $user_field_info['bundle']) : NULL;
   $form['extra']['use_real_name'] = array(
     '#type' => 'checkbox',
     '#title' => t('Use users real name field as default'),
@@ -222,10 +222,9 @@ function _webform_render_name($name, $value = NULL, $filter = TRUE) {
   if (empty($value)) {
     $found = FALSE;
     if (!empty($name['extra']['use_real_name'])) {
-      if ($user_field_name = variable_get('name_user_preferred', '')) {
+      if (variable_get('name_user_preferred', array())) {
         name_username_alter_preload($user);
-        if ($items = field_get_items('user', $user, $user_field_name)) {
-          $item = reset($items);
+        if ($item = name_get_realname_item($user)) {
           $found = TRUE;
           foreach ($enabled_components as $component_key) {
             $default_value[$component_key] = isset($item[$component_key]) ? $item[$component_key] : '';
diff --git a/name.install b/name.install
index 4af78e6..4f3bacf 100644
--- a/name.install
+++ b/name.install
@@ -223,6 +223,19 @@ function name_update_7002() {
 }
 
 /**
+ * Updates the user name preferred setting to use the new format.
+ */
+function name_update_7101() {
+  if ($field_name = variable_get('name_user_preferred', '')) {
+    variable_set('name_user_preferred', array(
+      'entity_type' => 'user',
+      'bundle' => 'user',
+      'field_name' => $field_name,
+    ));
+  }
+}
+
+/**
  * Inserts some common formats.
  */
 function name_install_default_formats() {
diff --git a/name.module b/name.module
index 7a14b98..bb970fd 100644
--- a/name.module
+++ b/name.module
@@ -250,11 +250,12 @@ function name_username_alter_preload(&$account) {
   static $in_preload = FALSE;
 
   if (!$in_preload && !isset($account->realname)) {
-    $field_name = variable_get('name_user_preferred', FALSE);
-    if ($field_name && $instance = field_info_instance('user', $field_name, 'user')) {
-      $in_preload = TRUE;
-      $account = user_load($account->uid);
-      $in_preload = FALSE;
+    if ($field_info = variable_get('name_user_preferred', array())) {
+      if (field_info_instance($field_info['entity_type'], $field_info['field_name'], $field_info['bundle'])) {
+        $in_preload = TRUE;
+        $account = user_load($account->uid);
+        $in_preload = FALSE;
+      }
     }
   }
 }
@@ -263,28 +264,77 @@ function name_username_alter_preload(&$account) {
  * Implements hook_user_load().
  */
 function name_user_load(array $accounts) {
+  if (variable_get('name_user_preferred', array())) {
+    foreach ($accounts as $uid => &$account) {
+      name_set_realname($account);
+    }
+  }
+}
+
+/**
+ * Internal helper function to set the realname of a user account.
+ *
+ * @param $account
+ *   A user account object.
+ */
+function name_set_realname(&$account) {
+  $uid = $account->uid;
+  $entity = NULL;
+
+  // This is called from user_load().
   // In the event there are a lot of user_load() calls, cache the results.
   $names = &drupal_static(__FUNCTION__, array());
+  if (isset($names[$uid])) {
+    $account->realname = $names[$uid];
+  }
+  else {
+    if ($field_info = variable_get('name_user_preferred', array())) {
+      if ($instance = field_info_instance($field_info['entity_type'], $field_info['field_name'], $field_info['bundle'])) {
+        if ($item = name_get_realname_item($account)) {
+          $format = name_get_format_by_machine_name($instance['settings']['override_format']);
+          if (empty($format)) {
+            $format = name_get_format_by_machine_name('default');
+          }
 
-  $field_name = variable_get('name_user_preferred', FALSE);
-  if ($field_name && $instance = field_info_instance('user', $field_name, 'user')) {
-    $format = name_get_format_by_machine_name($instance['settings']['override_format']);
-    if (empty($format)) {
-      $format = name_get_format_by_machine_name('default');
+          // We still have raw user input here.
+          $account->realname = name_format($item, $format);
+          $names[$uid] = $account->realname;
+        }
+      }
     }
-    foreach ($accounts as $uid => $acccount) {
-      if (isset($names[$uid])) {
-        $accounts[$uid]->realname = $names[$uid];
+  }
+}
+
+/**
+ * Internal helper function to set the realname of a user account.
+ *
+ * @param $account
+ *   A user account object.
+ *
+ * @return
+ *   A field item array.
+ */
+function name_get_realname_item($account) {
+  $item = array();
+
+  if ($field_info = variable_get('name_user_preferred', array())) {
+    if ($instance = field_info_instance($field_info['entity_type'], $field_info['field_name'], $field_info['bundle'])) {
+      if ($field_info['entity_type'] == 'user' && $field_info['bundle'] == 'user') {
+        $entity = $account;
       }
-      else {
-        if ($items = field_get_items('user', $acccount, $instance['field_name'])) {
-          // We still have raw user input here.
-          $accounts[$uid]->realname = name_format($items[0], $format, array('object' => $acccount, 'type' => 'user'));
-          $names[$uid] = $accounts[$uid]->realname;
+      elseif ($field_info['entity_type'] == 'profile2') {
+        $entity = profile2_load_by_user($account, $field_info['bundle']);
+      }
+
+      if ($entity) {
+        if ($items = field_get_items($field_info['entity_type'], $entity, $field_info['field_name'])) {
+          $item = $items[0];
         }
       }
     }
   }
+
+  return $item;
 }
 
 /**
@@ -1439,8 +1489,12 @@ function name_field_settings_pre_render($form) {
  * Implements hook_field_create_instance().
  */
 function name_field_create_instance($instance) {
-  if ($instance['entity_type'] == 'user' && !empty($instance['settings']['name_user_preferred'])) {
-    variable_set('name_user_preferred', $instance['field_name']);
+  if (in_array($instance['entity_type'], array('user', 'profile2')) && !empty($instance['settings']['name_user_preferred'])) {
+    variable_set('name_user_preferred', array(
+      'entity_type' =>$instance['entity_type'],
+      'bundle' =>$instance['bundle'],
+      'field_name' => $instance['field_name'],
+    ));
   }
 }
 
@@ -1449,12 +1503,16 @@ function name_field_create_instance($instance) {
  */
 function name_field_update_instance($instance, $prior_instance) {
   // I'm only targeting user entities here.
-  if ($instance['entity_type'] == 'user') {
+  if (in_array($instance['entity_type'], array('user', 'profile2'))) {
     if (!empty($instance['settings']['name_user_preferred'])) {
-      variable_set('name_user_preferred', $instance['field_name']);
+      variable_set('name_user_preferred', array(
+        'entity_type' =>$instance['entity_type'],
+        'bundle' =>$instance['bundle'],
+        'field_name' => $instance['field_name'],
+      ));
     }
     elseif (!empty($prior_instance['settings']['name_user_preferred'])) {
-      variable_set('name_user_preferred', '');
+      variable_set('name_user_preferred', array());
     }
   }
 }
@@ -1463,8 +1521,8 @@ function name_field_update_instance($instance, $prior_instance) {
  * Implements hook_field_delete_instance().
  */
 function name_field_delete_instance($instance) {
-  if ($instance['entity_type'] == 'user' && !empty($instance['settings']['name_user_preferred'])) {
-    variable_set('name_user_preferred', '');
+  if (in_array($instance['entity_type'], array('user', 'profile2')) && !empty($instance['settings']['name_user_preferred'])) {
+    variable_set('name_user_preferred', array());
   }
 }
 
