diff --git a/core/modules/comment/comment.admin.inc b/core/modules/comment/comment.admin.inc
index 6210cc5..487d379 100644
--- a/core/modules/comment/comment.admin.inc
+++ b/core/modules/comment/comment.admin.inc
@@ -84,6 +84,7 @@ function comment_admin_overview($form, &$form_state, $arg) {
     ->extend('Drupal\Core\Database\Query\TableSortExtender');
   $query->join('node', 'n', 'n.nid = c.nid');
   $query->addField('n', 'title', 'node_title');
+  $query->addField('n', 'nid', 'nid');
   $query->addTag('node_access');
   $result = $query
     ->fields('c', array('cid', 'subject', 'name', 'changed'))
@@ -115,7 +116,7 @@ function comment_admin_overview($form, &$form_state, $arg) {
         'data' => array(
           '#type' => 'link',
           '#title' => $comment->subject,
-          '#href' => 'comment/' . $comment->cid,
+          '#href' => 'node/' . $comment->nid . '/comment/' . $comment->cid,
           '#options' => array('attributes' => array('title' => truncate_utf8($comment->comment_body[LANGUAGE_NOT_SPECIFIED][0]['value'], 128)), 'fragment' => 'comment-' . $comment->cid),
         ),
       ),
@@ -132,7 +133,7 @@ function comment_admin_overview($form, &$form_state, $arg) {
         'data' => array(
           '#type' => 'link',
           '#title' => t('edit'),
-          '#href' => 'comment/' . $comment->cid . '/edit',
+          '#href' => 'node/' . $comment->nid . '/comment/' . $comment->cid . '/edit',
           '#options' => array('query' => $destination),
         ),
       ),
@@ -253,14 +254,16 @@ function comment_multiple_delete_confirm_submit($form, &$form_state) {
 /**
  * Page callback: Shows a confirmation page for comment deletions.
  *
- * @param $cid
- *   The ID of the comment that is about to be deleted.
+ * @param Drupal\comment\Comment $comment
+ *   The comment entity object that is about to be deleted
+ * @param integer $nid
+ *   The node entity object
  *
  * @see comment_menu()
  * @see comment_confirm_delete()
  */
-function comment_confirm_delete_page($cid) {
-  if ($comment = comment_load($cid)) {
+function comment_confirm_delete_page(Comment $comment, $nid = NULL) {
+  if ($comment) {
     return drupal_get_form('comment_confirm_delete', $comment);
   }
   throw new NotFoundHttpException();
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index aef6209..4c9b3f0 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -177,7 +177,7 @@ function comment_node_type_load($name) {
  */
 function comment_uri(Comment $comment) {
   return array(
-    'path' => 'comment/' . $comment->cid,
+    'path' => 'node/' . $comment->nid . '/comment/' . $comment->cid,
     'options' => array('fragment' => 'comment-' . $comment->cid),
   );
 }
@@ -260,51 +260,51 @@ function comment_menu() {
     'access arguments' => array('administer comments'),
     'type' => MENU_LOCAL_TASK,
   );
-  $items['comment/%'] = array(
+  $items['node/%node/comment/%comment'] = array(
     'title' => 'Comment permalink',
     'page callback' => 'comment_permalink',
-    'page arguments' => array(1),
+    'page arguments' => array(1, 3),
     'access arguments' => array('access comments'),
   );
-  $items['comment/%/view'] = array(
+  $items['node/%node/comment/%/view'] = array(
     'title' => 'View comment',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'weight' => -10,
   );
   // Every other comment path uses %, but this one loads the comment directly,
   // so we don't end up loading it twice (in the page and access callback).
-  $items['comment/%comment/edit'] = array(
+  $items['node/%/comment/%comment/edit'] = array(
     'title' => 'Edit',
     'page callback' => 'comment_edit_page',
-    'page arguments' => array(1),
+    'page arguments' => array(3, 1),
     'access callback' => 'comment_access',
-    'access arguments' => array('edit', 1),
+    'access arguments' => array('edit', 3),
     'type' => MENU_LOCAL_TASK,
     'weight' => 0,
   );
-  $items['comment/%/approve'] = array(
+  $items['node/%node/comment/%comment/approve'] = array(
     'title' => 'Approve',
     'page callback' => 'comment_approve',
-    'page arguments' => array(1),
+    'page arguments' => array(3, 1),
     'access arguments' => array('administer comments'),
     'file' => 'comment.pages.inc',
     'weight' => 1,
   );
-  $items['comment/%/delete'] = array(
+  $items['node/%/comment/%comment/delete'] = array(
     'title' => 'Delete',
     'page callback' => 'comment_confirm_delete_page',
-    'page arguments' => array(1),
+    'page arguments' => array(3, 1),
     'access arguments' => array('administer comments'),
     'type' => MENU_LOCAL_TASK,
     'file' => 'comment.admin.inc',
     'weight' => 2,
   );
-  $items['comment/reply/%node'] = array(
+  $items['node/%node/comment/reply'] = array(
     'title' => 'Add new comment',
     'page callback' => 'comment_reply',
-    'page arguments' => array(2),
+    'page arguments' => array(1),
     'access callback' => 'node_access',
-    'access arguments' => array('view', 2),
+    'access arguments' => array('view', 1),
     'file' => 'comment.pages.inc',
   );
 
@@ -497,14 +497,16 @@ function comment_block_view($delta = '') {
  * calculates the page number based on current comment settings and returns
  * the full comment view with the pager set dynamically.
  *
- * @param $cid
- *   A comment identifier.
+ * @param Drupal\node\Node $node
+ *   The node entity object
+ * @param Drupal\comment\Comment $comment
+ *   The comment entity object
  *
  * @return
  *   The comment listing set to the page on which the comment appears.
  */
-function comment_permalink($cid) {
-  if (($comment = comment_load($cid)) && ($node = node_load($comment->nid))) {
+function comment_permalink(Node $node, Comment $comment) {
+  if ($node && $comment) {
 
     // Find the current display page for this comment.
     $page = comment_get_display_page($comment->cid, $node->type);
@@ -627,7 +629,7 @@ 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)) . '&nbsp;<span>' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed))) . '</span>';
+    $items[] = l($comment->subject, 'node/' . $comment->nid . '/comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)) . '&nbsp;<span>' . t('@time ago', array('@time' => format_interval(REQUEST_TIME - $comment->changed))) . '</span>';
   }
 
   if ($items) {
@@ -688,7 +690,7 @@ function comment_node_view(Node $node, $view_mode) {
             'fragment' => 'comment-form',
           );
           if ($comment_form_location == COMMENT_FORM_SEPARATE_PAGE) {
-            $links['comment-add']['href'] = "comment/reply/$node->nid";
+            $links['comment-add']['href'] = 'node/' . $node->nid . '/comment/reply';
           }
         }
         else {
@@ -717,7 +719,7 @@ function comment_node_view(Node $node, $view_mode) {
               'fragment' => 'comment-form',
             );
             if ($comment_form_location == COMMENT_FORM_SEPARATE_PAGE) {
-              $links['comment-add']['href'] = "comment/reply/$node->nid";
+              $links['comment-add']['href'] = 'node/' . $node->nid . '/comment/reply';
             }
           }
         }
@@ -1094,25 +1096,25 @@ function comment_links(Comment $comment, Node $node) {
     if (user_access('administer comments') && user_access('post comments')) {
       $links['comment-delete'] = array(
         'title' => t('delete'),
-        'href' => "comment/$comment->cid/delete",
+        'href' => 'node/' . $node->nid . '/comment/' . $comment->cid . '/delete',
         'html' => TRUE,
       );
       $links['comment-edit'] = array(
         'title' => t('edit'),
-        'href' => "comment/$comment->cid/edit",
+        'href' => 'node/' . $node->nid . '/comment/' . $comment->cid . '/edit',
         'html' => TRUE,
       );
       $links['comment-reply'] = array(
         'title' => t('reply'),
-        'href' => "comment/reply/$comment->nid/$comment->cid",
+        'href' => 'node/' . $node->nid . '/comment/reply/' . $comment->cid,
         'html' => TRUE,
       );
       if ($comment->status == COMMENT_NOT_PUBLISHED) {
         $links['comment-approve'] = array(
           'title' => t('approve'),
-          'href' => "comment/$comment->cid/approve",
+          'href' => 'node/' . $node->nid . '/comment/' . $comment->cid . '/approve',
           'html' => TRUE,
-          'query' => array('token' => drupal_get_token("comment/$comment->cid/approve")),
+          'query' => array('token' => drupal_get_token('node/' . $node->nid . '/comment/' . $comment->cid . '/approve')),
         );
       }
     }
@@ -1120,13 +1122,13 @@ function comment_links(Comment $comment, Node $node) {
       if (comment_access('edit', $comment)) {
         $links['comment-edit'] = array(
           'title' => t('edit'),
-          'href' => "comment/$comment->cid/edit",
+          'href' => 'node/' . $node->nid . '/comment/' . $comment->cid . '/edit',
           'html' => TRUE,
         );
       }
       $links['comment-reply'] = array(
         'title' => t('reply'),
-        'href' => "comment/reply/$comment->nid/$comment->cid",
+        'href' => 'node/' . $node->nid . '/comment/reply/' . $comment->cid,
         'html' => TRUE,
       );
     }
@@ -1666,12 +1668,14 @@ function comment_get_display_page($cid, $node_type) {
 /**
  * Page callback: Displays the comment editing form.
  *
+ * @param integer $nid
+ *   The ID of the node on which the $comment is posted
  * @param Drupal\comment\Comment $comment
  *   The comment object representing the comment to be edited.
  *
  * @see comment_menu()
  */
-function comment_edit_page(Comment $comment) {
+function comment_edit_page(Comment $comment, $nid = NULL) {
   drupal_set_title(t('Edit comment %comment', array('%comment' => $comment->subject)), PASS_THROUGH);
   return entity_get_form($comment);
 }
@@ -1833,7 +1837,7 @@ function theme_comment_post_forbidden($variables) {
       // 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");
+        $destination = array('destination' => 'node/' . $node->nid . '/comment/reply#comment-form');
       }
       else {
         $destination = array('destination' => "node/$node->nid#comment-form");
diff --git a/core/modules/comment/comment.pages.inc b/core/modules/comment/comment.pages.inc
index ed91d23..fdb0984 100644
--- a/core/modules/comment/comment.pages.inc
+++ b/core/modules/comment/comment.pages.inc
@@ -105,26 +105,28 @@ function comment_reply(Node $node, $pid = NULL) {
 /**
  * Page callback: Publishes the specified comment.
  *
- * @param $cid
- *   A comment identifier.
+ * @param Drupal\comment\Comment $comment
+ *   The comment entity object that is about to be approbed
+ * @param integer $nid
+ *   The ID of the node to which the comment belongs
  *
  * @see comment_menu()
  */
-function comment_approve($cid) {
+function comment_approve(Comment $comment, $nid) {
   // @todo CSRF tokens are validated in page callbacks rather than access
   //   callbacks, because access callbacks are also invoked during menu link
   //   generation. Add token support to routing: http://drupal.org/node/755584.
   $token = drupal_container()->get('request')->query->get('token');
-  if (!isset($token) || !drupal_valid_token($token, "comment/$cid/approve")) {
+  if (!isset($token) || !drupal_valid_token($token, "node/$nid/comment/$comment->cid/approve")) {
     throw new AccessDeniedHttpException();
   }
 
-  if ($comment = comment_load($cid)) {
+  if ($comment && $nid) {
     $comment->status = COMMENT_PUBLISHED;
     comment_save($comment);
 
     drupal_set_message(t('Comment approved.'));
-    drupal_goto('node/' . $comment->nid);
+    drupal_goto('node/' . $nid);
   }
   throw new NotFoundHttpException();
 }
diff --git a/core/modules/comment/comment.tokens.inc b/core/modules/comment/comment.tokens.inc
index f4a401d..e67a4ce 100644
--- a/core/modules/comment/comment.tokens.inc
+++ b/core/modules/comment/comment.tokens.inc
@@ -165,12 +165,12 @@ function comment_tokens($type, $tokens, array $data = array(), array $options =
         // Comment related URLs.
         case 'url':
           $url_options['fragment']  = 'comment-' . $comment->cid;
-          $replacements[$original] = url('comment/' . $comment->cid, $url_options);
+          $replacements[$original] = url('node/' . $comment->nid . '/comment/' . $comment->cid, $url_options);
           break;
 
         case 'edit-url':
           $url_options['fragment'] = NULL;
-          $replacements[$original] = url('comment/' . $comment->cid . '/edit', $url_options);
+          $replacements[$original] = url('node/' . $comment->nid . '/comment/' . $comment->cid . '/edit', $url_options);
           break;
 
         // Default values for the chained tokens handled below.
diff --git a/core/modules/comment/lib/Drupal/comment/CommentFormController.php b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
index 9b3094e..59dd635 100644
--- a/core/modules/comment/lib/Drupal/comment/CommentFormController.php
+++ b/core/modules/comment/lib/Drupal/comment/CommentFormController.php
@@ -40,7 +40,7 @@ class CommentFormController extends EntityFormController {
     // If not replying to a comment, use our dedicated page callback for new
     // comments on nodes.
     if (empty($comment->cid) && empty($comment->pid)) {
-      $form['#action'] = url('comment/reply/' . $comment->nid);
+      $form['#action'] = url('node/' . $comment->nid . '/comment/reply/');
     }
 
     if (isset($form_state['comment_preview'])) {
@@ -344,7 +344,7 @@ class CommentFormController extends EntityFormController {
       $form_state['values']['cid'] = $comment->cid;
 
       // Add an entry to the watchdog log.
-      watchdog('content', 'Comment posted: %subject.', array('%subject' => $comment->subject), WATCHDOG_NOTICE, l(t('view'), 'comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)));
+      watchdog('content', 'Comment posted: %subject.', array('%subject' => $comment->subject), WATCHDOG_NOTICE, l(t('view'), 'node/' . $comment->nid . '/comment/' . $comment->cid, array('fragment' => 'comment-' . $comment->cid)));
 
       // Explain the approval queue if necessary.
       if ($comment->status == COMMENT_NOT_PUBLISHED) {
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php
index 5181e32..4ea0688 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentAnonymousTest.php
@@ -47,13 +47,13 @@ class CommentAnonymousTest extends CommentTestBase {
     $this->setCommentAnonymous('1');
 
     // Attempt to edit anonymous comment.
-    $this->drupalGet('comment/' . $anonymous_comment1->id . '/edit');
+    $this->drupalGet('node/' . $this->node->nid . '/comment/' . $anonymous_comment1->id . '/edit');
     $edited_comment = $this->postComment(NULL, $this->randomName(), $this->randomName());
     $this->assertTrue($this->commentExists($edited_comment, FALSE), t('Modified reply found.'));
     $this->drupalLogout();
 
     // Post anonymous comment with contact info (optional).
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $this->assertTrue($this->commentContactInfoAvailable(), t('Contact information available.'));
 
     $anonymous_comment2 = $this->postComment($this->node, $this->randomName(), $this->randomName());
@@ -67,7 +67,7 @@ class CommentAnonymousTest extends CommentTestBase {
       'subject' => $this->randomName(),
       "comment_body[$langcode][0][value]" => $this->randomName(),
     );
-    $this->drupalPost('comment/reply/' . $this->node->nid, $edit, t('Save'));
+    $this->drupalPost('node/' . $this->node->nid . '/comment/reply', $edit, t('Save'));
     $this->assertText(t('The name you used belongs to a registered user.'));
 
     // Require contact info.
@@ -76,7 +76,7 @@ class CommentAnonymousTest extends CommentTestBase {
     $this->drupalLogout();
 
     // Try to post comment with contact info (required).
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $this->assertTrue($this->commentContactInfoAvailable(), t('Contact information available.'));
 
     $anonymous_comment3 = $this->postComment($this->node, $this->randomName(), $this->randomName(), TRUE);
@@ -91,7 +91,7 @@ class CommentAnonymousTest extends CommentTestBase {
 
     // Make sure the user data appears correctly when editing the comment.
     $this->drupalLogin($this->admin_user);
-    $this->drupalGet('comment/' . $anonymous_comment3->id . '/edit');
+    $this->drupalGet('node/' .  $this->node->nid . '/comment/' . $anonymous_comment3->id . '/edit');
     $this->assertRaw($author_name, t("The anonymous user's name is correct when editing the comment."));
     $this->assertRaw($author_mail, t("The anonymous user's e-mail address is correct when editing the comment."));
 
@@ -129,7 +129,7 @@ class CommentAnonymousTest extends CommentTestBase {
     $this->assertNoLink('Add new comment', t('Link to add comment was found.'));
 
     // Attempt to view node-comment form while disallowed.
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $this->assertText('You are not authorized to post comments', t('Error attempting to post comment.'));
     $this->assertNoFieldByName('subject', '', t('Subject field not found.'));
     $this->assertNoFieldByName("comment_body[$langcode][0][value]", '', t('Comment field not found.'));
@@ -154,7 +154,7 @@ class CommentAnonymousTest extends CommentTestBase {
     $this->assertFieldByName('subject', '', t('Subject field found.'));
     $this->assertFieldByName("comment_body[$langcode][0][value]", '', t('Comment field found.'));
 
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $anonymous_comment3->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply' . '/' . $anonymous_comment3->id);
     $this->assertText('You are not authorized to view comments', t('Error attempting to post reply.'));
     $this->assertNoText($author_name, t('Comment not displayed.'));
   }
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentApprovalTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentApprovalTest.php
index 02b3be1..b66bd50 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentApprovalTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentApprovalTest.php
@@ -118,9 +118,9 @@ class CommentApprovalTest extends CommentTestBase {
 
     // Approve comment.
     $this->drupalLogin($this->admin_user);
-    $this->drupalGet('comment/1/approve');
+    $this->drupalGet('node/' . $this->node->nid . '/comment/1/approve');
     $this->assertResponse(403, t('Forged comment approval was denied.'));
-    $this->drupalGet('comment/1/approve', array('query' => array('token' => 'forged')));
+    $this->drupalGet('node/' . $this->node->nid . '/comment/1/approve', array('query' => array('token' => 'forged')));
     $this->assertResponse(403, t('Forged comment approval was denied.'));
     $this->drupalGet('node/' . $this->node->nid);
     $this->clickLink(t('approve'));
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php
index 2c324e2..556f053 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentInterfaceTest.php
@@ -63,20 +63,20 @@ class CommentInterfaceTest extends CommentTestBase {
     $this->setCommentPreview(DRUPAL_OPTIONAL);
 
     // Test changing the comment author to "Anonymous".
-    $this->drupalGet('comment/' . $comment->id . '/edit');
+    $this->drupalGet('node/' . $this->node->nid . '/comment/' . $comment->id . '/edit');
     $comment = $this->postComment(NULL, $comment->comment, $comment->subject, array('name' => ''));
     $comment_loaded = comment_load($comment->id);
     $this->assertTrue(empty($comment_loaded->name) && $comment_loaded->uid == 0, t('Comment author successfully changed to anonymous.'));
 
     // Test changing the comment author to an unverified user.
     $random_name = $this->randomName();
-    $this->drupalGet('comment/' . $comment->id . '/edit');
+    $this->drupalGet('node/' . $this->node->nid . '/comment/' . $comment->id . '/edit');
     $comment = $this->postComment(NULL, $comment->comment, $comment->subject, array('name' => $random_name));
     $this->drupalGet('node/' . $this->node->nid);
     $this->assertText($random_name . ' (' . t('not verified') . ')', t('Comment author successfully changed to an unverified user.'));
 
     // Test changing the comment author to a verified user.
-    $this->drupalGet('comment/' . $comment->id . '/edit');
+    $this->drupalGet('node/' . $this->node->nid . '/comment/' . $comment->id . '/edit');
     $comment = $this->postComment(NULL, $comment->comment, $comment->subject, array('name' => $this->web_user->name));
     $comment_loaded = comment_load($comment->id);
     $this->assertTrue($comment_loaded->name == $this->web_user->name && $comment_loaded->uid == $this->web_user->uid, t('Comment author successfully changed to a registered user.'));
@@ -86,7 +86,7 @@ class CommentInterfaceTest extends CommentTestBase {
     // Reply to comment #2 creating comment #3 with optional preview and no
     // subject though field enabled.
     $this->drupalLogin($this->web_user);
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' .  $this->node->nid . '/comment/reply/' . $comment->id);
     $this->assertText($subject_text, t('Individual comment-reply subject found.'));
     $this->assertText($comment_text, t('Individual comment-reply body found.'));
     $reply = $this->postComment(NULL, $this->randomName(), '', TRUE);
@@ -96,7 +96,7 @@ class CommentInterfaceTest extends CommentTestBase {
     $this->assertEqual(rtrim($comment_loaded->thread, '/') . '.00/', $reply_loaded->thread, t('Thread of reply grows correctly.'));
 
     // Second reply to comment #3 creating comment #4.
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' .  $this->node->nid . '/comment/reply/' . $comment->id);
     $this->assertText($subject_text, t('Individual comment-reply subject found.'));
     $this->assertText($comment_text, t('Individual comment-reply body found.'));
     $reply = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
@@ -105,7 +105,7 @@ class CommentInterfaceTest extends CommentTestBase {
     $this->assertEqual(rtrim($comment_loaded->thread, '/') . '.01/', $reply_loaded->thread, t('Thread of second reply grows correctly.'));
 
     // Edit reply.
-    $this->drupalGet('comment/' . $reply->id . '/edit');
+    $this->drupalGet('node/' .  $this->node->nid . '/comment/' . $reply->id . '/edit');
     $reply = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
     $this->assertTrue($this->commentExists($reply, TRUE), t('Modified reply found.'));
 
@@ -124,27 +124,27 @@ class CommentInterfaceTest extends CommentTestBase {
     // Attempt to reply to an unpublished comment.
     $reply_loaded->status = COMMENT_NOT_PUBLISHED;
     $reply_loaded->save();
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $reply_loaded->cid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $reply_loaded->cid);
     $this->assertText(t('The comment you are replying to does not exist.'), 'Replying to an unpublished comment');
 
     // Attempt to post to node with comments disabled.
     $this->node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1, 'comment' => COMMENT_NODE_HIDDEN));
     $this->assertTrue($this->node, t('Article node created.'));
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $this->assertText('This discussion is closed', t('Posting to node with comments disabled'));
     $this->assertNoField('edit-comment', t('Comment body field found.'));
 
     // Attempt to post to node with read-only comments.
     $this->node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1, 'comment' => COMMENT_NODE_CLOSED));
     $this->assertTrue($this->node, t('Article node created.'));
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $this->assertText('This discussion is closed', t('Posting to node with comments read-only'));
     $this->assertNoField('edit-comment', t('Comment body field found.'));
 
     // Attempt to post to node with comments enabled (check field names etc).
     $this->node = $this->drupalCreateNode(array('type' => 'article', 'promote' => 1, 'comment' => COMMENT_NODE_OPEN));
     $this->assertTrue($this->node, t('Article node created.'));
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $this->assertNoText('This discussion is closed', t('Posting to node with comments enabled'));
     $this->assertField('edit-comment-body-' . $langcode . '-0-value', t('Comment body field found.'));
 
@@ -381,7 +381,7 @@ class CommentInterfaceTest extends CommentTestBase {
     $this->drupalLogout();
 
     // Post comment #2 as anonymous (comment approval enabled).
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $anonymous_comment = $this->postComment($this->node, $this->randomName(), '', TRUE);
     $comment_unpublished_loaded = comment_load($anonymous_comment->id);
 
@@ -403,7 +403,7 @@ class CommentInterfaceTest extends CommentTestBase {
     $this->drupalLogout();
 
     // Post comment #3 as anonymous.
-    $this->drupalGet('comment/reply/' . $this->node->nid);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply');
     $anonymous_comment = $this->postComment($this->node, $this->randomName(), '', array('name' => $this->randomName()));
     $comment_loaded = comment_load($anonymous_comment->id);
 
@@ -676,12 +676,12 @@ class CommentInterfaceTest extends CommentTestBase {
           // Verify that the "Add new comment" link points to the correct URL
           // based on the comment form location configuration.
           if ($info['form'] == COMMENT_FORM_SEPARATE_PAGE) {
-            $this->assertLinkByHref("comment/reply/$nid#comment-form", 0, 'Comment form link destination is on a separate page.');
+            $this->assertLinkByHref("node/$nid/comment/reply#comment-form", 0, 'Comment form link destination is on a separate page.');
             $this->assertNoLinkByHref("node/$nid#comment-form");
           }
           else {
             $this->assertLinkByHref("node/$nid#comment-form", 0, 'Comment form link destination is on node.');
-            $this->assertNoLinkByHref("comment/reply/$nid#comment-form");
+            $this->assertNoLinkByHref("comment/$nid/reply#comment-form");
           }
         }
 
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeAccessTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeAccessTest.php
index 74d9739..724ea1f 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeAccessTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentNodeAccessTest.php
@@ -69,7 +69,7 @@ class CommentNodeAccessTest extends CommentTestBase {
     $this->assertText($comment_text, t('Individual comment body found.'));
 
     // Reply to comment, creating second comment.
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $comment->id);
     $reply_text = $this->randomName();
     $reply_subject = $this->randomName();
     $reply = $this->postComment(NULL, $reply_text, $reply_subject, TRUE);
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentPagerTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentPagerTest.php
index df7c8f1..641e10d 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentPagerTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentPagerTest.php
@@ -66,7 +66,7 @@ class CommentPagerTest extends CommentTestBase {
     // Post a reply to the oldest comment and test again.
     $replies = array();
     $oldest_comment = reset($comments);
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $oldest_comment->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $oldest_comment->id);
     $reply = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     $this->setCommentsPerPage(2);
@@ -114,19 +114,19 @@ class CommentPagerTest extends CommentTestBase {
     $comments[] = $this->postComment($node, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the second comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[1]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[1]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the first comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[0]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[0]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the last comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[2]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[2]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the second comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[3]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[3]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // At this point, the comment tree is:
@@ -215,15 +215,15 @@ class CommentPagerTest extends CommentTestBase {
     $comments[] = $this->postComment($node, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the second comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[1]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[1]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the first comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[0]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[0]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the last comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $comments[2]->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $comments[2]->id);
     $comments[] = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
 
     // At this point, the comment tree is:
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php
index e6eef56..2a8190b 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentPreviewTest.php
@@ -87,7 +87,7 @@ class CommentPreviewTest extends CommentTestBase {
     $expected_text_date = format_date($raw_date);
     $expected_form_date = format_date($raw_date, 'custom', 'Y-m-d H:i O');
     $comment = $this->postComment($this->node, $edit['subject'], $edit['comment_body[' . $langcode . '][0][value]'], TRUE);
-    $this->drupalPost('comment/' . $comment->id . '/edit', $edit, t('Preview'));
+    $this->drupalPost('node/' . $comment->nid . '/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".'));
@@ -103,11 +103,11 @@ class CommentPreviewTest extends CommentTestBase {
     $this->assertFieldByName('date', $edit['date'], t('Date field displayed.'));
 
     // Check that saving a comment produces a success message.
-    $this->drupalPost('comment/' . $comment->id . '/edit', $edit, t('Save'));
+    $this->drupalPost('node/' . $comment->nid . '/comment/' . $comment->id . '/edit', $edit, t('Save'));
     $this->assertText(t('Your comment has been posted.'), t('Comment posted.'));
 
     // Check that the comment fields are correct after loading the saved comment.
-    $this->drupalGet('comment/' . $comment->id . '/edit');
+    $this->drupalGet('node/' . $comment->nid . '/comment/' . $comment->id . '/edit');
     $this->assertFieldByName('subject', $edit['subject'], t('Subject 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.'));
@@ -119,7 +119,7 @@ class CommentPreviewTest extends CommentTestBase {
     $displayed['comment_body[' . $langcode . '][0][value]'] = (string) current($this->xpath("//textarea[@id='edit-comment-body-" . $langcode . "-0-value']"));
     $displayed['name'] = (string) current($this->xpath("//input[@id='edit-name']/@value"));
     $displayed['date'] = (string) current($this->xpath("//input[@id='edit-date']/@value"));
-    $this->drupalPost('comment/' . $comment->id . '/edit', $displayed, t('Save'));
+    $this->drupalPost('node/' . $comment->nid . '/comment/' . $comment->id . '/edit', $displayed, t('Save'));
 
     // Check that the saved comment is still correct.
     $comment_loaded = comment_load($comment->id);
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
index 24d5b39..638b2a5 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentTestBase.php
@@ -57,7 +57,7 @@ abstract class CommentTestBase extends WebTestBase {
 
     // Must get the page before we test for fields.
     if ($node !== NULL) {
-      $this->drupalGet('comment/reply/' . $node->nid);
+      $this->drupalGet('node/' . $node->nid . '/comment/reply');
     }
 
     if ($subject_mode == TRUE) {
@@ -141,7 +141,7 @@ abstract class CommentTestBase extends WebTestBase {
    *   Comment to delete.
    */
   function deleteComment(Comment $comment) {
-    $this->drupalPost('comment/' . $comment->id . '/delete', array(), t('Delete'));
+    $this->drupalPost('node/' . $comment->nid . '/comment/' . $comment->id . '/delete', array(), t('Delete'));
     $this->assertText(t('The comment and all its replies have been deleted.'), t('Comment deleted.'));
   }
 
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentThreadingTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentThreadingTest.php
index 1c57146..9056c8f 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentThreadingTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentThreadingTest.php
@@ -47,14 +47,14 @@ class CommentThreadingTest extends CommentTestBase {
 
     // Reply to comment #1 creating comment #2.
     $this->drupalLogin($this->web_user);
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $comment->id);
     $reply = $this->postComment(NULL, $this->randomName(), '', TRUE);
     $reply_loaded = comment_load($reply->id);
     $this->assertTrue($this->commentExists($reply, TRUE), 'Comment #2. Reply found.');
     $this->assertEqual($reply_loaded->thread, '01.00/');
 
     // Reply to comment #2 creating comment #3.
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $reply->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $reply->id);
     $reply = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
     $reply_loaded = comment_load($reply->id);
     $this->assertTrue($this->commentExists($reply, TRUE), 'Comment #3. Second reply found.');
@@ -62,7 +62,7 @@ class CommentThreadingTest extends CommentTestBase {
 
     // Reply to comment #1 creating comment #4.
     $this->drupalLogin($this->web_user);
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $comment->id);
     $reply = $this->postComment(NULL, $this->randomName(), '', TRUE);
     $reply_loaded = comment_load($reply->id);
     $this->assertTrue($this->commentExists($comment), 'Comment #4. Third reply found.');
@@ -79,14 +79,14 @@ class CommentThreadingTest extends CommentTestBase {
 
     // Reply to comment #5 creating comment #6.
     $this->drupalLogin($this->web_user);
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $comment->id);
     $reply = $this->postComment(NULL, $this->randomName(), '', TRUE);
     $reply_loaded = comment_load($reply->id);
     $this->assertTrue($this->commentExists($reply, TRUE), 'Comment #6. Reply found.');
     $this->assertEqual($reply_loaded->thread, '02.00/');
 
     // Reply to comment #6 creating comment #7.
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $reply->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $reply->id);
     $reply = $this->postComment(NULL, $this->randomName(), $this->randomName(), TRUE);
     $reply_loaded = comment_load($reply->id);
     $this->assertTrue($this->commentExists($reply, TRUE), 'Comment #7. Second reply found.');
@@ -94,7 +94,7 @@ class CommentThreadingTest extends CommentTestBase {
 
     // Reply to comment #5 creating comment #8.
     $this->drupalLogin($this->web_user);
-    $this->drupalGet('comment/reply/' . $this->node->nid . '/' . $comment->id);
+    $this->drupalGet('node/' . $this->node->nid . '/comment/reply/' . $comment->id);
     $reply = $this->postComment(NULL, $this->randomName(), '', TRUE);
     $reply_loaded = comment_load($reply->id);
     $this->assertTrue($this->commentExists($comment), 'Comment #8. Third reply found.');
diff --git a/core/modules/comment/lib/Drupal/comment/Tests/CommentTokenReplaceTest.php b/core/modules/comment/lib/Drupal/comment/Tests/CommentTokenReplaceTest.php
index 383786c..9798a1d 100644
--- a/core/modules/comment/lib/Drupal/comment/Tests/CommentTokenReplaceTest.php
+++ b/core/modules/comment/lib/Drupal/comment/Tests/CommentTokenReplaceTest.php
@@ -39,7 +39,7 @@ class CommentTokenReplaceTest extends CommentTestBase {
     $parent_comment = $this->postComment($node, $this->randomName(), $this->randomName(), TRUE);
 
     // Post a reply to the comment.
-    $this->drupalGet('comment/reply/' . $node->nid . '/' . $parent_comment->id);
+    $this->drupalGet('node/' . $node->nid . '/comment/reply/' . $parent_comment->id);
     $child_comment = $this->postComment(NULL, $this->randomName(), $this->randomName());
     $comment = comment_load($child_comment->id);
     $comment->homepage = 'http://example.org/';
@@ -57,8 +57,8 @@ class CommentTokenReplaceTest extends CommentTestBase {
     $tests['[comment:homepage]'] = check_url($comment->homepage);
     $tests['[comment:title]'] = filter_xss($comment->subject);
     $tests['[comment:body]'] = _text_sanitize($instance, LANGUAGE_NOT_SPECIFIED, $comment->comment_body[LANGUAGE_NOT_SPECIFIED][0], 'value');
-    $tests['[comment:url]'] = url('comment/' . $comment->cid, $url_options + array('fragment' => 'comment-' . $comment->cid));
-    $tests['[comment:edit-url]'] = url('comment/' . $comment->cid . '/edit', $url_options);
+    $tests['[comment:url]'] = url('node/' . $node->nid . '/comment/' . $comment->cid, $url_options + array('fragment' => 'comment-' . $comment->cid));
+    $tests['[comment:edit-url]'] = url('node/' . $node->nid . '/comment/' . $comment->cid . '/edit', $url_options);
     $tests['[comment:created:since]'] = format_interval(REQUEST_TIME - $comment->created, 2, $language_interface->langcode);
     $tests['[comment:changed:since]'] = format_interval(REQUEST_TIME - $comment->changed, 2, $language_interface->langcode);
     $tests['[comment:parent:cid]'] = $comment->pid;
