diff --git a/realname.module b/realname.module
index fd41513..522756b 100644
--- a/realname.module
+++ b/realname.module
@@ -762,17 +762,27 @@ function realname_make_name(&$account) {
     return $users[$account->uid];
   }
 
-  $result = _realname_make_name($account);
-  if (empty($result)) {
+  // Regenerate the realname
+  $new_realname = _realname_make_name($account);
+  if (empty($new_realname)) {
     return $account->name;
   }
-  if (!db_result(db_query("SELECT uid FROM {realname} WHERE uid = %d", $account->uid))) {
-    db_query("INSERT INTO {realname} (uid, realname) VALUES (%d, '%s')", $account->uid, $result);
+
+  // Is there a realname already stored in the database?
+  $stored_realname = db_result(db_query("SELECT realname FROM {realname} WHERE uid = %d", $account->uid));
+
+  // Check whether we need to save the new realname and, if so, whether we're updating or overwriting
+  if (empty($stored_realname)) {
+    // No realname was stored in the database for this user; insert the new one
+    db_query("INSERT INTO {realname} (uid, realname) VALUES (%d, '%s')", $account->uid, $new_realname);
   }
-  else {
-    db_query("UPDATE {realname} SET realname = '%s' WHERE uid = %d", $result, $account->uid);
+  elseif (!($new_realname == $stored_realname)) {
+    // We only update existing values in the database if the realname has changed
+    db_query("UPDATE {realname} SET realname = '%s' WHERE uid = %d", $new_realname, $account->uid);
   }
-  return $result;
+
+  // Return the realname
+  return $new_realname;
 }
 
 /**
