Index: modules/menu/menu.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.install,v
retrieving revision 1.26
diff -u -p -r1.26 menu.install
--- modules/menu/menu.install	23 Aug 2010 23:38:06 -0000	1.26
+++ modules/menu/menu.install	16 Dec 2010 12:59:17 -0000
@@ -70,3 +70,30 @@ function menu_uninstall() {
   menu_rebuild();
 }
 
+/**
+ * Upgrade path for finer node menu controls.
+ */
+function menu_update_7000() {
+  // Retain Drupal 6 menu setting for node parents or set all menus if such
+  // setting was not found (such as a previously running Drupal 7 site).
+  $d6_menu_setting = variable_get('menu_default_node_menu');
+
+  // Upgrade only if setting was overriden.
+  if (!is_null($d6_menu_setting)) {
+    $d7_menus = array_keys(menu_get_menus());
+    // If menu does not exists node settings would use D7 defaults.
+    if (isset($d7_menus[$d6_menu_setting])) {
+      $menus = array($d6_menu_setting);
+
+      // Update the menu setting for each node type.
+      $node_types = node_type_get_types();
+      foreach($node_types as $key => $type) {
+        $type_menus = variable_get('menu_options_' . $key);
+        // Update only untouched settings.
+        if (is_null($type_menus)) {
+          variable_set('menu_options_' . $key, $menus);
+        }
+      }
+    }
+  }
+}
\ No newline at end of file
Index: modules/menu/menu.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.module,v
retrieving revision 1.233
diff -u -p -r1.233 menu.module
--- modules/menu/menu.module	24 Sep 2010 00:37:43 -0000	1.233
+++ modules/menu/menu.module	16 Dec 2010 12:59:20 -0000
@@ -593,8 +593,9 @@ function menu_form_node_form_alter(&$for
   // @todo This must be handled in a #process handler.
   $type = $form['#node']->type;
   $options = menu_parent_options(menu_get_menus(), $type);
-  // If no possible parent menu items were found, there is nothing to display.
-  if (empty($options)) {
+  // If no possible parent menu items were found and no menu link exists,
+  // there is nothing to display.
+  if (empty($options) && empty($form['#node']->menu['mlid'])) {
     return;
   }
   $link = $form['#node']->menu;
@@ -648,9 +649,12 @@ function menu_form_node_form_alter(&$for
   );
 
   $default = ($link['mlid'] ? $link['menu_name'] . ':' . $link['plid'] : variable_get('menu_parent_' . $type, 'main-menu:0'));
-  // @todo This will fail with the new selective menus per content type.
+
+  // If the item is in a menu that is not permitted for this content type,
+  // allow it to stay there.
   if (!isset($options[$default])) {
-    $default = 'navigation:0';
+    $all_options = menu_parent_options(menu_get_menus(), $link);
+    $options[$default] = $all_options[$default];
   }
   $form['menu']['link']['parent'] = array(
     '#type' => 'select',
