diff --git a/realname.info b/realname.info
index a66393c..1fd740e 100644
--- a/realname.info
+++ b/realname.info
@@ -2,5 +2,6 @@ name = Real name
 description = Provides token-based name displays for users.
 core = 7.x
 dependencies[] = token
+test_dependencies[] = entity
 files[] = realname.test
 configure = admin/config/people/realname
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..ca42dc2 100644
--- a/realname.test
+++ b/realname.test
@@ -25,7 +25,7 @@ class RealnameBasicTest extends DrupalWebTestCase {
    * {@inheritdoc}
    */
   protected function setUp() {
-    parent::setUp('realname');
+    parent::setUp('realname', 'entity');
 
     $permissions = array(
       'access administration pages',
@@ -117,4 +117,43 @@ class RealnameBasicTest extends DrupalWebTestCase {
     $this->assertText('Real name', '[testRealnameManageDisplay]: Real name field visible on user page.');
   }
 
+  /**
+   * Test realname user update hook.
+   */
+  public function testRealnameUserUpdate() {
+    variable_set('realname_pattern', '[user:name-raw]');
+    $user = $this->drupalCreateUser();
+    $uid = $user->uid;
+
+    $user1 = user_load($uid);
+    $realname1 = $user1->realname;
+
+    // Update user name.
+    $user1->name = $this->randomName();
+    user_save($user1);
+
+    // Reload the user.
+    $user2 = user_load($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', $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', $uid);
+    $realname4 = $wrapper2->label();
+
+    // Check if realname changed via entity_metadata_wrapper.
+    $this->assertNotEqual($realname3, $realname4, '[testRealnameUserUpdate]: Real name changed via entity_metadata_wrapper.');
+  }
+
 }
