diff --git a/content.module b/content.module
index f679aa0..ef3c55c 100644
--- a/content.module
+++ b/content.module
@@ -312,6 +312,10 @@ function content_nodeapi(&$node, $op, $teaser, $page) {
       break;
 
     case 'view':
+      if (isset($node->content['body'])) {
+        $w = variable_get('content_body_weight_'. $node->type, 0);
+        $node->content['body']['#weight'] = $w;
+      }
       content_view($node, $teaser, $page);
       break;
   }
@@ -325,6 +329,10 @@ function content_form_alter($form_id, &$form) {
     $node = $form['#node'];
     if ($form['type']['#value'] .'_node_form' == $form_id) {
       $form = array_merge($form, content_form($node));
+      if (isset($form['body_filter'])) {
+        $w = variable_get('content_body_weight_'. $form['type']['#value'], 0);
+        $form['body_filter']['#weight'] = $w;
+      }
     }
   }
 }
diff --git a/content_admin.inc b/content_admin.inc
index a8fcdd4..d909fbd 100644
--- a/content_admin.inc
+++ b/content_admin.inc
@@ -67,10 +67,14 @@ function content_admin_field_overview_form($type_name) {
     if (!$form['#groups']) {
       drupal_set_message(t('There are no groups configured for this content type.'));
     }
-    foreach ($form['#groups'] as $group) {
+    foreach ($form['#groups'] as $group_name => $group) {
       foreach ($group['fields'] as $field_name => $field) {
         unset($dummy_form[$field_name]);
       }
+      foreach ((array)$group['moduledata'] as $field_name => $field) {
+        $form['#groups'][$group_name]['moduledata'][$field_name]['weight'] = (int) $dummy_form[$field_name]['#weight'];
+        unset($dummy_form[$field_name]);
+      }
     }
   }
 
@@ -124,6 +128,25 @@ function content_admin_field_overview_form($type_name) {
           $form['field-groups'][$field_name]  = array('#type' => 'select', '#options' => $form['#group_labels'], '#default_value' => fieldgroup_get_group($type['type'], $field_name));
           $form['field-groups-defaults'][$field_name]  = array('#type' => 'hidden', '#value' => fieldgroup_get_group($type['type'], $field_name));
         }
+        // fields done, take care of other moved module data
+        foreach ((array)$form['#groups'][$key]['moduledata'] as $field_name => $field) {
+          $row = array();
+          $row['label']     = $field_name == 'body_filter' ? t('body') : $field_name;
+          $row['name']      = $field_name;
+          $row['type']      = $field_name;
+          $row['weights']   = 'form-field-weights';
+          $row['groups']    = 'form-field-groups'; // '';
+          $row['configure'] = '';
+          $row['remove']    = '';
+          //$form['#table'][$value['#weight']][] = array($key => $row);
+          $group_form[$field['weight']][] = array($field_name => $row);
+          //$form['disabled']['#value'][] = $key;
+
+          $form['field-weights'][$field_name] = array('#type' => 'weight', '#default_value' => $value['#weight'], '#disabled' => TRUE);
+          $def_group = fieldgroup_get_group($type['type'], $field_name, 'moduledata');
+          $form['field-groups'][$field_name]  = array('#type' => 'select', '#options' => $form['#group_labels'], '#default_value' => fieldgroup_get_group($type['type'], $field_name));
+          $form['field-groups-defaults'][$field_name]  = array('#type' => 'hidden', '#value' => fieldgroup_get_group($type['type'], $field_name));
+        }
         // sort the group fields by weight
         ksort($group_form);
         $group = (array) $data + array('fields' => $group_form);
@@ -154,20 +177,28 @@ function content_admin_field_overview_form($type_name) {
       // otherwise this is some other form field or fieldset
       // if it has a weight display it as a disabled item
       else {
+        $is_body = ($key == 'body_filter');
         $row = array();
-        $row['label']     = $key == 'body_filter' ? t('body') : $key;
+        $row['label']     = $is_body ? t('body') : $key;
         $row['name']      = $key;
         $row['type']      = $key;
         $row['weights']   = 'form-field-weights';
         if (isset($form['#groups'])) {
-          $row['groups']  = '';
+          $row['groups']  = 'form-field-groups'; // '';
         }
         $row['configure'] = '';
         $row['remove']    = '';
         $form['#table'][$value['#weight']][] = array($key => $row);
-        $form['disabled']['#value'][] = $key;
+        //$form['disabled']['#value'][] = $key;
 
         $form['field-weights'][$key] = array('#type' => 'weight', '#default_value' => $value['#weight'], '#disabled' => TRUE);
+        if ($is_body) {
+          unset($form['field-weights'][$key]['#disabled']);
+          $form['field-weights'][$key]['#default_value'] = variable_get('content_body_weight_'. $type_name, 0);
+        }
+        if (isset($form['#groups']) && !empty($row['groups'])) {
+          $form['field-groups'][$key]  = array('#type' => 'select', '#options' => $form['#group_labels'], '#default_value' => fieldgroup_get_group($type['type'], $key));
+        }
       }
     }
   }
@@ -328,6 +359,14 @@ function content_admin_field_overview_form_submit($form_id, $form_values) {
         $value, $form_values['type_name'], $key);
       $msg = TRUE;
     }
+    if ($key == 'body_filter') {
+      if ($value) {
+        variable_set('content_body_weight_'. $form_values['type_name'], $value);
+      }
+      else {
+        variable_del('content_body_weight_'. $form_values['type_name']);
+      }
+    }
   }
   if ($msg) {
     drupal_set_message(t('Updated field weights.'));
diff --git a/content_crud.inc b/content_crud.inc
index d23a571..79d25aa 100644
--- a/content_crud.inc
+++ b/content_crud.inc
@@ -88,6 +88,11 @@ function content_type_update($info) {
       }
       drupal_set_message(t('Content fields table %old_name has been renamed to %new_name and field instances have been updated.', array('%old_name' => $old_name, '%new_name' => $new_name)));
     }
+    $w = variable_get('content_body_weight_'. $old_name, null);
+    if (isset($w)) {
+      variable_del('content_body_weight_'. $old_name);
+      variable_set('content_body_weight_'. $new_name, $w);
+    }
   }
   // reset all content type info
   content_clear_type_cache();
@@ -110,6 +115,7 @@ function content_type_delete($info) {
     db_query('DROP TABLE {'. $table .'}');
     drupal_set_message(t('The content fields table %name has been deleted.', array('%name' => $table)));
   }
+  variable_del('content_body_weight_'. $info->type);
 
   // reset all content type info
   content_clear_type_cache();
diff --git a/fieldgroup.module b/fieldgroup.module
index 3acc1ab..27dedf8 100644
--- a/fieldgroup.module
+++ b/fieldgroup.module
@@ -257,6 +257,11 @@ function fieldgroup_groups($content_type = '', $sorted = FALSE, $reset = FALSE)
       while ($field = db_fetch_array($result)) {
         $groups[$field['type_name']][$field['group_name']]['fields'][$field['field_name']] = $field;
       }
+      // load other moved entries
+      $result = db_query("SELECT * FROM {node_group_fields} WHERE NOT field_name LIKE 'field_%'");
+      while ($field = db_fetch_array($result)) {
+        $groups[$field['type_name']][$field['group_name']]['moduledata'][$field['field_name']] = $field;
+      }
       cache_set('fieldgroup_data', 'cache_content', serialize(array('groups' => $groups, 'groups_sorted' => $groups_sorted)));
     }
   }
@@ -300,13 +305,18 @@ function fieldgroup_form_alter($form_id, &$form) {
         '#description' => t($group['settings']['form']['description']),
         '#attributes' => array('class' => strtr($group['group_name'], '_', '-')),
       );
-      foreach ($group['fields'] as $field_name => $field) {
+      $move = array_merge((array)$group['fields'], (array)$group['moduledata']);
+      foreach ($move as $field_name => $field) {
         if (isset($form[$field_name])) {
           $form[$group_name][$field_name] = $form[$field_name];
+          $fix_func = '_fieldgroup_fa_fix_'. $field_name;
+          if (function_exists($fix_func)) {
+            $fix_func($form, $field_name, $group_name);
+          }
           unset($form[$field_name]);
         }
       }
-      if (!empty($group['fields']) && !element_children($form[$group_name])) {
+      if (!empty($move) && !element_children($form[$group_name])) {
         //hide the fieldgroup, because the fields are hidden too
         unset($form[$group_name]);
       }
@@ -340,6 +350,17 @@ function fieldgroup_form_alter($form_id, &$form) {
   }
 }
 
+function _fieldgroup_fa_fix_locations(&$form, $field_name, $group_name) {
+  foreach (array_keys($form[$group_name][$field_name]) as $prop) {
+    if ($prop[0] == '#') {
+      if ($prop != '#weight') unset($form[$group_name][$field_name][$prop]);
+    }
+    else {
+      $form[$group_name][$field_name][$prop]['#parents'] = array('locations', $prop);
+    }
+  }
+}
+
 function fieldgroup_content_admin_form_submit($form_id, &$form_values, $default) {
   if ($default != $form_values['group']) {
     if ($form_values['group'] && !$default) {
@@ -392,7 +413,8 @@ function fieldgroup_nodeapi(&$node, $op, $teaser, $page) {
         $node->content[$group_name] = $element;
 
         $visible = FALSE;
-        foreach ($group['fields'] as $field_name => $field) {
+        $move = array_merge((array)$group['fields'], (array)$group['moduledata']);
+        foreach ($move as $field_name => $field) {
           if (isset($node->content[$field_name])) {
             $node->content[$group_name][$field_name] = $node->content[$field_name];
             if ($node->content[$field_name]['#access'] && !empty($node->content[$field_name]['#value'])) {
@@ -430,9 +452,9 @@ function theme_fieldgroup_simple($element) {
  * If the field isn't in a group, FALSE will be returned.
  * @return The name of the group, or FALSE.
  */
-function fieldgroup_get_group($content_type, $field_name) {
+function fieldgroup_get_group($content_type, $field_name, $section = 'fields') {
   foreach (fieldgroup_groups($content_type) as $group_name => $group) {
-    if (in_array($field_name, array_keys($group['fields']))) {
+    if (in_array($field_name, array_keys($group[$section]))) {
       return $group_name;
     }
   }
