diff --git modules/comment/comment.admin.inc modules/comment/comment.admin.inc
index 4490353..857140f 100644
--- modules/comment/comment.admin.inc
+++ modules/comment/comment.admin.inc
@@ -67,31 +67,38 @@ function comment_admin_overview($form, &$form_state, $arg) {
   );
 
   $query = db_select('comment', 'c')->extend('PagerDefault')->extend('TableSort');
-  $query->join('users', 'u', 'u.uid = c.uid');
   $query->join('node', 'n', 'n.nid = c.nid');
-  $query->addField('u', 'name', 'registered_name');
   $query->addField('n', 'title', 'node_title');
   $result = $query
-    ->fields('c', array('subject', 'nid', 'cid', 'comment', 'changed', 'status', 'name', 'homepage'))
-    ->fields('u', array('uid'))
+    ->fields('c', array('cid', 'subject', 'name', 'changed'))
     ->condition('c.status', $status)
     ->limit(50)
     ->orderByHeader($header)
     ->execute();
 
+  // We collect a sorted list of node_titles during the query to attach to the
+  // comments later.
+  foreach ($result as $row) {
+    $cids[] = $row->cid;
+    $node_titles[] = $row->node_title;
+  }
+  $comments = comment_load_multiple($cids);
 
   // Build a table listing the appropriate comments.
   $options = array();
   $destination = drupal_get_destination();
 
-  foreach ($result as $comment) {
+  foreach ($comments as $comment) {
+    // Dequeue the first node title from the node_titles array and attach to
+    // the comment.
+    $comment->node_title = array_shift($node_titles);
     $options[$comment->cid] = array(
       'subject' => array(
         'data' => array(
           '#type' => 'link',
           '#title' => $comment->subject,
           '#href' => 'comment/' . $comment->cid,
-          '#options' => array('attributes' => array('title' => truncate_utf8($comment->comment, 128)), 'fragment' => 'comment-' . $comment->cid),
+          '#options' => array('attributes' => array('title' => truncate_utf8($comment->comment_body[LANGUAGE_NONE][0]['value'], 128)), 'fragment' => 'comment-' . $comment->cid),
         ),
       ),
       'author' => theme('username', array('account' => $comment)),
diff --git modules/comment/comment.install modules/comment/comment.install
index 3a04d8e..8a236dc 100644
--- modules/comment/comment.install
+++ modules/comment/comment.install
@@ -10,6 +10,9 @@
  * Implements hook_uninstall().
  */
 function comment_uninstall() {
+  // Delete comment_body field.
+  field_delete_field('comment_body');
+
   // Remove variables.
   variable_del('comment_block_count');
   $node_types = array_keys(node_type_get_types());
@@ -43,6 +46,28 @@ function comment_enable() {
   db_insert('node_comment_statistics')
     ->from($query)
     ->execute();
+
+  // Create comment body field.
+  // @todo this should be done in comment_install, but causes exceptions
+  // in testing because the list of fields types is not available in
+  // hook_install(): _field_info_collate_types() returns an empty array.
+  if (!field_info_field('comment_body')) {
+    $field = array(
+      'field_name' => 'comment_body',
+      'type' => 'text_long',
+    );
+    field_create_field($field);
+  }
+
+  // Ensures all node types have an instance of the comment body field
+  // regardless of whether they have comments enabled or not. Node types with
+  // comments disabled might have comments nonetheless and we need this field
+  // to store these comments. An instance is created if it does not exist.
+  foreach (node_type_get_types() as $type => $info) {
+    if (!field_info_instance('comment', 'comment_body', 'comment_node_' . $info->type)) {
+      _comment_body_field_instance_create($info);
+    }
+  }
 }
 
 /**
@@ -214,6 +239,81 @@ function comment_update_7011() {
   db_add_index('node_comment_statistics', 'comment_count', array('comment_count'));
 }
 
+ /**
+ * Create the comment_body field.
+ */
+function comment_update_7012() {
+  // Create comment body field.
+  $field = array(
+    'field_name' => 'comment_body',
+    'type' => 'text_long',
+  );
+  field_create_field($field);
+
+  // Add the field to comments for all existing bundles.
+  $body_instance = array(
+    'field_name' => 'comment_body',
+    'label' => 'Body',
+    'object_type' => 'comment',
+    'settings' => array('text_processing' => 1),
+    // Hide field label by default.
+    'display' => array(
+      'full' => array(
+        'label' => 'hidden',
+      ),
+    ),
+  );
+  foreach (node_type_get_types() as $info) {
+    $body_instance['bundle'] = 'comment_node_' . $info->type;
+    field_create_instance($body_instance);
+  }
+}
+
+/**
+ * Migrate data from the comment field to field storage.
+ */
+function comment_update_7013(&$sandbox) {
+  // This is a multipass update. First set up some comment variables.
+  if (empty($sandbox['total'])) {
+    $comments = (bool) db_query_range('SELECT 1 FROM {comment}', 0, 1)->fetchField();
+    $sandbox['types'] = array();
+    if ($comments) {
+      $sandbox['etid'] = _field_sql_storage_etid('comment');
+      $sandbox['types'] = node_type_get_types();
+    }
+    $sandbox['total'] = count($sandbox['types']);
+  }
+  if (!empty($sandbox['types'])) {
+    $type = array_shift($sandbox['types']);
+
+    $query = db_select('comment', 'c');
+    $query->innerJoin('node', 'n', 'c.nid = n.nid AND n.type = :type', array(':type' => $type->type));
+    $query->addField('c', 'cid', 'entity_id');
+    $query->addExpression("'comment_node_$type->type'", 'bundle');
+    $query->addExpression($sandbox['etid'], 'etid');
+    $query->addExpression('0', 'deleted');
+    $query->addExpression("'" . LANGUAGE_NONE . "'", 'language');
+    $query->addExpression('0', 'delta');
+    $query->addField('c', 'comment', 'comment_body_value');
+    $query->addField('c', 'format', 'comment_body_format');
+
+    $comment_body = field_info_field('comment_body');
+    $comment_body_table = _field_sql_storage_tablename($comment_body);
+
+    db_insert($comment_body_table)
+      ->from($query)
+      ->execute();
+  }
+
+  // On the last pass of the update, $sandbox['types'] will be empty.
+  if (empty($sandbox['types'])) {
+    db_drop_field('comment', 'comment');
+    db_drop_field('comment', 'format');
+  }
+
+  $sandbox['#finished'] = 1 - count($sandbox['types']) / $sandbox['total'];
+}
+
 /**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
@@ -256,12 +356,6 @@ function comment_schema() {
         'default' => '',
         'description' => 'The comment title.',
       ),
-      'comment' => array(
-        'type' => 'text',
-        'not null' => TRUE,
-        'size' => 'big',
-        'description' => 'The comment body.',
-      ),
       'hostname' => array(
         'type' => 'varchar',
         'length' => 128,
@@ -289,13 +383,6 @@ function comment_schema() {
         'size' => 'tiny',
         'description' => 'The published status of a comment. (0 = Not Published, 1 = Published)',
       ),
-      'format' => array(
-        'type' => 'int',
-        'size' => 'small',
-        'not null' => TRUE,
-        'default' => 0,
-        'description' => 'The {filter_format}.format of the comment body.',
-      ),
       'thread' => array(
         'type' => 'varchar',
         'length' => 255,
diff --git modules/comment/comment.module modules/comment/comment.module
index 2d7351a..c837f17 100644
--- modules/comment/comment.module
+++ modules/comment/comment.module
@@ -240,6 +240,8 @@ function comment_count_unpublished() {
  */
 function comment_node_type_insert($info) {
   field_attach_create_bundle('comment', 'comment_node_' . $info->type);
+
+  _comment_body_field_instance_create($info);
 }
 
 /**
@@ -270,6 +272,28 @@ function comment_node_type_delete($info) {
   }
 }
 
+ /**
+ * Helper function which creates a comment body field instance for a given node
+ * type.
+ */
+function _comment_body_field_instance_create($info) {
+  // Attaches the body field by default.
+  $instance = array(
+    'field_name' => 'comment_body',
+    'label' =>'Body',
+    'object_type' => 'comment',
+    'bundle' => 'comment_node_' . $info->type,
+    'settings' => array('text_processing' => 1),
+    // Hides field label by default.
+    'display' => array(
+      'full' => array(
+        'label' => 'hidden',
+      ),
+    ),
+  );
+  field_create_instance($instance);
+}
+
 /**
  * Implements hook_permission().
  */
@@ -472,6 +496,7 @@ function comment_new_page_count($num_comments, $new_replies, $node) {
 function theme_comment_block() {
   $items = array();
   $number = variable_get('comment_block_count', 10);
+
   foreach (comment_get_recent($number) as $comment) {
     $items[] = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . '<br />' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed)));
   }
@@ -844,15 +869,37 @@ function comment_build_content($comment, $node, $build_mode = 'full') {
   // Remove previously built content, if exists.
   $comment->content = array();
 
-  // Build comment body.
-  $comment->content['comment_body'] = array(
-    '#markup' => check_markup($comment->comment, $comment->format, '', TRUE),
-  );
-
   // Build fields content.
   field_attach_prepare_view('comment', array($comment->cid => $comment), $build_mode);
   $comment->content += field_attach_view('comment', $comment, $build_mode);
 
+  // Prior to Drupal 7, the comment body was a simple text variable, but with
+  // Drupal 7, it has been upgraded to a field. However, using theme('field') to
+  // render the comment body would result in a noticeable performance
+  // degradation, considering there can be 50+ comments on a page accessed by
+  // many concurrent users. By unsetting #theme, we avoid the overhead of
+  // theme('field') and instead settle for simply rendering the formatted field
+  // value that exists as a child element of the 'comment_body' render array.
+  // Modules that require the comment body to be rendered as a full field can
+  // restore #theme to 'field' within a hook_comment_view() or
+  // hook_comment_view_alter() implementation.
+  // @todo Bypassing theme('field') is not ideal, because:
+  //   - It results in the field label not being displayed even if the setting
+  //     is for it to be displayed.
+  //   - It results in hook_preprocess_field() functions not running, and
+  //     attributes added in those functions (for example, for RDF) not being
+  //     output.
+  //   - It results in the HTML markup that's within field.tpl.php to not be
+  //     output, requiring theme developers to use different CSS rules for the
+  //     comment body than for all other fields.
+  //   The goal is for theme('field') to be sufficiently optimized prior to
+  //   Drupal 7 release, that this code can be removed, so that the comment body
+  //   is rendered just like all other fields. Otherwise, something else will be
+  //   needed to address the above problems. @see http://drupal.org/node/659788.
+  if (isset($comment->content['comment_body']['#theme']) && ($comment->content['comment_body']['#theme'] === 'field')) {
+    unset($comment->content['comment_body']['#theme']);
+  }
+
   if (empty($comment->in_preview)) {
     $comment->content['links']['comment'] = array(
       '#theme' => 'links',
@@ -1165,17 +1212,14 @@ function comment_node_delete($node) {
  * Implements hook_node_update_index().
  */
 function comment_node_update_index($node) {
-  $text = '';
-  if ($node->comment != COMMENT_NODE_HIDDEN) {
-    $comments = db_query('SELECT subject, comment, format FROM {comment} WHERE nid = :nid AND status = :status', array(
-      ':nid' => $node->nid,
-      ':status' => COMMENT_PUBLISHED
-    ));
-    foreach ($comments as $comment) {
-      $text .= '<h2>' . check_plain($comment->subject) . '</h2>' . check_markup($comment->comment, $comment->format, '', TRUE);
-    }
+  $mode = variable_get('comment_default_mode_' . $node->type, COMMENT_MODE_THREADED);
+  $comments_per_page = variable_get('comment_default_per_page_' . $node->type, 50);
+  if ($node->comment && $cids = comment_get_thread($node, $mode, $comments_per_page)) {
+    $comments = comment_load_multiple($cids);
+    comment_prepare_thread($comments);
+    $build = comment_view_multiple($comments, $node);
   }
-  return $text;
+  return drupal_render($build);
 }
 
 /**
@@ -1296,8 +1340,6 @@ function comment_save($comment) {
           'created' => $comment->created,
           'changed' => $comment->changed,
           'subject' => $comment->subject,
-          'comment' => $comment->comment,
-          'format' => $comment->comment_format,
           'uid' => $comment->uid,
           'name' => $comment->name,
           'mail' => $comment->mail,
@@ -1372,8 +1414,6 @@ function comment_save($comment) {
           'pid' => empty($comment->pid) ? 0 : $comment->pid,
           'uid' => $comment->uid,
           'subject' => $comment->subject,
-          'comment' => $comment->comment,
-          'format' => $comment->comment_format,
           'hostname' => ip_address(),
           'created' => $comment->created,
           'changed' => $comment->changed,
@@ -1713,6 +1753,11 @@ function comment_form($form, &$form_state, $comment) {
     );
   }
 
+  // Sets the author form elements above the subject.
+  $form['author'] = array(
+    '#weight' => -2,
+  );
+
   // Prepare default values for form elements.
   if ($is_admin) {
     $author = ($comment->uid && $comment->name ? $comment->name : $comment->registered_name);
@@ -1815,14 +1860,7 @@ function comment_form($form, &$form_state, $comment) {
     '#maxlength' => 64,
     '#default_value' => $comment->subject,
     '#access' => variable_get('comment_subject_field_' . $node->type, 1) == 1,
-  );
-  $form['comment'] = array(
-    '#type' => 'textarea',
-    '#title' => t('Comment'),
-    '#default_value' => $comment->comment,
-    '#text_format' => isset($comment->format) ? $comment->format : filter_default_format(),
-    '#required' => TRUE,
-    '#rows' => 15,
+    '#weight' => -1,
   );
 
   // Used for conditional validation of author fields.
@@ -1882,8 +1920,7 @@ function comment_preview($comment) {
   $node = node_load($comment->nid);
 
   if (!form_get_errors()) {
-    $comment->format = $comment->comment_format;
-
+    $comment->format = $comment->comment_body[LANGUAGE_NONE][0]['format'];
     // Attach the user and time information.
     if (!empty($comment->name)) {
       $account = user_load_by_name($comment->name);
@@ -2010,13 +2047,15 @@ function comment_submit($comment) {
     // 1) Filter it into HTML
     // 2) Strip out all HTML tags
     // 3) Convert entities back to plain-text.
-    $comment['subject'] = truncate_utf8(trim(decode_entities(strip_tags(check_markup($comment['comment'], $comment['comment_format'])))), 29, TRUE);
+
+    $comment['subject'] = truncate_utf8(trim(decode_entities(strip_tags(check_markup($comment['comment_body'][LANGUAGE_NONE][0]['value'], $comment['comment_body'][LANGUAGE_NONE][0]['format'])))), 29, TRUE);
     // Edge cases where the comment body is populated only by HTML tags will
     // require a default subject.
     if ($comment['subject'] == '') {
       $comment['subject'] = t('(No subject)');
     }
   }
+
   return (object)$comment;
 }
 
@@ -2093,6 +2132,7 @@ function template_preprocess_comment(&$variables) {
   $variables['picture']   = theme_get_setting('toggle_comment_user_picture') ? theme('user_picture', array('account' => $comment)) : '';
   $variables['signature'] = $comment->signature;
   $variables['title']     = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => "comment-$comment->cid"));
+  $variables['permalink'] = l('#', 'comment/' . $comment->cid, array('fragment' => "comment-$comment->cid"));
   $variables['template_files'][] = 'comment-' . $variables['node']->type;
 
   // Helpful $content variable for templates.
@@ -2387,7 +2427,8 @@ function comment_unpublish_action($comment, $context = array()) {
  */
 function comment_unpublish_by_keyword_action($comment, $context) {
   foreach ($context['keywords'] as $keyword) {
-    if (strpos($comment->comment, $keyword) !== FALSE || strpos($comment->subject, $keyword) !== FALSE) {
+    $text = drupal_render($comment);
+    if (strpos($text, $keyword) !== FALSE) {
       $comment->status = COMMENT_NOT_PUBLISHED;
       watchdog('action', 'Unpublished comment %subject.', array('%subject' => $comment->subject));
       break;
@@ -2459,16 +2500,6 @@ function comment_menu_alter(&$items) {
 }
 
 /**
- * Implements hook_filter_format_delete().
- */
-function comment_filter_format_delete($format, $fallback) {
-  db_update('comment')
-    ->fields(array('format' => $fallback->format))
-    ->condition('format', $format->format)
-    ->execute();
-}
-
-/**
  * Implements hook_rdf_mapping().
  */
 function comment_rdf_mapping() {
diff --git modules/comment/comment.pages.inc modules/comment/comment.pages.inc
index 5182c46..1f37f28 100644
--- modules/comment/comment.pages.inc
+++ modules/comment/comment.pages.inc
@@ -108,7 +108,6 @@ function comment_reply($node, $pid = NULL) {
  */
 function comment_approve($comment) {
   $comment->status = COMMENT_PUBLISHED;
-  $comment->comment_format = $comment->format;
   comment_save($comment);
 
   drupal_set_message(t('Comment approved.'));
diff --git modules/comment/comment.test modules/comment/comment.test
index 6d8116f..d4d89b2 100644
--- modules/comment/comment.test
+++ modules/comment/comment.test
@@ -28,8 +28,9 @@ class CommentHelperCase extends DrupalWebTestCase {
    *   array of values to set contact info.
    */
   function postComment($node, $comment, $subject = '', $contact = NULL) {
+    $langcode = LANGUAGE_NONE;
     $edit = array();
-    $edit['comment'] = $comment;
+    $edit['comment_body[' . $langcode . '][0][value]'] = $comment;
 
     $preview_mode = variable_get('comment_preview_article', DRUPAL_OPTIONAL);
     $subject_mode = variable_get('comment_subject_field_article', 1);
@@ -49,6 +50,7 @@ class CommentHelperCase extends DrupalWebTestCase {
     if ($contact !== NULL && is_array($contact)) {
       $edit += $contact;
     }
+
     switch ($preview_mode) {
       case DRUPAL_REQUIRED:
         // Preview required so no save button should be found.
@@ -72,6 +74,7 @@ class CommentHelperCase extends DrupalWebTestCase {
     // Get comment ID
     preg_match('/#comment-([0-9]+)/', $this->getURL(), $match);
 
+
     // Get comment.
     if ($contact !== TRUE) { // If true then attempting to find error message.
       if ($subject) {
@@ -261,6 +264,7 @@ class CommentInterfaceTest extends CommentHelperCase {
    * Test comment interface.
    */
   function testCommentInterface() {
+    $langcode = LANGUAGE_NONE;
     // Set comments to have subject and preview disabled.
     $this->drupalLogin($this->admin_user);
     $this->setCommentPreview(DRUPAL_DISABLED);
@@ -360,7 +364,7 @@ class CommentInterfaceTest extends CommentHelperCase {
     $this->assertTrue($this->node, t('Article node created.'));
     $this->drupalGet('comment/reply/' . $this->node->nid);
     $this->assertNoText('This discussion is closed', t('Posting to node with comments enabled'));
-    $this->assertField('edit-comment', t('Comment body field found.'));
+    $this->assertField('edit-comment-body-' . $langcode . '-0-value', t('Comment body field found.'));
 
     // Delete comment and make sure that reply is also removed.
     $this->drupalLogout();
@@ -406,6 +410,8 @@ class CommentPreviewTest extends CommentHelperCase {
    * Test comment preview.
    */
   function testCommentPreview() {
+    $langcode = LANGUAGE_NONE;
+
     // As admin user, configure comment settings.
     $this->drupalLogin($this->admin_user);
     $this->setCommentPreview(TRUE);
@@ -418,23 +424,24 @@ class CommentPreviewTest extends CommentHelperCase {
     $this->drupalLogin($this->web_user);
     $edit = array();
     $edit['subject'] = $this->randomName(8);
-    $edit['comment'] = $this->randomName(16);
+    $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
     $this->drupalPost('node/' . $this->node->nid, $edit, t('Preview'));
 
     // Check that the preview is displaying the title and body.
     $this->assertTitle(t('Preview comment | Drupal'), t('Page title is "Preview comment".'));
     $this->assertText($edit['subject'], t('Subject displayed.'));
-    $this->assertText($edit['comment'], t('Comment displayed.'));
+    $this->assertText($edit['comment_body[' . $langcode . '][0][value]'], t('Comment displayed.'));
 
     // Check that the title and body fields are displayed with the correct values.
     $this->assertFieldByName('subject', $edit['subject'], t('Subject field displayed.'));
-    $this->assertFieldByName('comment', $edit['comment'], t('Comment field displayed.'));
+    $this->assertFieldByName('comment_body[' . $langcode . '][0][value]', $edit['comment_body[' . $langcode . '][0][value]'], t('Comment field displayed.'));
   }
 
   /**
    * Test comment edit and preview.
    */
   function testCommentEditPreview() {
+    $langcode = LANGUAGE_NONE;
     $web_user = $this->drupalCreateUser(array('access comments', 'post comments', 'post comments without approval'));
     $this->drupalLogin($this->admin_user);
     $this->setCommentPreview(TRUE);
@@ -444,23 +451,23 @@ class CommentPreviewTest extends CommentHelperCase {
 
     $edit = array();
     $edit['subject'] = $this->randomName(8);
-    $edit['comment'] = $this->randomName(16);
+    $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
     $edit['name'] = $web_user->name;
     $edit['date'] = '2008-03-02 17:23 +0300';
     $expected_date = format_date(strtotime($edit['date']));
-    $comment = $this->postComment($this->node, $edit['subject'], $edit['comment'], TRUE);
+    $comment = $this->postComment($this->node, $edit['subject'], $edit['comment_body[' . $langcode . '][0][value]'], TRUE);
     $this->drupalPost('comment/' . $comment->id . '/edit', $edit, t('Preview'));
 
     // Check that the preview is displaying the subject, comment, author and date correctly.
     $this->assertTitle(t('Preview comment | Drupal'), t('Page title is "Preview comment".'));
     $this->assertText($edit['subject'], t('Subject displayed.'));
-    $this->assertText($edit['comment'], t('Comment displayed.'));
+    $this->assertText($edit['comment_body[' . $langcode . '][0][value]'], t('Comment displayed.'));
     $this->assertText($edit['name'], t('Author displayed.'));
     $this->assertText($expected_date, t('Date displayed.'));
 
     // Check that the title and body fields are displayed with the correct values.
     $this->assertFieldByName('subject', $edit['subject'], t('Subject field displayed.'));
-    $this->assertFieldByName('comment', $edit['comment'], t('Comment field displayed.'));
+    $this->assertFieldByName('comment_body[' . $langcode . '][0][value]', $edit['comment_body[' . $langcode . '][0][value]'], t('Comment field displayed.'));
     $this->assertFieldByName('name', $edit['name'], t('Author field displayed.'));
     $this->assertFieldByName('date', $edit['date'], t('Date field displayed.'));
   }
diff --git modules/comment/comment.tpl.php modules/comment/comment.tpl.php
index dcb8715..979e99d 100644
--- modules/comment/comment.tpl.php
+++ modules/comment/comment.tpl.php
@@ -18,6 +18,7 @@
  *   Preprocess functions can reformat it by calling format_date() with the
  *   desired parameters on the $comment->changed variable.
  * - $new: New comment marker.
+ * - $permalink: Comment permalink.
  * - $picture: Authors picture.
  * - $signature: Authors signature.
  * - $status: Comment status. Possible values are:
@@ -64,6 +65,7 @@
   <h3<?php print $title_attributes; ?>><?php print $title ?></h3>
 
   <div class="submitted">
+    <?php print $permalink; ?>
     <?php
       print t('Submitted by !username on !datetime.',
         array('!username' => $author, '!datetime' => $created));
diff --git modules/field_ui/field_ui.test modules/field_ui/field_ui.test
index 56063f2..dc06e94 100644
--- modules/field_ui/field_ui.test
+++ modules/field_ui/field_ui.test
@@ -177,7 +177,9 @@ class FieldUITestCase extends DrupalWebTestCase {
 
     // Re-load the manage fields page.
     $this->drupalGet('admin/structure/types/manage/' . $this->hyphen_type . '/fields/');
-    $this->assertNoText(t('Body'), t('Body field was deleted.'));
+    // Since the comment still has a body field, we need to target the Body
+    // label in the field list.
+    $this->assertNoRaw('<span class="label-field">' . t('Body') . '</span>', t('Body field was deleted.'));
 
     // Re-add body field by visiting the content type edit page.
     $edit = array('body_label' => 'New body field');
diff --git modules/forum/forum.test modules/forum/forum.test
index a0297df..33cf953 100644
--- modules/forum/forum.test
+++ modules/forum/forum.test
@@ -78,7 +78,8 @@ class ForumTestCase extends DrupalWebTestCase {
 
     // Test adding a comment to a forum topic.
     $node = $this->createForumTopic($this->forum, FALSE);
-    $this->drupalPost("node/$node->nid", array('comment' => $this->randomName()), t('Save'));
+    $edit_comment['comment_body[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName();
+    $this->drupalPost("node/$node->nid", $edit_comment, t('Save'));
     $this->assertResponse(200);
 
     // Test editing a forum topic that has a comment.
diff --git modules/search/search.test modules/search/search.test
index 7a37cf1..f0b5254 100644
--- modules/search/search.test
+++ modules/search/search.test
@@ -353,7 +353,9 @@ class SearchRankingTestCase extends DrupalWebTestCase {
     $this->refreshVariables();
 
     // Add a comment to one of the nodes.
-    $edit = array('subject' => 'my comment title', 'comment' => 'some random comment');
+    $edit = array();
+    $edit['subject'] = 'my comment title';
+    $edit['comment_body[' . LANGUAGE_NONE . '][0][value]'] = 'some random comment';
     $this->drupalGet('comment/reply/' . $nodes['comments'][1]->nid);
     $this->drupalPost(NULL, $edit, t('Preview'));
     $this->drupalPost(NULL, $edit, t('Save'));
@@ -488,18 +490,25 @@ class SearchCommentTestCase extends DrupalWebTestCase {
     // Create a node.
     $node = $this->drupalCreateNode(array('type' => 'article'));
     // Post a comment using 'Full HTML' text format.
-    $edit_comment = array(
-      'subject' => $this->randomName(2),
-      'comment' => '<h1>' . $comment_body . '</h1>',
-      'comment_format' => 2,
-    );
+    $edit_comment = array();
+    $edit_comment['subject'] = $this->randomName(2);
+    $edit_comment['comment_body[' . LANGUAGE_NONE . '][0][value]'] = '<h1>' . $comment_body . '</h1>';
+    $edit_comment['comment_body[' . LANGUAGE_NONE . '][0][value_format]'] = 2;
     $this->drupalPost('comment/reply/' . $node->nid, $edit_comment, t('Save'));
 
     // Invoke search index update.
     $this->drupalLogout();
     $this->cronRun();
 
-    // Search for $title.
+    // Search for the comment subject.
+    $edit = array(
+      'search_block_form' => $edit_comment['subject'],
+    );
+    $this->drupalPost('', $edit, t('Search'));
+    $this->assertText($node->title[LANGUAGE_NONE][0]['value'], t('Node found in search results.'));
+    $this->assertText($edit_comment['subject'], t('Comment subject found in search results.'));
+
+    // Search for the comment body.
     $edit = array(
       'search_block_form' => $comment_body,
     );
@@ -507,10 +516,9 @@ class SearchCommentTestCase extends DrupalWebTestCase {
     $this->assertText($node->title[LANGUAGE_NONE][0]['value'], t('Node found in search results.'));
 
     // Verify that comment is rendered using proper format.
-    $this->assertText($edit_comment['subject'], t('Comment subject found in search results.'));
     $this->assertText($comment_body, t('Comment body text found in search results.'));
     $this->assertNoRaw(t('n/a'), t('HTML in comment body is not hidden.'));
-    $this->assertNoRaw(check_plain($edit_comment['comment']), t('HTML in comment body is not escaped.'));
+    $this->assertNoRaw(check_plain($edit_comment['comment_body[' . LANGUAGE_NONE . '][0][value]']), t('HTML in comment body is not escaped.'));
 
     // Hide comments.
     $this->drupalLogin($this->admin_user);
diff --git modules/tracker/tracker.test modules/tracker/tracker.test
index ff2509b..76a6e35 100644
--- modules/tracker/tracker.test
+++ modules/tracker/tracker.test
@@ -74,7 +74,7 @@ class TrackerTest extends DrupalWebTestCase {
     ));
     $comment = array(
       'subject' => $this->randomName(),
-      'comment' => $this->randomName(20),
+      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
     );
     $this->drupalPost('comment/reply/' . $other_published_my_comment->nid, $comment, t('Save'));
 
@@ -134,7 +134,7 @@ class TrackerTest extends DrupalWebTestCase {
     // Add a comment to the page.
     $comment = array(
       'subject' => $this->randomName(),
-      'comment' => $this->randomName(20),
+      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
     );
     $this->drupalPost('comment/reply/' . $node->nid, $comment, t('Save')); // The new comment is automatically viewed by the current user.
 
@@ -146,7 +146,7 @@ class TrackerTest extends DrupalWebTestCase {
     // Add another comment as other_user.
     $comment = array(
       'subject' => $this->randomName(),
-      'comment' => $this->randomName(20),
+      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
     );
     // If the comment is posted in the same second as the last one then Drupal
     // can't tell a difference, so wait one second here.
@@ -179,7 +179,7 @@ class TrackerTest extends DrupalWebTestCase {
     $this->drupalLogin($this->other_user);
     $comment = array(
       'subject' => $this->randomName(),
-      'comment' => $this->randomName(20),
+      'comment_body[' . LANGUAGE_NONE . '][0][value]' => $this->randomName(20),
     );
     $this->drupalPost('comment/reply/' . $nodes[3]->nid, $comment, t('Save'));
 
diff --git modules/trigger/trigger.test modules/trigger/trigger.test
index 38f6cbe..83d7748 100644
--- modules/trigger/trigger.test
+++ modules/trigger/trigger.test
@@ -255,7 +255,7 @@ class TriggerOtherTestCase extends DrupalWebTestCase {
     $node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1));
     $edit = array();
     $edit['subject'] = $this->randomName(10);
-    $edit['comment'] = $this->randomName(10) . ' ' . $this->randomName(10);
+    $edit['comment_body[' . LANGUAGE_NONE . '][0][value]'] = $this->randomName(10) . ' ' . $this->randomName(10);
     $this->drupalGet('comment/reply/' . $node->nid);
     $this->drupalPost(NULL, $edit, t('Save'));
 
diff --git modules/user/user.test modules/user/user.test
index ced3a00..1a2e625 100644
--- modules/user/user.test
+++ modules/user/user.test
@@ -537,10 +537,11 @@ class UserCancelTestCase extends DrupalWebTestCase {
     $node = $this->drupalCreateNode(array('uid' => $account->uid));
 
     // Create comment.
-    $edit = array(
-      'subject' => $this->randomString(),
-      'comment' => $this->randomString(),
-    );
+    $langcode = LANGUAGE_NONE;
+    $edit = array();
+    $edit['subject'] = $this->randomName(8);
+    $edit['comment_body[' . $langcode . '][0][value]'] = $this->randomName(16);
+
     $this->drupalPost('comment/reply/' . $node->nid, $edit, t('Preview'));
     $this->drupalPost(NULL, array(), t('Save'));
     $this->assertText(t('Your comment has been posted.'));
