diff --git a/includes/menu.inc b/includes/menu.inc
index 9a686e3..d915485 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -1970,7 +1970,12 @@ function menu_link_save(&$item) {
     $item['plid'] = $parent['mlid'];
   }
 
-  if (!$existing_item) {
+  // If every value in $existing_item is the same in the $item, there is no
+  // reason to run the update queries or clear the caches. We use
+  // array_intersect_key() with the $item as the first parameter because
+  // $item may have additional keys left over from building a router entry.
+  // The intersect removes the extra keys, allowing a meaningful comparison.
+  if (!$existing_item || (array_intersect_key($item, $existing_item) != $existing_item)) {
     db_query("INSERT INTO {menu_links} (
        menu_name, plid, link_path,
       hidden, external, has_children,
