Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.312
diff -u -p -r1.312 menu.inc
--- includes/menu.inc	9 Feb 2009 16:27:35 -0000	1.312
+++ includes/menu.inc	11 Feb 2009 01:00:57 -0000
@@ -551,7 +551,7 @@ function _menu_item_localize(&$item, $ma
     }
     elseif ($callback && drupal_function_exists($callback)) {
       if (empty($item['title_arguments'])) {
-        $item['title'] = $callback($item['title']);
+        $item['title'] = $callback($item['title'], isset($item['mlid']) ? $item['mlid'] : NULL);
       }
       else {
         $item['title'] = call_user_func_array($callback, menu_unserialize($item['title_arguments'], $map));
Index: modules/simpletest/tests/menu.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu.test,v
retrieving revision 1.6
diff -u -p -r1.6 menu.test
--- modules/simpletest/tests/menu.test	5 Feb 2009 01:05:17 -0000	1.6
+++ modules/simpletest/tests/menu.test	11 Feb 2009 01:00:59 -0000
@@ -47,6 +47,25 @@ class MenuIncTestCase extends DrupalWebT
     $name = db_result(db_query($sql));
     $this->assertEqual($name, 'changed', t('Menu name was successfully changed after rebuild.'));
   }
+
+  /**
+   * Tests for 'title callback' parameter for hook_menu().
+   */
+  function testMenuTitleCallback() {
+    $admin_user = $this->drupalCreateUser(array('administer site configuration'));
+    $this->drupalLogin($admin_user);
+
+    // Determine mlid.
+    $mlid = db_select('menu_links')
+      ->fields('menu_links', array('mlid'))
+      ->condition('router_path', 'menu_title_callback_no_arguments')
+      ->execute()
+      ->fetchField();
+
+    // Fetch page.
+    $this->drupalGet('menu_title_callback_no_arguments');
+    $this->assertTitle('Test title' . ' ' . (!empty($mlid) ? $mlid : '') . ' | ' . variable_get('site_name', 'Drupal'), t('Title callback correctly returns title with menu ID.'));
+  }
 }
 
 /**
Index: modules/simpletest/tests/menu_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu_test.module,v
retrieving revision 1.2
diff -u -p -r1.2 menu_test.module
--- modules/simpletest/tests/menu_test.module	5 Feb 2009 01:05:17 -0000	1.2
+++ modules/simpletest/tests/menu_test.module	11 Feb 2009 01:00:59 -0000
@@ -24,6 +24,14 @@ function menu_test_menu() {
     'page callback' => 'menu_test_callback',
     'access arguments' => array('access content'),
   );
+  $items['menu_title_callback_no_arguments'] = array(
+    'title' => 'Test title',
+    'page callback' => 'menu_title_callback_no_arguments_page',
+    'title callback' => 'menu_title_callback_no_arguments',
+    'access arguments' => array('administer site configuration'),
+    'type' => MENU_CALLBACK,
+  );
+
   return $items;
 }
 
@@ -36,3 +44,18 @@ function menu_test_menu() {
 function menu_test_callback() {
   return $this->randomName();
 }
+
+/**
+ * The menu title is set through a callback.
+ */
+function menu_title_callback_no_arguments_page() {
+  return t('Test results.');
+}
+
+/**
+ * Menu callback: return the title concatenated with the mlid.
+ */
+function menu_title_callback_no_arguments($title, $mlid = NULL) {
+  return $title . ' ' . $mlid;
+}
+
