diff --git a/realname.module b/realname.module
index bf5f0bb..6384e7d 100644
--- a/realname.module
+++ b/realname.module
@@ -140,8 +140,9 @@ function realname_user_load($accounts) {
  * Implements hook_user_update().
  */
 function realname_user_update(&$edit, $account, $category) {
-  // Since user data may have changed, update the realname.
-  realname_update($account);
+  // Since user data may have changed, update the realname and its cache.
+  $realnames = &drupal_static('realname_load_multiple', array());
+  $realnames[$account->uid] = realname_update($account);
 }
 
 /**
diff --git a/realname.test b/realname.test
index 8251bdc..8b9b857 100644
--- a/realname.test
+++ b/realname.test
@@ -18,6 +18,7 @@ class RealnameBasicTest extends DrupalWebTestCase {
       'name' => 'Realname basic tests',
       'description' => 'Test basic functionality of Realname module.',
       'group' => 'Realname',
+      'dependencies' => array('entity'),
     );
   }
 
@@ -25,7 +26,7 @@ class RealnameBasicTest extends DrupalWebTestCase {
    * {@inheritdoc}
    */
   protected function setUp() {
-    parent::setUp('realname');
+    parent::setUp('entity', 'realname');
 
     $permissions = array(
       'access administration pages',
@@ -117,4 +118,42 @@ class RealnameBasicTest extends DrupalWebTestCase {
     $this->assertText('Real name', '[testRealnameManageDisplay]: Real name field visible on user page.');
   }
 
+  /**
+   * Test realname user update.
+   */
+  public function testRealnameUserUpdate() {
+    $edit['realname_pattern'] = '[user:name-raw]';
+    $this->drupalPost('admin/config/people/realname', $edit, t('Save configuration'));
+
+    $user1 = user_load($this->admin_user->uid);
+    $realname1 = $user1->realname;
+
+    // Update user name.
+    $user1->name = $this->randomName();
+    user_save($user1);
+
+    // Reload the user.
+    $user2 = user_load($this->admin_user->uid);
+    $realname2 = $user2->realname;
+
+    // Check if realname changed.
+    $this->assertTrue($realname1);
+    $this->assertTrue($realname2);
+    $this->assertNotEqual($realname1, $realname2, '[testRealnameUserUpdate]: Real name changed.');
+
+    $wrapper1 = entity_metadata_wrapper('user', $this->admin_user->uid);
+    $realname3 = $wrapper1->label();
+
+    // Update user name via entity_metadata_wrapper.
+    $wrapper1->name = $this->randomName();
+    $wrapper1->save();
+
+    // Reload the user via entity_metadata_wrapper.
+    $wrapper2 = entity_metadata_wrapper('user', $this->admin_user->uid);
+    $realname4 = $wrapper2->label();
+
+    // Check if realname changed via entity_metadata_wrapper.
+    $this->assertNotEqual($realname3, $realname4, '[testRealnameUserUpdate]: Real name changed via entity_metadata_wrapper.');
+  }
+
 }
