diff --git modules/comment/comment.install modules/comment/comment.install
index 8d25520..008dec1 100644
--- modules/comment/comment.install
+++ modules/comment/comment.install
@@ -10,27 +10,15 @@
  * Implements hook_install().
  */
 function comment_install() {
-  // Create comment body field.
-  if (!field_info_field('comment_body')) {
-    $field = array(
-      'field_name' => 'comment_body',
-      'type' => 'text_long',
-      'entity_types' => array('comment'),
-    );
-    field_create_field($field);
-  }
-
   // There is a separate comment bundle for each node type to allow for
   // per-node-type customization of comment fields. Each one of these bundles
   // needs a comment body field instance. A comment bundle is needed even for
   // node types whose comments are disabled by default, because individual nodes
   // may override that default.
-  // @todo This should be changed to call field_attach_create_bundle() instead,
-  //   and a comment_field_attach_create_bundle() function should be added to
-  //   handle the creation of the comment body field instance.
   foreach (node_type_get_types() as $type => $info) {
     if (!isset($info->is_new) && !isset($info->disabled) && !field_info_instance('comment', 'comment_body', 'comment_node_' . $info->type)) {
-      _comment_body_field_instance_create($info);
+      field_attach_create_bundle('comment', 'comment_node_' . $info->type);
+      _comment_body_field_create($info);
     }
   }
 }
diff --git modules/comment/comment.module modules/comment/comment.module
index 198327f..c5b197c 100644
--- modules/comment/comment.module
+++ modules/comment/comment.module
@@ -317,9 +317,7 @@ function comment_count_unpublished() {
  */
 function comment_node_type_insert($info) {
   field_attach_create_bundle('comment', 'comment_node_' . $info->type);
-  // @todo Create a comment_field_attach_create_bundle() function, and have that
-  //   function create the comment body field instance.
-  _comment_body_field_instance_create($info);
+  _comment_body_field_create($info);
 }
 
 /**
@@ -351,10 +349,20 @@ function comment_node_type_delete($info) {
 }
 
  /**
- * Helper function which creates a comment body field instance for a given node
+ * Helper function which creates a comment_body field instance for a given node
  * type.
  */
-function _comment_body_field_instance_create($info) {
+function _comment_body_field_create($info) {
+  // Create the field if needed.
+  if (!field_info_field('comment_body')) {
+    $field = array(
+      'field_name' => 'comment_body',
+      'type' => 'text_long',
+      'entity_types' => array('comment'),
+    );
+    field_create_field($field);
+  }
+
   // Attaches the body field by default.
   $instance = array(
     'field_name' => 'comment_body',
diff --git modules/comment/comment.test modules/comment/comment.test
index 103fbfc..b238341 100644
--- modules/comment/comment.test
+++ modules/comment/comment.test
@@ -1409,3 +1409,49 @@ class CommentTokenReplaceTestCase extends CommentHelperCase {
     }
   }
 }
+
+class CommentFields extends CommentHelperCase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Comment fields',
+      'description' => 'Tests fields on comments.',
+      'group' => 'Comment',
+    );
+  }
+
+  /**
+   * Tests that the default 'comment_body' field is correctly added.
+   */
+  function testCommentDefaultFields() {
+    // Do not make assumptions on default node types created by the test
+    // install profile, and create our own.
+    $this->drupalCreateContentType(array('type' => 'test_node_type'));
+
+    // Check that the 'comment_body' field is present on all comment bundles.
+    $instances = field_info_instances('comment');
+    foreach (node_type_get_types() as $type_name => $info) {
+      $this->assertTrue(isset($instances['comment_node_' . $type_name]['comment_body']), t('The comment_body field is present for comments on type @type', array('@type' => $type_name)));
+
+      // Delete the instance along the way.
+      field_delete_instance($instances['comment_node_' . $type_name]['comment_body']);
+    }
+
+    // @todo simulate http://drupal.org/node/915906
+    field_delete_field('comment_body');
+
+    // Check that the 'comment_body' field is deleted.
+    $field = field_info_field('comment_body');
+    $this->assertTrue(empty($field), t('The comment_body field was deleted'));
+
+    // Create a new content type.
+    $type_name = 'test_node_type_2';
+    $this->drupalCreateContentType(array('type' => $type_name));
+
+    // Check that the 'comment_body' field exists and has an instance on the
+    // new comment bundle.
+    $field = field_info_field('comment_body');
+    $this->assertTrue($field, t('The comment_body field exists'));
+    $instances = field_info_instances('comment');
+    $this->assertTrue(isset($instances['comment_node_' . $type_name]['comment_body']), t('The comment_body field is present for comments on type @type', array('@type' => $type_name)));
+  }
+}
