 .../Core/Menu/DefaultMenuLinkTreeManipulators.php  | 10 ++---
 core/lib/Drupal/Core/Menu/MenuLinkBase.php         |  2 +-
 .../src/Tests/PageCacheTagsIntegrationTest.php     | 12 ++----
 .../user/src/Plugin/Menu/MyAccountMenuLink.php     | 50 ++++++++++++++++++++++
 core/modules/user/user.links.menu.yml              |  1 +
 .../config/install/block.block.bartik_login.yml    | 18 --------
 core/themes/bartik/css/colors.css                  |  3 +-
 7 files changed, 62 insertions(+), 34 deletions(-)

diff --git a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
index 9461683..948624c 100644
--- a/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
+++ b/core/lib/Drupal/Core/Menu/DefaultMenuLinkTreeManipulators.php
@@ -206,15 +206,13 @@ protected function menuLinkCheckAccess(MenuLinkInterface $instance) {
       $access_result = AccessResult::allowed();
     }
     else {
-      // Use the definition here since that's a lot faster than creating a Url
-      // object that we don't need.
-      $definition = $instance->getPluginDefinition();
-      // 'url' should only be populated for external links.
-      if (!empty($definition['url']) && empty($definition['route_name'])) {
+      $route_name = $instance->getRouteName();
+      // When no route name is specified, this must be an external link.
+      if (empty($route_name)) {
         $access_result = AccessResult::allowed();
       }
       else {
-        $access_result = $this->accessManager->checkNamedRoute($definition['route_name'], $definition['route_parameters'], $this->account, TRUE);
+        $access_result = $this->accessManager->checkNamedRoute($route_name, $instance->getRouteParameters(), $this->account, TRUE);
       }
     }
     return $access_result->cachePerPermissions();
diff --git a/core/lib/Drupal/Core/Menu/MenuLinkBase.php b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
index 6ecfbdf..8f1c112 100644
--- a/core/lib/Drupal/Core/Menu/MenuLinkBase.php
+++ b/core/lib/Drupal/Core/Menu/MenuLinkBase.php
@@ -130,7 +130,7 @@ public function getUrlObject($title_attribute = TRUE) {
       $options['attributes']['title'] = $description;
     }
     if (empty($this->pluginDefinition['url'])) {
-      return new Url($this->pluginDefinition['route_name'], $this->pluginDefinition['route_parameters'], $options);
+      return new Url($this->getRouteName(), $this->getRouteParameters(), $options);
     }
     else {
       return Url::fromUri($this->pluginDefinition['url'], $options);
diff --git a/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
index c471cea..e76dfa0 100644
--- a/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
+++ b/core/modules/page_cache/src/Tests/PageCacheTagsIntegrationTest.php
@@ -71,13 +71,13 @@ function testPageCacheTags() {
 
     $cache_contexts = [
       'languages:' . LanguageInterface::TYPE_INTERFACE,
-      'route',
+      'route.menu_active_trails:account',
+      'route.menu_active_trails:footer',
+      'route.menu_active_trails:main',
+      'route.menu_active_trails:tools',
       'theme',
       'timezone',
       'user.permissions',
-      // The user login block access depends on whether the current user is
-      // logged in or not.
-      'user.roles:anonymous',
       // The cache contexts associated with the (in)accessible menu links are
       // bubbled.
       'user.roles:authenticated',
@@ -94,7 +94,6 @@ function testPageCacheTags() {
       'config:block.block.bartik_breadcrumbs',
       'config:block.block.bartik_content',
       'config:block.block.bartik_tools',
-      'config:block.block.bartik_login',
       'config:block.block.bartik_footer',
       'config:block.block.bartik_help',
       'config:block.block.bartik_search',
@@ -111,7 +110,6 @@ function testPageCacheTags() {
       'config:system.menu.tools',
       'config:system.menu.footer',
       'config:system.menu.main',
-      'config:system.site',
       // FinishResponseSubscriber adds this cache tag to responses that have the
       // 'user.permissions' cache context for anonymous users.
       'config:user.role.anonymous',
@@ -128,7 +126,6 @@ function testPageCacheTags() {
       'config:block.block.bartik_breadcrumbs',
       'config:block.block.bartik_content',
       'config:block.block.bartik_tools',
-      'config:block.block.bartik_login',
       'config:block.block.bartik_help',
       'config:block.block.bartik_search',
       'config:block.block.' . $block->id(),
@@ -145,7 +142,6 @@ function testPageCacheTags() {
       'config:system.menu.tools',
       'config:system.menu.footer',
       'config:system.menu.main',
-      'config:system.site',
       'comment_list',
       'node_list',
       'config:views.view.comments_recent',
diff --git a/core/modules/user/src/Plugin/Menu/MyAccountMenuLink.php b/core/modules/user/src/Plugin/Menu/MyAccountMenuLink.php
new file mode 100644
index 0000000..5c8c3f1
--- /dev/null
+++ b/core/modules/user/src/Plugin/Menu/MyAccountMenuLink.php
@@ -0,0 +1,50 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\user\Plugin\Menu\MyAccountMenuLink.
+ */
+
+namespace Drupal\user\Plugin\Menu;
+
+use Drupal\Core\Menu\MenuLinkDefault;
+
+/**
+ * A menu link that falls back to the "Log in" link for anonymous users.
+ *
+ * @see \Drupal\Core\Menu\DefaultMenuLinkTreeManipulators::checkAccess()
+ */
+class MyAccountMenuLink extends MenuLinkDefault {
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getTitle() {
+    if (\Drupal::currentUser()->isAuthenticated()) {
+      return parent::getTitle();
+    }
+    else {
+      return $this->t('Log in');
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getRouteName() {
+    if (\Drupal::currentUser()->isAuthenticated()) {
+      return parent::getRouteName();
+    }
+    else {
+      return 'user.login';
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheContexts() {
+    return ['user.roles:authenticated'];
+  }
+
+}
diff --git a/core/modules/user/user.links.menu.yml b/core/modules/user/user.links.menu.yml
index 46a2947..5a0eadc 100644
--- a/core/modules/user/user.links.menu.yml
+++ b/core/modules/user/user.links.menu.yml
@@ -3,6 +3,7 @@ user.page:
   weight: -10
   route_name: user.page
   menu_name: account
+  class: Drupal\user\Plugin\Menu\MyAccountMenuLink
 user.logout:
   title: 'Log out'
   route_name: user.logout
diff --git a/core/profiles/standard/config/install/block.block.bartik_login.yml b/core/profiles/standard/config/install/block.block.bartik_login.yml
deleted file mode 100644
index 3a5f543..0000000
--- a/core/profiles/standard/config/install/block.block.bartik_login.yml
+++ /dev/null
@@ -1,18 +0,0 @@
-id: bartik_login
-theme: bartik
-weight: 0
-status: true
-langcode: en
-region: sidebar_first
-plugin: user_login_block
-settings:
-  id: user_login_block
-  label: 'User login'
-  provider: user
-  label_display: visible
-dependencies:
-  module:
-    - user
-  theme:
-    - bartik
-visibility: {  }
diff --git a/core/themes/bartik/css/colors.css b/core/themes/bartik/css/colors.css
index d56f24b..8a18c6b 100644
--- a/core/themes/bartik/css/colors.css
+++ b/core/themes/bartik/css/colors.css
@@ -50,7 +50,8 @@ a:active,
 .site-branding-block,
 #name-and-slogan a,
 .site-branding-block a,
-.region-secondary-menu .menu-item a {
+.region-secondary-menu .menu-item a,
+.region-secondary-menu .menu-item a.is-active {
   color: #fffeff;
 }
 
