Index: includes/common.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/common.inc,v
retrieving revision 1.501
diff -u -p -r1.501 common.inc
--- includes/common.inc	22 Dec 2005 22:58:12 -0000	1.501
+++ includes/common.inc	24 Dec 2005 10:32:27 -0000
@@ -954,6 +954,7 @@ function url($path = NULL, $query = NULL
   global $base_url;
 
   static $script;
+  static $clean_url;
 
   if (empty($script)) {
     // On some web servers, such as IIS, we can't omit "index.php".  So, we
@@ -962,8 +963,10 @@ function url($path = NULL, $query = NULL
     $script = (strpos($_SERVER['SERVER_SOFTWARE'], 'Apache') === false) ? 'index.php' : '';
   }
 
-  $path = drupal_get_path_alias($path);
-  $path = drupal_urlencode($path);
+  // Cache the clean_url variable to improve performance.
+  if ($clean_url === NULL) {
+    $clean_url = (variable_get('clean_url', '0') == '0') ? false : true;
+  }
 
   if (isset($fragment)) {
     $fragment = '#'. $fragment;
@@ -971,8 +974,11 @@ function url($path = NULL, $query = NULL
 
   $base = ($absolute ? $base_url .'/' : '');
 
-  if (variable_get('clean_url', '0') == '0') {
-    if (isset($path)) {
+  // The special path '<front>' links to the default front page.
+  if (isset($path) && $path != '<front>') {
+    $path = drupal_get_path_alias($path);
+    $path = drupal_urlencode($path);
+    if (!$clean_url) {
       if (isset($query)) {
         return $base . $script .'?q='. $path .'&'. $query . $fragment;
       }
@@ -982,29 +988,19 @@ function url($path = NULL, $query = NULL
     }
     else {
       if (isset($query)) {
-        return $base . $script .'?'. $query . $fragment;
+        return $base . $path .'?'. $query . $fragment;
       }
       else {
-        return $base . $fragment;
+        return $base . $path . $fragment;
       }
     }
   }
   else {
-    if (isset($path)) {
-      if (isset($query)) {
-        return $base . $path .'?'. $query . $fragment;
-      }
-      else {
-        return $base . $path . $fragment;
-      }
+    if (isset($query)) {
+      return $base . $script .'?'. $query . $fragment;
     }
     else {
-      if (isset($query)) {
-        return $base . $script .'?'. $query . $fragment;
-      }
-      else {
-        return $base . $fragment;
-      }
+      return $base . $fragment;
     }
   }
 }
Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.95
diff -u -p -r1.95 menu.inc
--- includes/menu.inc	22 Dec 2005 22:58:12 -0000	1.95
+++ includes/menu.inc	24 Dec 2005 10:32:27 -0000
@@ -464,7 +464,7 @@ function menu_get_active_help() {
 function menu_get_active_breadcrumb() {
   $menu = menu_get_menu();
 
-  $links[] = l(t('Home'), '');
+  $links[] = l(t('Home'), '<front>');
 
   $trail = _menu_get_active_trail();
   foreach ($trail as $mid) {
Index: modules/menu.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu.module,v
retrieving revision 1.56
diff -u -p -r1.56 menu.module
--- modules/menu.module	15 Dec 2005 21:53:49 -0000	1.56
+++ modules/menu.module	24 Dec 2005 10:32:28 -0000
@@ -400,7 +400,7 @@ function menu_edit_item_form($edit) {
   else {
     $form['description'] = array('#type' => 'textfield', '#title' => t('Description'), '#default_value' => $edit['description'], '#description' => t('The description displayed when hovering over a menu item.'));
 
-    $path_description = t('The Drupal path this menu item links to.');
+    $path_description = t('The Drupal path this menu item links to. Enter %front to link to the front page.', array('%front' => theme('placeholder', '<front>')));
 
     if ($edit['type'] & MENU_CREATED_BY_ADMIN) {
       $form['path'] = array('#type' => 'textfield', '#title' => t('Path'), '#default_value' => $edit['path'], '#description' => $path_description, '#required' => TRUE);
Index: modules/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system.module,v
retrieving revision 1.271
diff -u -p -r1.271 system.module
--- modules/system.module	22 Dec 2005 12:37:52 -0000	1.271
+++ modules/system.module	24 Dec 2005 10:32:28 -0000
@@ -752,6 +752,9 @@ function system_settings_form_submit($fo
   else {
     drupal_set_message(t('The configuration options have been saved.'));
   }
+  if ($form_id == 'system_settings_form') {
+    menu_rebuild();
+  }
 }
 
 /**
