diff --git a/includes/menu.inc b/includes/menu.inc
index cfd35c7..1267928 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -458,8 +458,8 @@ function menu_get_item($path = NULL, $router_item = NULL) {
       }
       if ($router_item['access']) {
         $router_item['map'] = $map;
-        $router_item['page_arguments'] = array_merge(menu_unserialize($router_item['page_arguments'], $map), array_slice($map, $router_item['number_parts']));
-        $router_item['theme_arguments'] = array_merge(menu_unserialize($router_item['theme_arguments'], $map), array_slice($map, $router_item['number_parts']));
+        $router_item['page_arguments'] = menu_unserialize($router_item['page_arguments'], $map);
+        $router_item['theme_arguments'] = menu_unserialize($router_item['theme_arguments'], $map);
       }
     }
     $router_items[$path] = $router_item;
@@ -748,6 +748,12 @@ function _menu_translate(&$router_item, $map, $to_arg = FALSE) {
     $router_item['access'] = FALSE;
     return FALSE;
   }
+  // A path with extra parts is not considered valid. We check here since a
+  // load function like menu_tail_load may have changed the map.
+  if (count($map) > $router_item['number_parts']) {
+    $router_item['access'] = FALSE;
+    return FALSE;
+  }
 
   // Generate the link path for the page request or local tasks.
   $link_map = explode('/', $router_item['path']);
@@ -1860,13 +1866,14 @@ function menu_local_tasks($level = 0) {
     $root_path = $router_item['path'];
 
     foreach ($result as $item) {
-      _menu_translate($item, $map, TRUE);
-      if ($item['tab_parent']) {
-        // All tabs, but not the root page.
-        $children[$item['tab_parent']][$item['path']] = $item;
+      if  (_menu_translate($item, $map, TRUE) !== FALSE) {
+        if ($item['tab_parent']) {
+          // All tabs, but not the root page.
+          $children[$item['tab_parent']][$item['path']] = $item;
+        }
+        // Store the translated item for later use.
+        $tasks[$item['path']] = $item;
       }
-      // Store the translated item for later use.
-      $tasks[$item['path']] = $item;
     }
 
     // Find all tabs below the current path.
@@ -2113,8 +2120,8 @@ function menu_contextual_links($module, $parent_path, $args) {
     $key = drupal_substr($item['path'], $parent_length);
 
     // Denormalize and translate the contextual link.
-    _menu_translate($item, $map, TRUE);
-    if (!$item['access']) {
+    $translated_map = _menu_translate($item, $map, TRUE);
+    if ($translated_map === FALSE || !$item['access']) {
       continue;
     }
     // All contextual links are keyed by the actual "task" path argument,
@@ -2404,8 +2411,8 @@ function menu_link_get_preferred($path = NULL) {
         }
         $candidate_item = $candidates[$link_path][$menu_name];
         $map = explode('/', $path);
-        _menu_translate($candidate_item, $map);
-        if ($candidate_item['access']) {
+        $translated_map = _menu_translate($candidate_item, $map);
+        if ($translated_map !== FALSE && $candidate_item['access']) {
           $preferred_links[$path] = $candidate_item;
         }
         break 2;
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index 0381fac..0b64b9b 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -277,12 +277,19 @@ function comment_menu() {
   $items['comment/reply/%node'] = array(
     'title' => 'Add new comment',
     'page callback' => 'comment_reply',
-    'page arguments' => array(2),
+    'page arguments' => array(2, NULL),
+    'access callback' => 'node_access',
+    'access arguments' => array('view', 2),
+    'file' => 'comment.pages.inc',
+  );
+  $items['comment/reply/%node/%'] = array(
+    'title' => 'Add new comment',
+    'page callback' => 'comment_reply',
+    'page arguments' => array(2, 3),
     'access callback' => 'node_access',
     'access arguments' => array('view', 2),
     'file' => 'comment.pages.inc',
   );
-
   return $items;
 }
 
diff --git a/modules/forum/forum.module b/modules/forum/forum.module
index c58b5c9..b1d3bcb 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -178,7 +178,8 @@ function forum_menu_local_tasks_alter(&$data, $router_item, $root_path) {
             '#theme' => 'menu_local_action',
             '#link' => array(
               'title' => t('Add new @node_type', array('@node_type' => node_type_get_name($type))),
-              'href' => 'node/add/' . str_replace('_', '-', $type) . '/' . $forum_term->tid,
+              'href' => 'node/add/' . str_replace('_', '-', $type),
+              'localized_options' => array('query' => array('tid' => $forum_term->tid)),
             ),
           );
         }
@@ -604,9 +605,9 @@ function forum_form_alter(&$form, $form_state, $form_id) {
     $form['taxonomy_forums'][$langcode]['#multiple'] = FALSE;
     if (empty($form['taxonomy_forums'][$langcode]['#default_value'])) {
       // If there is no default forum already selected, try to get the forum
-      // ID from the URL (e.g., if we are on a page like node/add/forum/2, we
+      // ID from the URL (e.g., if we are on a page like node/add/forum?tid=2, we
       // expect "2" to be the ID of the forum that was requested).
-      $requested_forum_id = arg(3);
+      $requested_forum_id = isset($_GET['tid']) ? $_GET['tid'] : NULL;
       $form['taxonomy_forums'][$langcode]['#default_value'] = is_numeric($requested_forum_id) ? $requested_forum_id : '';
     }
   }
diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index 9e7d69d..42e9715 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -2980,10 +2980,7 @@ function system_actions_manage_form_submit($form, &$form_state) {
  * @see system_actions_configure_validate()
  * @see system_actions_configure_submit()
  */
-function system_actions_configure($form, &$form_state, $action = NULL) {
-  if ($action === NULL) {
-    drupal_goto('admin/config/system/actions');
-  }
+function system_actions_configure($form, &$form_state, $action) {
 
   $actions_map = actions_actions_map(actions_list());
   $edit = array();
diff --git a/modules/system/system.module b/modules/system/system.module
index 5af9ad4..3f6a7de 100644
--- a/modules/system/system.module
+++ b/modules/system/system.module
@@ -944,7 +944,7 @@ function system_menu() {
     'weight' => -2,
     'file' => 'system.admin.inc',
   );
-  $items['admin/config/system/actions/configure'] = array(
+  $items['admin/config/system/actions/configure/%'] = array(
     'title' => 'Configure an advanced action',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('system_actions_configure'),
diff --git a/modules/trigger/trigger.module b/modules/trigger/trigger.module
index 6c1f58f..b847782 100644
--- a/modules/trigger/trigger.module
+++ b/modules/trigger/trigger.module
@@ -45,6 +45,7 @@ function trigger_menu() {
     'title' => 'Triggers',
     'description' => 'Configure when to execute actions.',
     'page callback' => 'trigger_assign',
+    'page arguments' => array(NULL),
     'access arguments' => array('administer actions'),
     'file' => 'trigger.admin.inc',
   );
