--- sites/all/modules/cck/includes/content.admin.inc	Fri Dec 05 15:30:18 2008
+++ sites/all/modules/cck/includes/content.admin.inc	Mon Dec 22 11:20:11 2008
@@ -138,6 +138,7 @@
   if (module_exists('fieldgroup')) {
     $groups = fieldgroup_groups($type['type']);
     $group_types = fieldgroup_types();
+    $plain_tree = _fieldgroup_plain_tree($groups);
     $group_options = _fieldgroup_groups_label($type['type']);
     // Add the ability to group under the newly created row.
     $group_options['_add_new_group'] = '_add_new_group';
@@ -185,6 +186,8 @@
 
   // Groups.
   foreach ($groups as $name => $group) {
+    $current_group_options = $plain_tree;
+    unset($current_group_options[$name]);
     $weight = $group['weight'];
     $form[$name] = array(
       'label' => array('#value' => check_plain($group['label'])),
@@ -193,7 +196,8 @@
       'configure' => array('#value' => l(t('Configure'), 'admin/content/node-type/'. $type['url_str'] .'/groups/'. $group['group_name'])),
       'remove' => array('#value' => l(t('Remove'), 'admin/content/node-type/'. $type['url_str'] .'/groups/'. $group['group_name'] .'/remove')),
       'weight' => array('#type' => 'textfield', '#default_value' => $weight, '#size' => 3),
-      'parent' => array('#type' => 'hidden', '#default_value' => ''),
+      'parent' => array('#type' => 'select', '#options' => $current_group_options, '#default_value' => ''),
+      'prev_parent' => array('#type' => 'hidden', '#value' => ''),
       'hidden_name' => array('#type' => 'hidden', '#default_value' => $group['group_name']),
       '#root' => TRUE,
       '#row_type' => 'group',
@@ -204,6 +208,10 @@
       $form[$field_name]['parent']['#default_value'] = $name;
       $form[$field_name]['prev_parent']['#value'] = $name;
     }
+    // Adjust child group rows
+    $form[$name]['parent']['#default_value'] = $group['parent_group_name'];
+    $form[$name]['prev_parent']['#value'] = $group['parent_group_name'];
+    
     $form['#group_rows'][] = $name;
     $weights[] = $weight;
   }
@@ -300,6 +308,8 @@
 
   // Additional row : add new group.
   if (module_exists('fieldgroup')) {
+    $current_group_options = $group_options;
+    unset($current_group_options[_add_new_group]);
     $weight++;
     $name = '_add_new_group';
     $form[$name] = array(
@@ -323,7 +333,8 @@
         '#value' => 'standard',
       ),
       'weight' => array('#type' => 'textfield', '#default_value' => $weight, '#size' => 3),
-      'parent' => array('#type' => 'hidden', '#default_value' => ''),
+      'parent' => array('#type' => 'select', '#options' => $current_group_options, '#default_value' => ''),
+      'prev_parent' => array('#type' => 'hidden', '#value' => ''),
       'hidden_name' => array('#type' => 'hidden', '#default_value' => $name),
       '#root' => TRUE,
       '#add_new' => TRUE,
@@ -632,6 +643,7 @@
     $form[$name] = array(
       'human_name' => array('#value' => check_plain($group['label'])),
       'weight' => array('#type' => 'value', '#value' => $weight),
+      'parent' => array('#type' => 'value', '#value' => ''),
     );
     if ($contexts_selector == 'basic') {
       $form[$name]['label'] = array(
@@ -656,6 +668,8 @@
     foreach ($group['fields'] as $field_name => $field) {
       $form[$field_name]['parent']['#value'] = $name;
     }
+    $form[$name]['parent']['#value'] = $group['parent_group_name'];
+    $form[$name]['group']['#value']['depth'] = $group['depth'];
   }
 
   $form['submit'] = array('#type' => 'submit', '#value' => t('Save'));
@@ -1601,7 +1615,8 @@
   // Group rows: account for weight.
   if (module_exists('fieldgroup')) {
     foreach ($group_rows as $name) {
-      $dummy[$name] = array('#weight' => $form[$name]['weight']['#value'], '#value' => $name .' ');
+      $dummy[$name] = array('#weight' => ($form[$name]['weight']['#value'] + ($form[$name]['group']['#value']['depth'] * 0.01)), '#value' => $name .' ');
+      $form[$name]['#depth'] = $form[$name]['group']['#value']['depth'];
     }
   }
   // Field rows : account for weight and parenting.
@@ -1609,7 +1624,7 @@
     $dummy[$name] = array('#weight' => $form[$name]['weight']['#value'], '#value' => $name .' ');
     if (module_exists('fieldgroup')) {
       if ($parent = $form[$name]['parent']['#value']) {
-        $form[$name]['#depth'] = 1;
+        $form[$name]['#depth'] = $form[$parent]['group']['#value']['depth'] + 1;
         $dummy[$parent][$name] = $dummy[$name];
         unset($dummy[$name]);
       }
