diff --git a/includes/menu.inc b/includes/menu.inc
index 02370ac..c8ec414 100644
--- a/includes/menu.inc
+++ b/includes/menu.inc
@@ -2446,27 +2446,14 @@ function menu_get_active_breadcrumb() {
     // faster than rebuilding an entirely new active trail.
     drupal_alter('menu_breadcrumb', $active_trail, $item);
 
-    // Don't show a link to the current page in the breadcrumb trail.
-    $end = end($active_trail);
-    if ($item['href'] == $end['href']) {
-      array_pop($active_trail);
-    }
-
-    // Remove the tab root (parent) if the current path links to its parent.
-    // Normally, the tab root link is included in the breadcrumb, as soon as we
-    // are on a local task or any other child link. However, if we are on a
-    // default local task (e.g., node/%/view), then we do not want the tab root
-    // link (e.g., node/%) to appear, as it would be identical to the current
-    // page. Since this behavior also needs to work recursively (i.e., on
-    // default local tasks of default local tasks), and since the last non-task
-    // link in the trail is used as page title (see menu_get_active_title()),
-    // this condition cannot be cleanly integrated into menu_get_active_trail().
-    // menu_get_active_trail() already skips all links that link to their parent
-    // (commonly MENU_DEFAULT_LOCAL_TASK). In order to also hide the parent link
-    // itself, we always remove the last link in the trail, if the current
-    // router item links to its parent.
-    if (($item['type'] & MENU_LINKS_TO_PARENT) == MENU_LINKS_TO_PARENT) {
-      array_pop($active_trail);
+    // Remove breadcrumbs that link to current page or tabs.
+    foreach ($active_trail as $key => $trail_item) {
+      if ($item['tab_root_href'] == $trail_item['href']) {
+        $delete = TRUE;
+      }
+      if (isset($delete)) {
+        unset($active_trail[$key]);
+      }
     }
 
     foreach ($active_trail as $parent) {
diff --git a/modules/simpletest/tests/menu.test b/modules/simpletest/tests/menu.test
index 2578beb..576ea14 100644
--- a/modules/simpletest/tests/menu.test
+++ b/modules/simpletest/tests/menu.test
@@ -911,15 +911,9 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks', $trail, $title, $tree);
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks/first', $trail, $title, $tree);
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks/first/first', $trail, $title, $tree);
-    $trail += array(
-      'menu-test/breadcrumb/tasks' => t('Breadcrumbs test: Local tasks'),
-    );
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks/first/second', $trail, $title, $tree);
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks/second', $trail, $title, $tree);
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks/second/first', $trail, $title, $tree);
-    $trail += array(
-      'menu-test/breadcrumb/tasks/second' => t('Second'),
-    );
     $this->assertBreadcrumb('menu-test/breadcrumb/tasks/second/second', $trail, $title, $tree);
 
     // Verify Taxonomy administration breadcrumbs.
@@ -932,9 +926,6 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
       'admin/structure/taxonomy' => t('Taxonomy'),
     );
     $this->assertBreadcrumb('admin/structure/taxonomy/tags', $trail);
-    $trail += array(
-      'admin/structure/taxonomy/tags' => t('Tags'),
-    );
     $this->assertBreadcrumb('admin/structure/taxonomy/tags/edit', $trail);
     $this->assertBreadcrumb('admin/structure/taxonomy/tags/fields', $trail);
     $this->assertBreadcrumb('admin/structure/taxonomy/tags/add', $trail);
@@ -949,40 +940,37 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
       'admin/structure/menu' => t('Menus'),
     );
     $this->assertBreadcrumb('admin/structure/menu/manage/navigation', $trail);
-    $trail += array(
-      'admin/structure/menu/manage/navigation' => t('Navigation'),
-    );
     $this->assertBreadcrumb('admin/structure/menu/manage/navigation/edit', $trail);
     $this->assertBreadcrumb('admin/structure/menu/manage/navigation/add', $trail);
 
     // Verify Node administration breadcrumbs.
     $trail = $admin + array(
       'admin/structure' => t('Structure'),
-      'admin/structure/types' => t('Content types'),
     );
     $this->assertBreadcrumb('admin/structure/types/add', $trail);
-    $this->assertBreadcrumb("admin/structure/types/manage/$type", $trail);
-    $trail += array(
-      "admin/structure/types/manage/$type" => t('Article'),
+    $trail = $admin + array(
+      'admin/structure' => t('Structure'),
+      'admin/structure/types' => t('Content types'),
     );
+    $this->assertBreadcrumb("admin/structure/types/manage/$type", $trail);
     $this->assertBreadcrumb("admin/structure/types/manage/$type/fields", $trail);
     $this->assertBreadcrumb("admin/structure/types/manage/$type/display", $trail);
-    $trail_teaser = $trail + array(
-      "admin/structure/types/manage/$type/display" => t('Manage display'),
-    );
-    $this->assertBreadcrumb("admin/structure/types/manage/$type/display/teaser", $trail_teaser);
+    $this->assertBreadcrumb("admin/structure/types/manage/$type/display/teaser", $trail);
     $this->assertBreadcrumb("admin/structure/types/manage/$type/comment/fields", $trail);
     $this->assertBreadcrumb("admin/structure/types/manage/$type/comment/display", $trail);
+
+    $trail += array(
+      "admin/structure/types/manage/$type" => t('Article'),
+    );
     $this->assertBreadcrumb("admin/structure/types/manage/$type/delete", $trail);
+
     $trail += array(
       "admin/structure/types/manage/$type/fields" => t('Manage fields'),
     );
     $this->assertBreadcrumb("admin/structure/types/manage/$type/fields/body", $trail);
-    $trail += array(
-      "admin/structure/types/manage/$type/fields/body" => t('Body'),
-    );
     $this->assertBreadcrumb("admin/structure/types/manage/$type/fields/body/widget-type", $trail);
 
+
     // Verify Filter text format administration breadcrumbs.
     $format = db_query_range("SELECT format, name FROM {filter_format}", 1, 1)->fetch();
     $format_id = $format->format;
@@ -991,10 +979,10 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     );
     $this->assertBreadcrumb('admin/config/content/formats', $trail);
 
+    $this->assertBreadcrumb('admin/config/content/formats/add', $trail);
     $trail += array(
       'admin/config/content/formats' => t('Text formats'),
     );
-    $this->assertBreadcrumb('admin/config/content/formats/add', $trail);
     $this->assertBreadcrumb("admin/config/content/formats/$format_id", $trail);
     $trail += array(
       "admin/config/content/formats/$format_id" => $format->name,
@@ -1014,9 +1002,6 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     // Also verify that the node does not appear elsewhere (e.g., menu trees).
     $this->assertNoLink($node1->title);
 
-    $trail += array(
-      "node/$nid1" => $node1->title,
-    );
     $this->assertBreadcrumb("node/$nid1/edit", $trail);
 
     // Verify that breadcrumb on node listing page contains "Home" only.
@@ -1057,10 +1042,10 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
       // The node itself should not be contained in the breadcrumb on the
       // default local task, since there is no difference between both pages.
       $this->assertBreadcrumb("node/$nid2/view", $trail, $node2->title, $tree);
+      $this->assertBreadcrumb("node/$nid2/edit", $trail);
       $trail += array(
         "node/$nid2" => $node2->menu['link_title'],
       );
-      $this->assertBreadcrumb("node/$nid2/edit", $trail);
 
       // Create a child node in the current menu.
       $title = $this->randomName();
@@ -1081,12 +1066,6 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
       // The node itself should not be contained in the breadcrumb on the
       // default local task, since there is no difference between both pages.
       $this->assertBreadcrumb("node/$nid3/view", $trail, $node3->title, $tree, FALSE);
-      $trail += array(
-        "node/$nid3" => $node3->menu['link_title'],
-      );
-      $tree += array(
-        "node/$nid3" => $node3->menu['link_title'],
-      );
       $this->assertBreadcrumb("node/$nid3/edit", $trail);
 
       // Verify that node listing page still contains "Home" only.
@@ -1225,9 +1204,6 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     $trail = $home;
     $this->assertBreadcrumb('user', $trail, $this->admin_user->name);
     $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $this->admin_user->name);
-    $trail += array(
-      'user/' . $this->admin_user->uid => $this->admin_user->name,
-    );
     $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $this->admin_user->name);
 
     // Create a second user to verify breadcrumb on user pages again.
@@ -1241,18 +1217,12 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     // (without menu link).
     $trail = $home;
     $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $this->admin_user->name);
-    $trail += array(
-      'user/' . $this->admin_user->uid => $this->admin_user->name,
-    );
     $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $this->admin_user->name);
 
     // Verify correct breadcrumb and page title when viewing own user account
     // pages (without menu link).
     $trail = $home;
     $this->assertBreadcrumb('user/' . $this->web_user->uid, $trail, $this->web_user->name);
-    $trail += array(
-      'user/' . $this->web_user->uid => $this->web_user->name,
-    );
     $this->assertBreadcrumb('user/' . $this->web_user->uid . '/edit', $trail, $this->web_user->name);
 
     // Add a Navigation menu links for 'user' and $this->admin_user.
@@ -1292,9 +1262,6 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $link_admin_user['link_title'], $tree);
 
     $this->drupalLogin($this->admin_user);
-    $trail += array(
-      $link_admin_user['link_path'] => $link_admin_user['link_title'],
-    );
     $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $link_admin_user['link_title'], $tree, FALSE);
 
     // Move 'user/%' below 'user' and verify again.
@@ -1318,9 +1285,6 @@ class MenuBreadcrumbTestCase extends DrupalWebTestCase {
     $this->assertBreadcrumb('user/' . $this->admin_user->uid, $trail, $link_admin_user['link_title'], $tree);
 
     $this->drupalLogin($this->admin_user);
-    $trail += array(
-      $link_admin_user['link_path'] => $link_admin_user['link_title'],
-    );
     $this->assertBreadcrumb('user/' . $this->admin_user->uid . '/edit', $trail, $link_admin_user['link_title'], $tree, FALSE);
 
     // Create an only slightly privileged user being able to access site reports
