diff -upN menu_breadcrumb-6.x-1.x-dev/menu_breadcrumb.module mb_memory/menu_breadcrumb.module
--- menu_breadcrumb.module	2009-08-31 10:13:21.000000000 +1200
+++ menu_breadcrumb.module	2009-10-04 12:05:54.765625000 +1300
@@ -75,18 +75,9 @@ function menu_breadcrumb_disable() {
  */
 function menu_breadcrumb_init() {
   if (variable_get('menu_breadcrumb_determine_menu', 1)) {
-    $menu_list = variable_get('menu_breadcrumb_menus', array('admin_menu', 'devel'));
-    $filter = variable_get('menu_breadcrumb_menus_filter', 'blacklist');
-    $menu_item = menu_get_item();
-    $result = db_query("SELECT mlid, menu_name FROM {menu_links} WHERE link_path = '%s'", $menu_item['href']);
-    while ($menu_link = db_fetch_array($result)) {
-      // @see http://www.php.net/manual/en/function.in-array.php#86695
-      $menu_in_list = in_array($menu_link['menu_name'], $menu_list, TRUE);
-      if ( ( $filter == 'whitelist' && $menu_in_list ) ||
-           ( $filter == 'blacklist' && !$menu_in_list ) ) {
-        menu_set_active_menu_name($menu_link['menu_name']);
-        break;
-      }
+    $item = menu_get_item();
+    if ($menu_name = menu_breadcrumb_menu_name($item['href'])) {
+      menu_set_active_menu_name($menu_name);
     }
   }
 
@@ -109,6 +100,59 @@ function menu_breadcrumb_init() {
 }
 
 /**
+ * Store/retrieve the menu name for a given menu link.
+ * 
+ * Can be called with no arguments to retrieve the
+ * most recent menu_breadcrumb menu selection, if another
+ * module has since called menu_set_active_menu_name().
+ * 
+ * @param $link_path
+ *   The path to establish the menu for.
+ * @param $menu_name
+ *   The menu name to set for the given menu item.
+ * @return
+ *   The name of the menu selected for this menu item, or NULL.
+ */
+function menu_breadcrumb_menu_name($link_path = NULL, $menu_name = NULL) {
+  static $menu = array();
+  static $path;
+  if ($path = $link_path ? $link_path : $path) {
+    if (!empty($menu_name)) {
+      $menu[$path] = $menu_name;
+    }
+    else if (!array_key_exists($path, $menu)) {
+      $menu[$path] = menu_breadcrumb_find_menu($path);
+    }
+    return $menu[$path];
+  }
+}
+
+
+/**
+ * Determine the menu for the given menu item.
+ *
+ * @param $link_path
+ *   The path to establish the menu for.
+ * @return
+ *   The name of the preferred menu for this path, or NULL.
+ */
+function menu_breadcrumb_find_menu($link_path, $menu_list = NULL, $filter = NULL) {
+  $menu_list = variable_get('menu_breadcrumb_menus', array('admin_menu', 'devel'));
+  $filter = variable_get('menu_breadcrumb_menus_filter', 'blacklist');
+  $menu_item = menu_get_item();
+  $result = db_query("SELECT mlid, menu_name FROM {menu_links} WHERE link_path = '%s'", $menu_item['href']);
+  while ($menu_link = db_fetch_array($result)) {
+    // @see http://www.php.net/manual/en/function.in-array.php#86695
+    $menu_in_list = in_array($menu_link['menu_name'], $menu_list, TRUE);
+    if ( ( $filter == 'whitelist' && $menu_in_list ) ||
+         ( $filter == 'blacklist' && !$menu_in_list ) ) {
+      return $menu_link['menu_name'];
+    }
+  }
+}
+
+
+/**
  * Menu breadcrumb admin settings form.
  *
  * @return
Common subdirectories: menu_breadcrumb-6.x-1.x-dev/translations and mb_memory/translations
