diff -upN menu_breadcrumb-6.x-1.x-dev/menu_breadcrumb.module mb_weights/menu_breadcrumb.module
--- menu_breadcrumb.module	2009-08-31 10:13:21.000000000 +1200
+++ menu_breadcrumb.module	2009-10-04 12:23:23.796875000 +1300
@@ -71,20 +71,97 @@ function menu_breadcrumb_disable() {
 }
 
 /**
+ * Get the menu selection configuration.
+ *
+ * @return
+ *   The menu selection/weight array.
+ */
+function _menu_breadcrumb_get_menus() {
+  static $menus;
+
+  if (!isset($menus)) {
+    // The default selections, if we have yet to configure the module.
+    $default_menus = array(
+      'admin_menu' => array('selected' => TRUE),
+      'devel'      => array('selected' => TRUE),
+    );
+    // Fetch stored settings, and merge in any previously-unknown menus
+    $menus = variable_get('menu_breadcrumb_menus', $default_menus);
+    foreach (menu_get_names() as $menu_name) {
+      if (!array_key_exists($menu_name, $menus)) {
+        $menus[$menu_name] = array('selected' => FALSE, 'weight' => 0);
+      }
+    }
+    uasort($menus, '_menu_breadcrumb_sort'); // sort by weight
+  }
+  return $menus;
+}
+
+
+/**
+ * Sort-by-weight comparison.
+ */
+function _menu_breadcrumb_sort($menu1, $menu2) {
+  $menu1_weight = !empty($menu1['weight']) ? $menu1['weight'] : 0;
+  $menu2_weight = !empty($menu2['weight']) ? $menu2['weight'] : 0;
+  if ($menu1_weight == $menu2_weight) {
+    return 0;
+  }
+  return ($menu1_weight < $menu2_weight) ? -1 : 1;
+}
+
+
+/**
+ * Get the menu/selection list.
+ *
+ * @return
+ *   An array indicating the selection status of each menu.
+ */
+function menu_breadcrumb_menu_list() {
+  static $list;
+
+  if (!isset($list)) {
+    $menus = _menu_breadcrumb_get_menus();
+
+    $list = array();
+    foreach ($menus as $name => $menu) {
+      $list[$name] = (bool) $menu['selected'];
+    }
+
+    // Enable other modules to dynamically modify the menu list
+    // (for example, to make the order depend upon the current
+    // user's language preference)
+    if ($hook = module_invoke_all('menu_breadcrumb_menu_list', $list)) {
+      $list = $hook;
+    }
+  }
+
+  return $list;
+}
+
+
+/**
  * Implementation of hook_init().
+ * 
+ * Set the active menu according to the current path.
  */
 function menu_breadcrumb_init() {
   if (variable_get('menu_breadcrumb_determine_menu', 1)) {
-    $menu_list = variable_get('menu_breadcrumb_menus', array('admin_menu', 'devel'));
+    $menu_list = menu_breadcrumb_menu_list();
     $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']);
+    $menus = array();
     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']);
+      $menus[$menu_link['menu_name']] = TRUE;
+    }
+
+    foreach ($menu_list as $menu_name => $selected) {
+      $filter_match = ( ($filter == 'whitelist' && $selected)
+                     || ($filter == 'blacklist' && !$selected) );
+
+      if ($filter_match && array_key_exists($menu_name, $menus)) {
+        menu_set_active_menu_name($menu_name);
         break;
       }
     }
@@ -112,9 +189,11 @@ function menu_breadcrumb_init() {
  * Menu breadcrumb admin settings form.
  *
  * @return
- * The settings form used by Menu breadcrumb.
+ *   The settings form used by Menu breadcrumb.
  */
 function menu_breadcrumb_admin_settings_form() {
+  $form['#submit'][] = 'menu_breadcrumb_admin_settings_form_submit';
+
   $form['menu_breadcrumb_determine_menu'] = array(
     '#type' => 'checkbox',
     '#title' => t('Use menu the page belongs to for the breadcrumb.'),
@@ -154,19 +233,118 @@ function menu_breadcrumb_admin_settings_
     '#type' => 'radios',
     '#title' => t('Menu filter'),
     '#options' => array(
-      'blacklist' => t('Blacklist - Menu items will never be chosen from the menus selected below.'),
-      'whitelist' => t('Whitelist - Menu items will only be chosen from the menus selected below.'),
+      'blacklist' => t('Blacklist - Menu items will <em>never</em> be chosen from the menus selected below.'),
+      'whitelist' => t('Whitelist - Menu items will <em>only</em> be chosen from the menus selected below.'),
     ),
     '#default_value' => variable_get('menu_breadcrumb_menus_filter', 'blacklist'),
   );
 
+  // Orderable list of menu selections
+
   $form['include_exclude']['menu_breadcrumb_menus'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Menu list'),
-    '#description' => t('Select which menus to apply the blacklist / whitelist to.'),
-    '#options' => drupal_map_assoc(menu_get_names()),
-    '#default_value' => variable_get('menu_breadcrumb_menus', array('admin_menu', 'devel')),
+    '#tree' => TRUE,
+    '#theme' => 'menu_breadcrumb_menus_table',
+  );
+
+  $menus = _menu_breadcrumb_get_menus();
+  $weight_delta = count($menus);
+
+  foreach ($menus as $menu_name => $menu) {
+    $form['include_exclude']['menu_breadcrumb_menus'][$menu_name] = array(
+      'selected' => array(
+        '#type' => 'checkbox',
+        '#title' => $menu_name,
+        '#default_value' => !empty($menu['selected']),
+      ),
+      'weight' => array(
+        '#type' => 'weight',
+        '#default_value' => !empty($menu['weight']) ? (int) $menu['weight'] : 0,
+        '#delta' => $weight_delta,
+      ),
+    );
+  }
+
+  $form['include_exclude']['menu_breadcrumb_menus']['zero_row'] = array(
+    'selected' => array(
+      '#type' => 'markup',
+      '#value' => t("-------- NEW MENUS GO HERE --------"),
+    ),
+    'weight' => array(
+      '#type' => 'weight',
+      '#default_value' => 0,
+      '#delta' => $weight_delta,
+    ),
   );
 
   return system_settings_form($form);
+}
+
+
+/**
+ * Form submission handler.
+ *
+ * Adjust all weights with respect to zero_row before
+ * system_settings_form_submit() saves the values.
+ */
+function menu_breadcrumb_admin_settings_form_submit($form, &$form_state) {
+  $menus =& $form_state['values']['menu_breadcrumb_menus'];
+  $zero_weight = $menus['zero_row']['weight'];
+  unset($menus['zero_row']);
+  foreach (array_keys($menus) as $menu) {
+    $menus[$menu]['weight'] -= $zero_weight;
+  }
+}
+/**
+ * Theme a drag-to-reorder table of menu selection checkboxes.
+ */
+function theme_menu_breadcrumb_menus_table($element) {
+  drupal_add_tabledrag('menu-breadcrumb-menus', 'order', 'sibling', 'menu-weight');
+
+  $header = array(
+    t('Menu list:'),
+    t('Weight:'),
+  );
+
+  // Separate out the draggable weight:0 row
+  $element['zero_row']['weight']['#attributes']['class'] = 'menu-weight';
+  $zero_row = array(
+    'data' => array(
+      drupal_render($element['zero_row']['selected']),
+      drupal_render($element['zero_row']['weight']),
+    ),
+    'class' => 'draggable',
+  );
+  unset($element['zero_row']);
+
+  // Generate table of draggable menu names
+  $rows = array();
+  foreach (element_children($element) as $menu) {
+    if ($zero_row) {
+      if ($element[$menu]['weight']['#value'] >= 0) {
+        $rows[] = $zero_row;
+        $zero_row = FALSE;
+        ++$element[$menu]['weight']['#value'];
+      }
+    }
+    else {
+      ++$element[$menu]['weight']['#value'];
+    }
+    $element[$menu]['weight']['#attributes']['class'] = 'menu-weight';
+    $row = array();
+    $row[] = drupal_render($element[$menu]['selected']);
+    $row[] = drupal_render($element[$menu]['weight']);
+    $rows[] = array(
+      'data' => $row,
+      'class' => 'draggable',
+    );
+  }
+
+  // all weights were > 0; add the zero row at the end.
+  if ($zero_row) {
+    $rows[] = $zero_row;
+  }
+
+  $caption = t("Menus will be considered in the order they appear here.<br/> Any menus added subsequently (for example, by adding a book) will be processed at the position of the NEW MENUS GO HERE line.");
+
+  return theme('table', $header, $rows, array('id' => 'menu-breadcrumb-menus'), $caption);
 }
\ No newline at end of file
Common subdirectories: menu_breadcrumb-6.x-1.x-dev/translations and mb_weights/translations
