diff --git a/alias_hierarchy.module b/alias_hierarchy.module
index d8b9997..cc6d1a8 100644
--- a/alias_hierarchy.module
+++ b/alias_hierarchy.module
@@ -51,16 +51,19 @@ function alias_hierarchy_node_update($node) {
       }
     }
 
-    alias_hierarchy_update_custom_alias($node->nid, $node->path['custom_alias']);
+    $updated = alias_hierarchy_update_custom_alias(
+      $node->nid, $node->path['custom_alias']);
 
     // Exit if node is not published.
     if ($node->status == 0) {
       // Rebuild menu_router to reflect any changes to unpublished node.
-      menu_rebuild();
+      if ($updated) {
+        menu_rebuild();
+      }
       return;
     }
 
-    alias_hierarchy_regenerate_pathauto_alias(
+    $updated = $updated || alias_hierarchy_regenerate_pathauto_alias(
       $node->nid,
       $node->menu['plid'],
       $node->menu['link_title']);
@@ -70,8 +73,12 @@ function alias_hierarchy_node_update($node) {
       alias_hierarchy_children_regenerate_pathauto_alias($node->menu['mlid']);
     }
   }
+
   // Rebuild menu_router to reflect any changes.
-  menu_rebuild();
+  if ($updated) {
+    menu_rebuild();
+  }
+
 }
 
 /**
@@ -210,7 +217,7 @@ function alias_hierarchy_regenerate_pathauto_alias($link_path, $plid, $link_titl
           case PATHAUTO_UPDATE_ACTION_NO_NEW:
             // If an alias already exists, and the update action is set to do
             // nothing, then gosh-darn it, do nothing.
-            return '';
+            return FALSE;
         }
       }
 
@@ -218,7 +225,7 @@ function alias_hierarchy_regenerate_pathauto_alias($link_path, $plid, $link_titl
 
       // If we have arrived at an empty string, discontinue.
       if (!drupal_strlen($alias)) {
-        return '';
+        return FALSE;
       }
 
       // If the alias already exists, generate a new, hopefully unique, variant.
@@ -239,6 +246,7 @@ function alias_hierarchy_regenerate_pathauto_alias($link_path, $plid, $link_titl
         'language' => $language,
       );
       $path = _pathauto_set_alias($path, $existing_alias, 'update');
+      return TRUE;
     }
   }
 }
