Index: modules/comment/comment.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.admin.inc,v
retrieving revision 1.41
diff -u -p -r1.41 comment.admin.inc
--- modules/comment/comment.admin.inc	30 Jan 2010 07:59:24 -0000	1.41
+++ modules/comment/comment.admin.inc	8 Feb 2010 14:04:31 -0000
@@ -234,6 +234,16 @@ function comment_multiple_delete_confirm
 }
 
 /**
+ * Page callback for comment deletions.
+ */
+function comment_confirm_delete_page($cid) {
+  if ($comment = comment_load($cid)) {
+    return drupal_get_form('comment_confirm_delete', $comment);
+  }
+  return MENU_NOT_FOUND;
+}
+
+/**
  * Form builder; Builds the confirmation form for deleting a single comment.
  *
  * @ingroup forms
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.840
diff -u -p -r1.840 comment.module
--- modules/comment/comment.module	7 Feb 2010 09:11:28 -0000	1.840
+++ modules/comment/comment.module	8 Feb 2010 14:04:34 -0000
@@ -230,45 +230,44 @@ function comment_menu() {
     'access arguments' => array('administer comments'),
     'type' => MENU_LOCAL_TASK,
   );
-  $items['comment/%comment'] = array(
+  $items['comment/%'] = array(
     'title' => 'Comment permalink',
     'page callback' => 'comment_permalink',
     'page arguments' => array(1),
     'access arguments' => array('access comments'),
     'type' => MENU_CALLBACK,
   );
-  $items['comment/%comment/view'] = array(
+  $items['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(
     'title' => 'Edit',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('comment_form', 1),
+    'page callback' => 'comment_edit_page',
+    'page arguments' => array(1),
     'access callback' => 'comment_access',
     'access arguments' => array('edit', 1),
     'type' => MENU_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
     'weight' => 0,
   );
-  $items['comment/%comment/approve'] = array(
+  $items['comment/%/approve'] = array(
     'title' => 'Approve',
     'page callback' => 'comment_approve',
     'page arguments' => array(1),
     'access arguments' => array('administer comments'),
-    'type' => MENU_LOCAL_TASK,
-    'context' => MENU_CONTEXT_INLINE,
+    'type' => MENU_CALLBACK,
     'file' => 'comment.pages.inc',
     'weight' => 1,
   );
-  $items['comment/%comment/delete'] = array(
+  $items['comment/%/delete'] = array(
     'title' => 'Delete',
-    'page callback' => 'drupal_get_form',
-    'page arguments' => array('comment_confirm_delete', 1),
+    'page callback' => 'comment_confirm_delete_page',
+    'page arguments' => array(1),
     'access arguments' => array('administer comments'),
     'type' => MENU_LOCAL_TASK,
-    'context' => MENU_CONTEXT_PAGE | MENU_CONTEXT_INLINE,
     'file' => 'comment.admin.inc',
     'weight' => 2,
   );
@@ -434,14 +433,13 @@ 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 $comment
- *   A comment object.
+ * @param $cid
+ *   A comment identifier.
  * @return
  *   The comment listing set to the page on which the comment appears.
  */
-function comment_permalink($comment) {
-  $node = node_load($comment->nid);
-  if ($node && $comment) {
+function comment_permalink($cid) {
+  if (($comment = comment_load($cid)) && ($node = node_load($comment->nid))) {
 
     // Find the current display page for this comment.
     $page = comment_get_display_page($comment->cid, $node->type);
@@ -1714,6 +1712,14 @@ function comment_get_display_page($cid, 
 }
 
 /**
+ * Page callback for comment editing.
+ */
+function comment_edit_page($comment) {
+  drupal_set_title(t('Edit comment %comment', array('%comment' => $comment->subject)), PASS_THROUGH);
+  return drupal_get_form('comment_form', $comment);
+}
+
+/**
  * Generate the basic commenting form, for appending to a node or display on a separate page.
  *
  * @ingroup forms
Index: modules/comment/comment.pages.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.pages.inc,v
retrieving revision 1.35
diff -u -p -r1.35 comment.pages.inc
--- modules/comment/comment.pages.inc	9 Jan 2010 21:54:00 -0000	1.35
+++ modules/comment/comment.pages.inc	8 Feb 2010 14:04:34 -0000
@@ -103,13 +103,16 @@ function comment_reply($node, $pid = NUL
 /**
  * Menu callback; publish specified comment.
  *
- * @param $comment
- *   A comment object.
+ * @param $cid
+ *   A comment identifier.
  */
-function comment_approve($comment) {
-  $comment->status = COMMENT_PUBLISHED;
-  comment_save($comment);
+function comment_approve($cid) {
+  if ($comment = comment_load($cid)) {
+    $comment->status = COMMENT_PUBLISHED;
+    comment_save($comment);
 
-  drupal_set_message(t('Comment approved.'));
-  drupal_goto('node/' . $comment->nid);
+    drupal_set_message(t('Comment approved.'));
+    drupal_goto('node/' . $comment->nid);
+  }
+  return MENU_NOT_FOUND;
 }
