diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index a4c7a42..8d6d512 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -15,6 +15,7 @@
 use Symfony\Component\HttpFoundation\Request;
 use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
 use Symfony\Component\HttpKernel\HttpKernelInterface;
+use Drupal\comment\Plugin\Core\Entity\Comment;
 
 /**
  * Comment is awaiting approval.
@@ -76,8 +77,6 @@
  */
 const COMMENT_NODE_OPEN = 2;
 
-use Drupal\comment\Plugin\Core\Entity\Comment;
-
 /**
  * Implements hook_help().
  */
diff --git a/core/modules/comment/comment.routing.yml b/core/modules/comment/comment.routing.yml
index 6f786dd..a7b4fe2 100644
--- a/core/modules/comment/comment.routing.yml
+++ b/core/modules/comment/comment.routing.yml
@@ -4,4 +4,9 @@ comment_edit_page:
         _entity_form: comment.default
     requirements:
         _entity_access: comment.update
-
+comment_permalink:
+  pattern: '/comment/{comment}'
+  defaults:
+    _controller: '\Drupal\comment\Controller\CommentController::commentPermalink'
+  requirements:
+    _access: 'TRUE'
diff --git a/core/modules/comment/lib/Drupal/comment/CommentRequestController.php b/core/modules/comment/lib/Drupal/comment/CommentRequestController.php
new file mode 100644
index 0000000..157b0b0
--- /dev/null
+++ b/core/modules/comment/lib/Drupal/comment/CommentRequestController.php
@@ -0,0 +1,88 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\comment\CommentRequestController.
+ */
+
+namespace Drupal\comment;
+
+use Drupal\Core\ControllerInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Drupal\comment\Plugin\Core\Entity\Comment;
+use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
+use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException;
+use Symfony\Component\HttpFoundation\Request;
+use Symfony\Component\HttpKernel\HttpKernelInterface;
+
+/**
+ * Controller methods for comment routes.
+ */
+class CommentRequestController implements ControllerInterface {
+
+  /**
+   * @var Symfony\Component\HttpFoundation\Request
+   */
+  protected $request;
+
+  /**
+   * @var Symfony\Component\HttpKernel\HttpKernelInterface
+   */
+  protected $http_kernal;
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static($container->get('request'), $container->get('http_kernal'));
+  }
+
+  /**
+   * Contructs a new CommentController instance
+   *
+   * @param Symfony\Component\HttpFoundation\Request $request
+   *   The active request object
+   * @param Symfony\Component\HttpKernel\HttpKernelInterface $http_kernal
+   *   HTTP kernal to hondle requests
+   */
+  public function __construct(Request $request, HttpKernelInterface $http_kernal) {
+    $this->request = $request;
+    $this->http_kernal = $http_kernal;
+  }
+
+  /**
+   * Redirects comment links to the correct page depending on comment settings.
+   *
+   * Since comments are paged there is no way to guarantee which page a comment
+   * appears on. Comment paging and threading settings may be changed at any
+   * time. With threaded comments, an individual comment may move between pages
+   * as comments can be added either before or after it in the overall
+   * discussion. Therefore we use a central routing function for comment links,
+   * which calculates the page number based on current comment settings and
+   * returns the full comment view with the pager set dynamically.
+   *
+   * @param \Drupal\comment\Plugin\Core\Entity\Comment $comment
+   *   A comment entity.
+   *
+   * @return Symfony\Component\HttpFoundation\Response
+   *   The comment listing set to the page on which the comment appears.
+   */
+  public function commentPermalink(Comment $comment) {
+    if ($node = $comment->nid->entity) {
+      // Check access permissions for the node entity.
+      if (!entity_page_access($node, 'view')) {
+        throw new AccessDeniedHttpException();
+      }
+      // Find the current display page for this comment.
+      $page = comment_get_display_page($comment->id(), $node->type);
+      // @todo: Cleaner sub request handling.
+      $redirect_request = Request::create('/node/' . $node->nid, 'GET', $this->request->query->all(), $this->request->cookies->all(), array(), $this->request->server->all());
+      $redirect_request->query->set('page', $page);
+      // @todo: Convert the pager to use the request object.
+      $_GET['page'] = $page;
+      return $this->http_kernal->handle($redirect_request, HttpKernelInterface::SUB_REQUEST);
+    }
+    throw new NotFoundHttpException();
+  }
+
+}
