=== modified file 'includes/form.inc'
--- includes/form.inc	2008-08-17 11:08:23 +0000
+++ includes/form.inc	2008-09-07 16:01:09 +0000
@@ -1041,7 +1041,9 @@ function _form_builder_handle_input_elem
     }
     $form['#processed'] = TRUE;
   }
-  form_set_value($form, $form['#value'], $form_state);
+  if (isset($form['#value']) || array_key_exists('#value', $form)) {
+    form_set_value($form, $form['#value'], $form_state);
+  }
 }
 
 /**
@@ -1742,6 +1744,26 @@ function form_process_radios($element) {
   return $element;
 }
 
+function form_process_textarea($element) {
+  if (isset($element['#input_format'])) {
+    $parents = $element['#parents'];
+    $element = array(
+      '#type' => 'markup',
+      '#post' => $element['#post'],
+      '#programmed' => $element['#programmed'],
+      '#tree' => TRUE,
+      '#parents' => $parents,
+      '#sorted' => TRUE,
+      'value' => $element,
+      'format' => filter_form($element['#input_format'], 1, array_merge($parents, array('format'))),
+    );
+    unset($element['value']['#name'], $element['value']['#id'], $element['value']['#value'], $element['value']['#input_format']);
+    $element['value']['#weight'] = 0;
+    $element['value']['#parents'] = array_merge($parents, array('value'));
+  }
+  return $element;
+}
+
 /**
  * Add AHAH information about a form element to the page to communicate with
  * javascript. If #ahah[path] is set on an element, this additional javascript is
@@ -1782,6 +1804,8 @@ function form_process_ahah($element) {
       case 'select':
         $element['#ahah']['event'] = 'change';
         break;
+      default:
+        return $element;
     }
   }
 

=== modified file 'modules/node/node.module'
--- modules/node/node.module	2008-08-31 15:50:35 +0000
+++ modules/node/node.module	2008-09-07 15:53:04 +0000
@@ -858,6 +858,13 @@ function node_submit($node) {
   // module-provided 'teaser' form item).
   if (!isset($node->teaser)) {
     if (isset($node->body)) {
+      if (is_array($node->body)) {
+        $node->format = $node->body['format'];
+        $node->body = $node->body['value'];
+      }
+      else {
+        $node->format = FILTER_FORMAT_DEFAULT;
+      }
       $node->teaser = node_teaser($node->body, isset($node->format) ? $node->format : NULL);
       // Chop off the teaser from the body if needed. The teaser_include
       // property might not be set (eg. in Blog API postings), so only act on
@@ -938,7 +945,6 @@ function node_save(&$node) {
   $node->changed = time();
 
   $node->timestamp = time();
-  $node->format = isset($node->format) ? $node->format : FILTER_FORMAT_DEFAULT;
   $update_node = TRUE;
 
   // Generate the node table query and the node_revisions table query.

=== modified file 'modules/node/node.pages.inc'
--- modules/node/node.pages.inc	2008-08-31 09:15:12 +0000
+++ modules/node/node.pages.inc	2008-09-07 15:51:10 +0000
@@ -276,7 +276,7 @@ function node_body_field(&$node, $label,
   $form['teaser_js'] = array(
     '#type' => 'textarea',
     '#rows' => 10,
-    '#teaser' => 'edit-body',
+    '#teaser' => 'edit-body-value',
     '#teaser_checkbox' => 'edit-teaser-include',
     '#disabled' => TRUE,
   );
@@ -295,10 +295,9 @@ function node_body_field(&$node, $label,
     '#default_value' => $include ? $node->body : ($node->teaser . $node->body),
     '#rows' => 20,
     '#required' => ($word_count > 0),
+    '#input_format' => isset($node->format) ? $node->format : FILTER_FORMAT_DEFAULT,
   );
 
-  $form['format'] = filter_form($node->format);
-
   return $form;
 }
 

=== modified file 'modules/system/system.module'
--- modules/system/system.module	2008-09-02 01:08:01 +0000
+++ modules/system/system.module	2008-09-04 13:49:07 +0000
@@ -239,7 +239,7 @@ function system_elements() {
     '#cols' => 60,
     '#rows' => 5,
     '#resizable' => TRUE,
-    '#process' => array('form_process_ahah'),
+    '#process' => array('form_process_textarea', 'form_process_ahah'),
   );
 
   $type['radios'] = array(

