diff --git a/core/modules/comment/comment.admin.inc b/core/modules/comment/comment.admin.inc
index 488c2f9..2d5814e 100644
--- a/core/modules/comment/comment.admin.inc
+++ b/core/modules/comment/comment.admin.inc
@@ -39,7 +39,6 @@ function comment_admin($type = 'new') {
  * @see comment_admin()
  * @see comment_admin_overview_validate()
  * @see comment_admin_overview_submit()
- * @see theme_comment_admin_overview()
  */
 function comment_admin_overview($form, &$form_state, $arg) {
   // Build an 'Update options' form.
@@ -119,7 +118,12 @@ function comment_admin_overview($form, &$form_state, $arg) {
           '#options' => array('attributes' => array('title' => truncate_utf8($comment->comment_body->value, 128)), 'fragment' => 'comment-' . $comment->id()),
         ),
       ),
-      'author' => theme('username', array('account' => comment_prepare_author($comment))),
+      'author' => array(
+        'data' => array(
+          '#theme' => 'username',
+          '#account' => comment_prepare_author($comment)
+        ),
+      ),
       'posted_in' => array(
         'data' => array(
           '#type' => 'link',
diff --git a/core/modules/comment/comment.api.php b/core/modules/comment/comment.api.php
index 793d9ad..a27899e 100644
--- a/core/modules/comment/comment.api.php
+++ b/core/modules/comment/comment.api.php
@@ -113,8 +113,7 @@ function hook_comment_view(\Drupal\comment\Plugin\Core\Entity\Comment $comment,
  * If the module wishes to act on the rendered HTML of the comment rather than
  * the structured content array, it may use this hook to add a #post_render
  * callback. Alternatively, it could also implement hook_preprocess_HOOK() for
- * comment.tpl.php. See drupal_render() and theme() documentation respectively
- * for details.
+ * comment.html.twig. See drupal_render() documentation for details.
  *
  * @param $build
  *   A renderable array representing the comment.
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 5690c72..e19a82c 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -197,21 +197,16 @@ function comment_field_extra_fields() {
 function comment_theme() {
   return array(
     'comment_block' => array(
+      'template' => 'comment-block',
       'variables' => array('number' => NULL),
     ),
-    'comment_preview' => array(
-      'variables' => array('comment' => NULL),
-    ),
     'comment' => array(
-      'template' => 'comment',
       'render element' => 'elements',
-    ),
-    'comment_post_forbidden' => array(
-      'variables' => array('node' => NULL),
+      'template' => 'comment',
     ),
     'comment_wrapper' => array(
-      'template' => 'comment-wrapper',
       'render element' => 'content',
+      'template' => 'comment-wrapper',
     ),
   );
 }
@@ -554,26 +549,6 @@ function comment_new_page_count($num_comments, $new_replies, EntityInterface $no
 }
 
 /**
- * Returns HTML for a list of recent comments.
- *
- * @ingroup themeable
- */
-function theme_comment_block($variables) {
-  $items = array();
-  $number = $variables['number'];
-  foreach (comment_get_recent($number) as $comment) {
-    $items[] = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . '&nbsp;<span>' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed))) . '</span>';
-  }
-
-  if ($items) {
-    return theme('item_list', array('items' => $items));
-  }
-  else {
-    return t('No comments available.');
-  }
-}
-
-/**
  * Implements hook_node_view().
  */
 function comment_node_view(EntityInterface $node, EntityDisplay $display, $view_mode) {
@@ -628,7 +603,7 @@ function comment_node_view(EntityInterface $node, EntityDisplay $display, $view_
         }
         else {
           $links['comment-forbidden'] = array(
-            'title' => theme('comment_post_forbidden', array('node' => $node)),
+            'title' => comment_forbidden_message($node),
             'html' => TRUE,
           );
         }
@@ -658,7 +633,7 @@ function comment_node_view(EntityInterface $node, EntityDisplay $display, $view_
         }
         else {
           $links['comment-forbidden'] = array(
-            'title' => theme('comment_post_forbidden', array('node' => $node)),
+            'title' => comment_forbidden_message($node),
             'html' => TRUE,
           );
         }
@@ -960,7 +935,7 @@ function comment_links(Comment $comment, EntityInterface $node) {
       );
     }
     if (empty($links)) {
-      $links['comment-forbidden']['title'] = theme('comment_post_forbidden', array('node' => $node));
+      $links['comment-forbidden']['title'] = comment_forbidden_message($node);
       $links['comment-forbidden']['html'] = TRUE;
     }
   }
@@ -1583,9 +1558,36 @@ function comment_prepare_author(Comment $comment) {
 }
 
 /**
- * Preprocesses variables for comment.tpl.php.
+ * Prepares variables for comment block templates.
+ *
+ * Default template: comment-block.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - number: The number of recent comments to display.
+ */
+function template_preprocess_comment_block(&$variables) {
+  $items = array();
+  foreach (comment_get_recent($variables['number']) as $comment) {
+    $items[] = l($comment->subject, 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . '&nbsp;<span>' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed))) . '</span>';
+  }
+  if (!empty($items)) {
+    $variables['comments'] = array(
+      '#theme' => 'item_list',
+      '#items' => $items,
+    );
+  }
+}
+
+/**
+ * Prepares variables for comment templates.
  *
- * @see comment.tpl.php
+ * Default template: comment.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - elements: An associative array containing the comment and node objects.
+ *     Array keys: #comment, #node.
  */
 function template_preprocess_comment(&$variables) {
   $comment = $variables['elements']['#comment'];
@@ -1594,6 +1596,7 @@ function template_preprocess_comment(&$variables) {
   $variables['node'] = $node;
 
   $account = comment_prepare_author($comment);
+  // @todo Do not call theme() here. We do this for purposes of t().
   $variables['author'] = theme('username', array('account' => $account));
   $variables['new'] = $comment->new->value ? t('new') : '';
   $variables['created'] = format_date($comment->created->value);
@@ -1613,6 +1616,7 @@ function template_preprocess_comment(&$variables) {
   else {
     $variables['user_picture'] = array();
   }
+
   if (config('user.settings')->get('signatures') && !empty($account->signature)) {
     $variables['signature'] = check_markup($account->signature, $account->signature_format, '', TRUE) ;
   }
@@ -1632,6 +1636,7 @@ function template_preprocess_comment(&$variables) {
     $comment_parent = $comment->pid->entity;
     $account_parent = comment_prepare_author($comment);
     $variables['parent_comment'] = $comment_parent;
+    // @todo Do not call theme() here. We do this for purposes of t().
     $variables['parent_author'] = theme('username', array('account' => $account_parent));
     $variables['parent_created'] = format_date($comment_parent->created->value);
     // Avoid calling format_date() twice on the same timestamp.
@@ -1693,66 +1698,73 @@ function template_preprocess_comment(&$variables) {
       $variables['attributes']['class'][] = 'by-viewer';
     }
   }
+
+  $variables['content_attributes']['class'][] = 'content';
 }
 
 /**
- * Returns HTML for a "you can't post comments" notice.
+ * Provides a message if posting comments is forbidden.
  *
- * @param $variables
- *   An associative array containing:
- *   - node: The comment node.
+ * If authenticated users can post comments, a message is returned that prompts
+ * the anonymous user to log in (or register, if applicable) that redirects to
+ * node comment form. Otherwise, no message is returned.
  *
- * @ingroup themeable
+ * @param \Drupal\Core\Entity\EntityInterface $node
+ *   The node the comment is attached to.
  */
-function theme_comment_post_forbidden($variables) {
-  $node = $variables['node'];
-  global $user;
+function comment_forbidden_message(EntityInterface $node) {
 
+  // Whether the user will be able to post comments once logged in.
   // Since this is expensive to compute, we cache it so that a page with many
   // comments only has to query the database once for all the links.
-  $authenticated_post_comments = &drupal_static(__FUNCTION__, NULL);
-
-  if (!$user->uid) {
-    if (!isset($authenticated_post_comments)) {
-      // We only output a link if we are certain that users will get permission
-      // to post comments by logging in.
-      $comment_roles = user_roles(TRUE, 'post comments');
-      $authenticated_post_comments = isset($comment_roles[DRUPAL_AUTHENTICATED_RID]);
-    }
-
-    if ($authenticated_post_comments) {
-      // We cannot use drupal_get_destination() because these links
-      // sometimes appear on /node and taxonomy listing pages.
-      if (variable_get('comment_form_location_' . $node->type, COMMENT_FORM_BELOW) == COMMENT_FORM_SEPARATE_PAGE) {
-        $destination = array('destination' => "comment/reply/$node->nid#comment-form");
-      }
-      else {
-        $destination = array('destination' => "node/$node->nid#comment-form");
-      }
+  $auth_post_comments = &drupal_static(__FUNCTION__, NULL);
+  if (!isset($auth_post_comments)) {
+    $comment_roles = user_roles(TRUE, 'post comments');
+    $auth_post_comments = isset($comment_roles[DRUPAL_AUTHENTICATED_RID]);
+  }
 
-      if (config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) {
-        // Users can register themselves.
-        return t('<a href="@login">Log in</a> or <a href="@register">register</a> to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination))));
-      }
-      else {
-        // Only admins can add new users, no public registration.
-        return t('<a href="@login">Log in</a> to post comments', array('@login' => url('user/login', array('query' => $destination))));
-      }
+  if (!user_is_logged_in() && $auth_post_comments) {
+    // Build login and register links. We cannot use drupal_get_destination()
+    // because these links sometimes appear on /node and taxonomy listing pages.
+    if (variable_get('comment_form_location_' . $node->type, COMMENT_FORM_BELOW) == COMMENT_FORM_SEPARATE_PAGE) {
+      $destination = array('destination' => "comment/reply/$node->nid#comment-form");
+    }
+    else {
+      $destination = array('destination' => "node/$node->nid#comment-form");
+    }
+    // Message depends on whether users may register accounts.
+    if (config('user.settings')->get('register') != USER_REGISTER_ADMINISTRATORS_ONLY) {
+      $message = t('<a href="@login">Log in</a> or <a href="@register">register</a> to post comments', array('@login' => url('user/login', array('query' => $destination)), '@register' => url('user/register', array('query' => $destination))));
+    }
+    else {
+      $message = t('<a href="@login">Log in</a> to post comments', array('@login' => url('user/login', array('query' => $destination))));
     }
   }
+  else {
+    $message = '';
+  }
+
+  return $message;
 }
 
 /**
- * Preprocesses variables for comment-wrapper.tpl.php.
+ * Prepares variables for comment wrapper templates.
  *
- * @see comment-wrapper.tpl.php
+ * Default template: comment-wrapper.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - content: An associative array containing render arrays for the list of
+ *     comments, and the comment form. Array keys: comments, comment_form.
  */
 function template_preprocess_comment_wrapper(&$variables) {
   // Provide contextual information.
   $variables['node'] = $variables['content']['#node'];
   $variables['display_mode'] = variable_get('comment_default_mode_' . $variables['node']->type, COMMENT_MODE_THREADED);
-  // The comment form is optional and may not exist.
-  $variables['content'] += array('comment_form' => array());
+
+  // Create separate variables for the comments and comment form.
+  $variables['comments'] = $variables['content']['comments'];
+  $variables['form'] = $variables['content']['comment_form'];
 }
 
 /**
diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
index a5e5f15..2da7951 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
@@ -91,7 +91,8 @@ public function form(array $form, array &$form_state, EntityInterface $comment)
     elseif ($user->uid) {
       $form['author']['name']['#type'] = 'item';
       $form['author']['name']['#value'] = $form['author']['name']['#default_value'];
-      $form['author']['name']['#markup'] = theme('username', array('account' => $user));
+      $form['author']['name']['#theme'] = 'username';
+      $form['author']['name']['#account'] = $user;
     }
 
     // Add author e-mail and homepage fields depending on the current user.
@@ -258,7 +259,6 @@ public function buildEntity(array $form, array &$form_state) {
    */
   public function submit(array $form, array &$form_state) {
     $comment = parent::submit($form, $form_state);
-
     // If the comment was posted by a registered user, assign the author's ID.
     // @todo Too fragile. Should be prepared and stored in comment_form()
     // already.
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php
index 5585650..d3eba8a 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentLinksTest.php
@@ -260,7 +260,7 @@ function assertCommentLinks(array $info) {
 
         // Anonymous users should see a note to log in or register in case
         // authenticated users are allowed to post comments.
-        // @see theme_comment_post_forbidden()
+        // @see comment-post-forbidden.html.twig
         if (!$this->loggedInUser) {
           if (user_access('post comments', $this->web_user)) {
             // The note depends on whether users are actually able to register.
diff --git a/core/modules/comment/templates/comment-block.html.twig b/core/modules/comment/templates/comment-block.html.twig
new file mode 100644
index 0000000..2ec3d00
--- /dev/null
+++ b/core/modules/comment/templates/comment-block.html.twig
@@ -0,0 +1,19 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a list of recent comments.
+ *
+ * Available variables:
+ * - comments: A list of recent comments.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_comment_block()
+ *
+ * @ingroup themeable
+ */
+#}
+{% if not comments %}
+  {{ 'No comments available.'|t }}
+{% else %}
+  {{ comments }}
+{% endif %}
diff --git a/core/modules/comment/templates/comment-wrapper.html.twig b/core/modules/comment/templates/comment-wrapper.html.twig
new file mode 100644
index 0000000..4d25929
--- /dev/null
+++ b/core/modules/comment/templates/comment-wrapper.html.twig
@@ -0,0 +1,55 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a comments container.
+ *
+ * Available variables:
+ * - comments: List of comments rendered through comment.html.twig.
+ * - form: The 'Add new comment' form.
+ * - content: The content-related elements for the comment display. Use
+ *   'content' to print them all, or print a subset such as
+ *   'content.comment_form'.
+ * - attributes: Remaining HTML attributes for the containing element.
+ *   It includes the 'class' information, which includes:
+ *   - comment-wrapper: The current template type, i.e., "theming hook".
+ *   - title_prefix: Additional output populated by modules, intended to be
+ *     displayed in front of the main title tag that appears in the template.
+ *   - title_suffix: Additional title output populated by modules, intended to
+ *     be displayed after the main title tag that appears in the template.
+ *
+ * The following variables are provided for contextual information.
+ * - node: The node entity to which the comments belong.
+ * - display_mode: The display mode for the comment listing, flat or threaded.
+ *   The constants below show the possible values and should be used for
+ *   comparison, as in the following example:
+ *   @code
+ *   {% if display_mode is constant('COMMENT_MODE_THREADED') %}
+ *     <h3>{{ 'These comments are displayed in a threaded list.'|t }}</h3>
+ *   {% endif %}
+ *   @endcode
+ *   - COMMENT_MODE_FLAT
+ *   - COMMENT_MODE_THREADED
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_comment_wrapper()
+ *
+ * @ingroup themeable
+ */
+#}
+<section id="comments" class="{{ attributes.class }}"{{ attributes }}>
+  {# @todo Forum module should extend the comment template to keep the code in
+       here clean. http://drupal.org/node/1285842 #}
+  {% if comments and node.type != 'forum' %}
+    {{ title_prefix }}
+    <h2 class="title">{{ 'Comments'|t }}</h2>
+    {{ title_suffix }}
+  {% endif %}
+
+  {{ comments }}
+
+  {% if form %}
+    <h2 class="title comment-form">{{ 'Add new comment'|t }}</h2>
+    {{ form }}
+  {% endif %}
+
+</section>
diff --git a/core/modules/comment/templates/comment-wrapper.tpl.php b/core/modules/comment/templates/comment-wrapper.tpl.php
deleted file mode 100644
index ac1c27f..0000000
--- a/core/modules/comment/templates/comment-wrapper.tpl.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * @file
- * Provides an HTML container for comments.
- *
- * Available variables:
- * - $content: The array of content-related elements for the node. Use
- *   render($content) to print them all, or
- *   print a subset such as render($content['comment_form']).
- * - $attributes: An instance of Attributes class that can be manipulated as an
- *    array and printed as a string.
- *    It includes the 'class' information, which includes:
- *   - comment-wrapper: The current template type, i.e., "theming hook".
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * The following variables are provided for contextual information.
- * - $node: Node entity the comments are attached to.
- * The constants below the variables show the possible values and should be
- * used for comparison.
- * - $display_mode
- *   - COMMENT_MODE_FLAT
- *   - COMMENT_MODE_THREADED
- *
- * @see template_preprocess_comment_wrapper()
- *
- * @ingroup themeable
- */
-?>
-<section id="comments" <?php print $attributes; ?>>
-  <?php if ($content['comments'] && $node->type != 'forum'): ?>
-    <?php print render($title_prefix); ?>
-    <h2 class="title"><?php print t('Comments'); ?></h2>
-    <?php print render($title_suffix); ?>
-  <?php endif; ?>
-
-  <?php print render($content['comments']); ?>
-
-  <?php if ($content['comment_form']): ?>
-    <h2 class="title comment-form"><?php print t('Add new comment'); ?></h2>
-    <?php print render($content['comment_form']); ?>
-  <?php endif; ?>
-</section>
diff --git a/core/modules/comment/templates/comment.html.twig b/core/modules/comment/templates/comment.html.twig
new file mode 100644
index 0000000..a9c6b7d
--- /dev/null
+++ b/core/modules/comment/templates/comment.html.twig
@@ -0,0 +1,108 @@
+{#
+/**
+ * @file
+ * Default theme implementation for comments.
+ *
+ * Available variables:
+ * - author: Comment author. Can be a link or plain text.
+ * - content: The content-related items for the comment display. Use
+ *   {{ content }} to print them all, or print a subset such as
+ *   {{ content.field_example }}. Use hide(content.field_example) to temporarily
+ *   suppress the printing of a given element.
+ * - created: Formatted date and time for when the comment was created.
+ *   Preprocess functions can reformat it by calling format_date() with the
+ *   desired parameters on the $comment->created variable.
+ * - changed: Formatted date and time for when the comment was last changed.
+ *   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.
+ * - submitted: Submission information created from author and created
+ *   during template_preprocess_comment().
+ * - user_picture: The comment author's profile picture.
+ * - signature: The comment author's signature.
+ * - status: Comment status. Possible values are:
+ *   unpublished, published, or preview.
+ * - title: Comment title, linked to the comment.
+ * - attributes.class: List of classes that can be used to style contextually
+ *   through CSS. It can be manipulated through the
+ *   $variables['attributes']['class'] from preprocess functions. The default
+ *   values can be one or more of the following:
+ *   - comment: The current template type; e.g., 'theming hook'.
+ *   - by-anonymous: Comment by an unregistered user.
+ *   - by-node-author: Comment by the author of the parent node.
+ *   - preview: When previewing a new or edited comment.
+ *   The following applies only to viewers who are registered users:
+ *   - unpublished: An unpublished comment visible only to administrators.
+ *   - by-viewer: Comment by the user currently viewing the page.
+ *   - new: New comment since the last visit.
+ * - title_prefix: Additional output populated by modules, intended to be
+ *   displayed in front of the main title tag that appears in the template.
+ * - title_suffix: Additional output populated by modules, intended to be
+ *   displayed after the main title tag that appears in the template.
+ * - content_attributes: List of classes for the styling of the comment content.
+ *
+ * These variables are provided to give context about the parent comment (if
+ * any):
+ * - comment_parent: Full parent comment entity (if any).
+ * - parent_author: Equivalent to author for the parent comment.
+ * - parent_created: Equivalent to created for the parent comment.
+ * - parent_changed: Equivalent to changed for the parent comment.
+ * - parent_title: Equivalent to title for the parent comment.
+ * - parent_permalink: Equivalent to permalink for the parent comment.
+ * - parent: A text string of parent comment submission information created from
+ *   $parent_author and $parent_created during template_preprocess_comment().
+ *   This information is presented to help screen readers follow lengthy
+ *   discussion threads. You can hide this from sighted users using the class
+ *   element-invisible.
+ *
+ * These two variables are provided for context:
+ * - comment: Full comment object.
+ * - node: Node entity the comments are attached to.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_comment()
+ *
+ * @ingroup themeable
+ */
+#}
+<article class="{{ attributes.class }} clearfix"{{ attributes }}>
+  {{ title_prefix }}
+
+  {% if new %}
+    <mark class="new">{{ new }}</mark>
+  {% endif %}
+
+  <h3{{ title_attributes }}>{{ title }}</h3>
+
+  {{ title_suffix }}
+
+  <footer>
+    {{ user_picture }}
+    <p class="submitted">{{ submitted }}</p>
+
+    {#
+      Indicate the semantic relationship between parent and child comments
+      for accessibility. The list is difficult to navigate in a screen
+      reader without this information.
+    #}
+    {% if parent %}
+      <p class="parent element-invisible">{{ parent }}</p>
+    {% endif %}
+
+    {{ permalink }}
+  </footer>
+
+  <div class="{{ content_attributes.class }}"{{ content_attributes }}>
+    {# We hide the links now so that we can render them later. #}
+    {% hide(content.links) %}
+    {{ content }}
+
+    {% if signature %}
+    <div class="user-signature">
+      {{ signature }}
+    </div>
+    {% endif %}
+  </div>
+  {{ content.links }}
+</article>
diff --git a/core/modules/comment/templates/comment.tpl.php b/core/modules/comment/templates/comment.tpl.php
deleted file mode 100644
index 5a8a37e..0000000
--- a/core/modules/comment/templates/comment.tpl.php
+++ /dev/null
@@ -1,110 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation for comments.
- *
- * Available variables:
- * - $author: Comment author. Can be link or plain text.
- * - $content: An array of comment items. Use render($content) to print them
- *   all, or print a subset such as render($content['field_example']). Use
- *   hide($content['field_example']) to temporarily suppress the printing of a
- *   given element.
- * - $created: Formatted date and time for when the comment was created.
- *   Preprocess functions can reformat it by calling format_date() with the
- *   desired parameters on the $comment->created variable.
- * - $changed: Formatted date and time for when the comment was last changed.
- *   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.
- * - $submitted: Submission information created from $author and $created during
- *   template_preprocess_comment().
- * - $user_picture: The comment author's picture. Use render($user_picture) to
- *   print it.
- * - $signature: Authors signature.
- * - $status: Comment status. Possible values are:
- *   unpublished, published, or preview.
- * - $title: Linked title.
- * - $attributes: An instance of Attributes class that can be manipulated as an
- *    array and printed as a string.
- *    It includes the 'class' information, which includes:
- *   - comment: The current template type; e.g., 'theming hook'.
- *   - by-anonymous: Comment by an unregistered user.
- *   - by-node-author: Comment by the author of the parent node.
- *   - preview: When previewing a new or edited comment.
- *   The following applies only to viewers who are registered users:
- *   - unpublished: An unpublished comment visible only to administrators.
- *   - by-viewer: Comment by the user currently viewing the page.
- *   - new: New comment since the last visit.
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * These variables are provided to give context about the parent comment (if
- * any):
- * - $comment_parent: Full parent comment object (if any).
- * - $parent_author: Equivalent to $author for the parent comment.
- * - $parent_created: Equivalent to $created for the parent comment.
- * - $parent_changed: Equivalent to $changed for the parent comment.
- * - $parent_title: Equivalent to $title for the parent comment.
- * - $parent_permalink: Equivalent to $permalink for the parent comment.
- * - $parent: A text string of parent comment submission information created
- *   from $parent_author and $parent_created during
- *   template_preprocess_comment(). This information is presented to help
- *   screen readers follow lengthy discussion threads. You can hide this from
- *   sighted users using the class element-invisible.
- *
- * These two variables are provided for context:
- * - $comment: Full comment object.
- * - $node: Node entity the comments are attached to.
- *
- * @see template_preprocess()
- * @see template_preprocess_comment()
- * @see template_process()
- * @see theme_comment()
- *
- * @ingroup themeable
- */
-?>
-<article class="<?php print $attributes['class']; ?> clearfix"<?php print $attributes; ?>>
-
-  <?php print render($title_prefix); ?>
-  <?php if ($new): ?>
-    <mark class="new"><?php print $new; ?></mark>
-  <?php endif; ?>
-  <h3<?php print $title_attributes; ?>><?php print $title; ?></h3>
-  <?php print render($title_suffix); ?>
-
-  <footer>
-    <?php print render($user_picture); ?>
-    <p class="submitted"><?php print $submitted; ?></p>
-    <?php
-      // Indicate the semantic relationship between parent and child comments
-      // for accessibility. The list is difficult to navigate in a screen
-      // reader without this information.
-      if ($parent):
-    ?>
-      <p class="parent element-invisible"><?php print $parent; ?></p>
-    <?php endif; ?>
-    <?php print $permalink; ?>
-  </footer>
-
-  <div class="content"<?php print $content_attributes; ?>>
-    <?php
-      // We hide the links now so that we can render them later.
-      hide($content['links']);
-      print render($content);
-    ?>
-    <?php if ($signature): ?>
-    <div class="user-signature">
-      <?php print $signature; ?>
-    </div>
-    <?php endif; ?>
-  </div>
-
-  <?php print render($content['links']) ?>
-</article>
diff --git a/core/modules/rdf/rdf.module b/core/modules/rdf/rdf.module
index 547075a..a9ba209 100644
--- a/core/modules/rdf/rdf.module
+++ b/core/modules/rdf/rdf.module
@@ -701,7 +701,7 @@ function rdf_preprocess_username(&$variables) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for comment.tpl.php.
+ * Implements hook_preprocess_HOOK() for comment.html.twig.
  */
 function rdf_preprocess_comment(&$variables) {
   $comment = $variables['comment'];
@@ -848,7 +848,7 @@ function rdf_preprocess_image(&$variables) {
  *     - variable_name: The name of the variable by which the template will
  *       refer to this content. Each template file has documentation about
  *       the variables it uses. For example, if this function is called in
- *       preparing the $author variable for comment.tpl.php, then the
+ *       preparing the $author variable for comment.html.twig, then the
  *       'variable_name' is 'author'.
  *     - variables: The full array of variables about to be passed to the
  *       template.
diff --git a/core/themes/bartik/templates/comment.tpl.php b/core/themes/bartik/templates/comment.tpl.php
index a8c4924..6fa1a83 100644
--- a/core/themes/bartik/templates/comment.tpl.php
+++ b/core/themes/bartik/templates/comment.tpl.php
@@ -77,7 +77,7 @@
 
       <div class="submitted">
         <p class="commenter-name">
-          <?php print $author; ?>
+          <?php print render($author); ?>
         </p>
         <p class="comment-time">
           <?php print $created; ?>
