=== modified file 'includes/form.inc'
--- includes/form.inc	2008-06-25 09:57:07 +0000
+++ includes/form.inc	2008-06-27 17:33:39 +0000
@@ -838,9 +838,18 @@ function form_error(&$element, $message 
  *   context, it is used to accumulate information about which button
  *   was clicked when the form was submitted, as well as the sanitized
  *   $_POST data.
+ * @param $parent
+ *   The parent of this subform.
  */
-function form_builder($form_id, $form, &$form_state) {
-  static $complete_form, $cache;
+function form_builder($form_id, $form, &$form_state, &$parent = array()) {
+  static $complete_form, $cache, $stored_form_id;
+
+  if (!isset($form_id)) {
+    $form_id = $stored_form_id;
+  }
+  else {
+    $stored_form_id = $form_id;
+  }
 
   // Initialize as unprocessed.
   $form['#processed'] = FALSE;
@@ -860,7 +869,7 @@ function form_builder($form_id, $form, &
   }
 
   if (isset($form['#input']) && $form['#input']) {
-    _form_builder_handle_input_element($form_id, $form, $form_state, $complete_form);
+    _form_builder_handle_input_element($form_id, $form, $form_state, $complete_form, $parent);
   }
   $form['#defaults_loaded'] = TRUE;
 
@@ -901,7 +910,8 @@ function form_builder($form_id, $form, &
       // later.
       unset($form['#sorted']);
     }
-    $form[$key] = form_builder($form_id, $form[$key], $form_state);
+
+    $form[$key] = form_builder($form_id, $form[$key], $form_state, $form);
     $count++;
   }
 
@@ -943,7 +953,7 @@ function form_builder($form_id, $form, &
  * can be processed and rendered. Also, execute any #process handlers
  * attached to a specific element.
  */
-function _form_builder_handle_input_element($form_id, &$form, &$form_state, $complete_form) {
+function _form_builder_handle_input_element($form_id, &$form, &$form_state, $complete_form, &$parent_form) {
   if (!isset($form['#name'])) {
     $name = array_shift($form['#parents']);
     $form['#name'] = $name;
@@ -1035,7 +1045,7 @@ function _form_builder_handle_input_elem
   if (isset($form['#process']) && !$form['#processed']) {
     foreach ($form['#process'] as $process) {
       if (drupal_function_exists($process)) {
-        $form = $process($form, isset($edit) ? $edit : NULL, $form_state, $complete_form);
+        $form = $process($form, isset($edit) ? $edit : NULL, $form_state, $complete_form, $parent_form);
       }
     }
     $form['#processed'] = TRUE;

=== modified file 'modules/filter/filter.module'
--- modules/filter/filter.module	2008-05-06 12:18:44 +0000
+++ modules/filter/filter.module	2008-06-27 17:35:07 +0000
@@ -457,6 +457,21 @@ function check_markup($text, $format = F
 }
 
 /**
+ * Add a filter_form to a form.
+ */
+function filter_form_add($form, $edit, &$form_state, $complete_form, &$parent) {
+  if (isset($form['#format']) || array_key_exists('#format', $form)) {
+    $parents = $parent['#tree'] ? $parent['#parents'] : array();
+    $parents[] = 'format';
+    $parent['format'] = filter_form($form['#format'], $form['#weight'] + 1/10000, $parents);
+    $parent['format']['#post'] = $form['#post'];
+    $parent['format']['#programmed'] = $form['#programmed'];
+    $parent['format'] = form_builder(NULL, $parent['format'], $form_state, $parent);
+  }
+  return $form;
+}
+
+/**
  * Generate a selector for choosing a format in a form.
  *
  * @ingroup forms

=== modified file 'modules/node/node.pages.inc'
--- modules/node/node.pages.inc	2008-04-14 17:48:33 +0000
+++ modules/node/node.pages.inc	2008-06-27 17:27:38 +0000
@@ -289,10 +289,9 @@ function node_body_field(&$node, $label,
     '#default_value' => $include ? $node->body : ($node->teaser . $node->body),
     '#rows' => 20,
     '#required' => ($word_count > 0),
+    '#format' => $node->format,
   );
 
-  $form['format'] = filter_form($node->format);
-
   return $form;
 }
 

=== modified file 'modules/system/system.module'
--- modules/system/system.module	2008-06-25 09:12:24 +0000
+++ modules/system/system.module	2008-06-27 16:22:08 +0000
@@ -229,7 +229,7 @@ function system_elements() {
     '#cols' => 60,
     '#rows' => 5,
     '#resizable' => TRUE,
-    '#process' => array('form_expand_ahah'),
+    '#process' => array('form_expand_ahah', 'filter_form_add'),
   );
 
   $type['radios'] = array(

