diff --git a/core/modules/comment/migration_templates/d7_comment.yml b/core/modules/comment/migration_templates/d7_comment.yml
new file mode 100755
index 0000000..51958d5
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment.yml
@@ -0,0 +1,45 @@
+id: d7_comment
+label: Drupal 7 comments
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d7_comment
+  constants:
+    entity_type: node
+process:
+  cid: cid
+  pid:
+    plugin: migration
+    migration: d7_comment
+    source: pid
+  entity_id: nid
+  entity_type: 'constants/entity_type'
+  # field_name & comment_type is calculated in
+  # \Drupal\migrate_drupal\Plugin\migrate\source\d6\Comment::prepareRow()
+  field_name: field_name
+  comment_type: comment_type
+  subject: subject
+  uid: uid
+  name: name
+  mail: mail
+  homepage: homepage
+  hostname: hostname
+  created: created
+  changed: changed
+  status: status
+  thread: thread
+  'comment_body/value': comment
+  'comment_body/format':
+    plugin: migration
+    migration: d7_filter_format
+    source: format
+destination:
+  plugin: entity:comment
+migration_dependencies:
+  required:
+    - d7_node
+    - d7_comment_type
+    - d7_user
+    - d7_comment_entity_display
+    - d7_comment_entity_form_display
+    - d7_filter_format
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_display.yml b/core/modules/comment/migration_templates/d7_comment_entity_display.yml
new file mode 100755
index 0000000..9412ca7
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment_entity_display.yml
@@ -0,0 +1,25 @@
+id: d7_comment_entity_display
+label: Drupal 7 comment display configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d6_comment_variable
+  constants:
+    entity_type: node
+    field_name: comment
+    view_mode: default
+    options:
+      label: hidden
+      type: comment_default
+      weight: 20
+process:
+  entity_type: 'constants/entity_type'
+  field_name: 'constants/field_name'
+  view_mode: 'constants/view_mode'
+  options: 'constants/options'
+  bundle: node_type
+destination:
+  plugin: component_entity_display
+migration_dependencies:
+  required:
+    - d7_comment_field_instance
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml b/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml
new file mode 100755
index 0000000..e6928f5
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment_entity_form_display.yml
@@ -0,0 +1,24 @@
+id: d7_comment_entity_form_display
+label: Drupal 7 comment field form display configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d6_comment_variable
+  constants:
+    entity_type: node
+    field_name: comment
+    form_mode: default
+    options:
+      type: comment_default
+      weight: 20
+process:
+  entity_type: 'constants/entity_type'
+  field_name: 'constants/field_name'
+  form_mode: 'constants/form_mode'
+  options: 'constants/options'
+  bundle: node_type
+destination:
+  plugin: component_entity_form_display
+migration_dependencies:
+  required:
+    - d7_comment_field_instance
diff --git a/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml b/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
new file mode 100755
index 0000000..50eef07
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment_entity_form_display_subject.yml
@@ -0,0 +1,31 @@
+id: d7_comment_entity_form_display_subject
+label: Drupal 7 comment subject form display configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d6_comment_variable_per_comment_type
+  constants:
+    entity_type: comment
+    field_name: subject
+    form_mode: default
+    options:
+      type: string_textfield
+      weight: 10
+process:
+  entity_type: 'constants/entity_type'
+  field_name: 'constants/field_name'
+  form_mode: 'constants/form_mode'
+  options: 'constants/options'
+  hidden:
+    plugin: static_map
+    source: comment_type
+    default_value: false
+    map:
+      comment_no_subject: true # Hide subject field
+      comment: false
+  bundle: comment_type
+destination:
+  plugin: component_entity_form_display
+migration_dependencies:
+  required:
+    - d7_comment_type
diff --git a/core/modules/comment/migration_templates/d7_comment_field.yml b/core/modules/comment/migration_templates/d7_comment_field.yml
new file mode 100755
index 0000000..2c7422c
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment_field.yml
@@ -0,0 +1,19 @@
+id: d7_comment_field
+label: Drupal 7 comment field configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d6_comment_variable_per_comment_type
+  constants:
+    entity_type: node
+    type: comment
+process:
+  entity_type: 'constants/entity_type'
+  field_name: comment_type
+  type: 'constants/type'
+  'settings/comment_type': comment_type
+destination:
+  plugin: entity:field_storage_config
+migration_dependencies:
+  required:
+    - d7_comment_type
diff --git a/core/modules/comment/migration_templates/d7_comment_field_instance.yml b/core/modules/comment/migration_templates/d7_comment_field_instance.yml
new file mode 100755
index 0000000..9867f05
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment_field_instance.yml
@@ -0,0 +1,33 @@
+id: d7_comment_field_instance
+label: Drupal 7 comment field instance configuration
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d6_comment_variable
+  constants:
+    entity_type: node
+    label: Comments
+    required: true
+process:
+  entity_type: 'constants/entity_type'
+  label: 'constants/label'
+  required: 'constants/required'
+  field_name:
+    plugin: static_map
+    source: comment_subject_field
+    default_value: comment
+    map:
+      0: comment_no_subject
+  bundle: node_type
+  'default_value/0/status': comment
+  'settings/default_mode': comment_default_mode
+  'settings/per_page': comment_default_per_page
+  'settings/anonymous': comment_anonymous
+  'settings/form_location': comment_form_location
+  'settings/preview': comment_preview
+destination:
+  plugin: entity:field_config
+migration_dependencies:
+  required:
+    - d7_comment_field
+    - d7_node_type
diff --git a/core/modules/comment/migration_templates/d7_comment_type.yml b/core/modules/comment/migration_templates/d7_comment_type.yml
new file mode 100755
index 0000000..a2bc7dd
--- /dev/null
+++ b/core/modules/comment/migration_templates/d7_comment_type.yml
@@ -0,0 +1,15 @@
+id: d7_comment_type
+label: Drupal 7 comment type
+migration_tags:
+  - Drupal 7
+source:
+  plugin: d6_comment_variable_per_comment_type
+  constants:
+    entity_type: node
+process:
+  target_entity_type_id: 'constants/entity_type'
+  id: comment_type
+  label: label
+  description: description
+destination:
+  plugin: entity:comment_type
diff --git a/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php b/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php
new file mode 100755
index 0000000..9ed90e8
--- /dev/null
+++ b/core/modules/comment/src/Plugin/migrate/source/d7/Comment.php
@@ -0,0 +1,113 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\comment\Plugin\migrate\source\d7\Comment.
+ */
+
+namespace Drupal\comment\Plugin\migrate\source\d7;
+
+use Drupal\migrate\Row;
+use Drupal\migrate_drupal\Plugin\migrate\source\DrupalSqlBase;
+
+/**
+ * Drupal 7 comment source from database.
+ *
+ * @MigrateSource(
+ *   id = "d7_comment",
+ *   source_provider = "comment"
+ * )
+ */
+class Comment extends DrupalSqlBase {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function query() {
+    $query = $this->select('comment', 'c')->fields('c');
+    $query->innerJoin('node', 'n', 'c.nid = n.nid');
+    $query->addField('node', 'type');
+    $query->orderBy('c.created');
+    return $query;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function prepareRow(Row $row) {
+    $cid = $row->getSourceProperty('cid');
+    // Find body for this row.
+    $comment_data = $this->getCommentData('field_data_comment_body',$cid);
+
+    if ($this->variableGet('comment_subject_field_' . $row->getSourceProperty('type'), 1)) {
+      // Comment subject visible.
+      $row->setSourceProperty('field_name', 'comment');
+      $row->setSourceProperty('comment_type', 'comment');
+    }
+    else {
+      $row->setSourceProperty('field_name', 'comment_no_subject');
+      $row->setSourceProperty('comment_type', 'comment_no_subject');
+    }
+
+     $row->setSourceProperty('comment',$comment_data['comment_body_value']);
+     $row->setSourceProperty('format',$comment_data['comment_body_format']);
+
+    // In D7, status = 0 means not published and in D8 means the same.
+    // See https://drupal.org/node/237636
+    $row->setSourceProperty('status', $row->getSourceProperty('status'));
+
+    return parent::prepareRow($row);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function fields() {
+    return array(
+      'cid' => $this->t('Comment ID.'),
+      'pid' => $this->t('Parent comment ID. If set to 0, this comment is not a reply to an existing comment.'),
+      'nid' => $this->t('The {node}.nid to which this comment is a reply.'),
+      'uid' => $this->t('The {users}.uid who authored the comment. If set to 0, this comment was created by an anonymous user.'),
+      'subject' => $this->t('The comment title.'),
+      'comment' => $this->t('The comment body.'),
+      'hostname' => $this->t("The author's host name."),
+      'created' => $this->t('The time that the comment was created, as a Unix timestamp.'),
+      'changed' => $this->t('The time that the comment was edited by its author, as a Unix timestamp.'),
+      'status' => $this->t('The published status of a comment. (0 = Published, 1 = Not Published)'),
+      'format' => $this->t('The {filter_formats}.format of the comment body.'),
+      'thread' => $this->t("The vancode representation of the comment's place in a thread."),
+      'name' => $this->t("The comment author's name. Uses {users}.name if the user is logged in, otherwise uses the value typed into the comment form."),
+      'mail' => $this->t("The comment author's email address from the comment form, if user is anonymous, and the 'Anonymous users may/must leave their contact information' setting is turned on."),
+      'homepage' => $this->t("The comment author's home page address from the comment form, if user is anonymous, and the 'Anonymous users may/must leave their contact information' setting is turned on."),
+      'type' => $this->t("The {node}.type to which this comment is a reply."),
+    );
+  }
+
+  public function getCommentData($source,$cid) {
+    return $this->select($source,'f')
+      ->fields('f', array('comment_body_value','comment_body_format','bundle'))
+      ->condition('entity_id', $cid)
+      ->execute()
+      ->fetchAssoc();
+  }
+
+  public function getField($source,$id) {
+    return$this->select($source,'f')
+      ->fields('f', array('field_name'))
+      ->condition('id', $id)
+      ->execute()
+      ->fetchAssoc();
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getIds() {
+    return array(
+      'cid' => array(
+        'type' => 'integer',
+      ),
+    );
+  }
+
+}
