diff --git pathauto.module pathauto.module
index 18a591e..1020016 100644
--- pathauto.module
+++ pathauto.module
@@ -513,6 +513,27 @@ function pathauto_taxonomy_term_update_alias_multiple(array $tids, $op, array $o
 // User related functions. For users, trackers, and blogs.
 
 /**
+ * Implements hook_user_presave().
+ */
+function pathauto_user_presave(&$edit, $account, $category) {
+  // Skip processing if the account has no pattern.
+  if (!pathauto_pattern_load_by_entity('user')) {
+    return;
+  }
+
+  // Compare the user's current alias to the alias that would be genereted by
+  // pathauto. If they differ, then the alias has most likely been manually
+  // overridden and should not be regenerated.
+  module_load_include('inc', 'pathauto');
+  $old_account = user_load($account->uid);
+  $uri = entity_uri('user', $old_account);
+
+  $old_alias = drupal_get_path_alias($uri['path']);
+  $new_alias = pathauto_create_alias('user', 'return', $uri['path'], array('user' => $old_account));
+  $edit['pathauto_perform_alias'] = $old_alias != $uri['path'] && $old_alias == $new_alias;
+}
+
+/**
  * Implements hook_user_insert().
  */
 function pathauto_user_insert(&$edit, $account, $category) {
@@ -523,7 +544,9 @@ function pathauto_user_insert(&$edit, $account, $category) {
  * Implements hook_user_update().
  */
 function pathauto_user_update(&$edit, $account, $category) {
-  pathauto_user_update_alias($account, 'update');
+  if ($edit['pathauto_perform_alias']) {
+    pathauto_user_update_alias($account, 'update');
+  }
 }
 
 /**
