diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 29cf0e3..9723219 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -1403,7 +1403,6 @@ function template_preprocess_page(&$variables) {
 
   // Move some variables to the top level for themer convenience and template cleanliness.
   $variables['show_messages'] = $variables['page']['#show_messages'];
-  $variables['title'] = $variables['page']['#title'];
 
   foreach (system_region_list(\Drupal::theme()->getActiveTheme()->getName()) as $region_key => $region_name) {
     if (!isset($variables['page'][$region_key])) {
@@ -1428,14 +1427,6 @@ function template_preprocess_page(&$variables) {
     $variables['is_front'] = FALSE;
     $variables['db_is_active'] = FALSE;
   }
-  if (!defined('MAINTENANCE_MODE')) {
-    $variables['action_links']   = menu_get_local_actions();
-    $variables['tabs']           = menu_local_tabs();
-  }
-  else {
-    $variables['action_links']   = array();
-    $variables['tabs']           = array();
-  }
 
   if ($node = \Drupal::routeMatch()->getParameter('node')) {
     $variables['node'] = $node;
diff --git a/core/lib/Drupal/Core/Extension/ThemeHandler.php b/core/lib/Drupal/Core/Extension/ThemeHandler.php
index 9529c8a..480a779 100644
--- a/core/lib/Drupal/Core/Extension/ThemeHandler.php
+++ b/core/lib/Drupal/Core/Extension/ThemeHandler.php
@@ -469,6 +469,9 @@ public function rebuildThemeData() {
         'page_top' => 'Page top',
         'page_bottom' => 'Page bottom',
         'breadcrumb' => 'Breadcrumb',
+        'page_title' => 'Page title',
+        'page_tabs' => 'Page tabs',
+        'page_actions' => 'Page actions',
       ),
       'description' => '',
       'features' => $this->defaultFeatures,
diff --git a/core/modules/system/src/Plugin/Block/SystemPageActionsBlock.php b/core/modules/system/src/Plugin/Block/SystemPageActionsBlock.php
new file mode 100644
index 0000000..3d5a9e0
--- /dev/null
+++ b/core/modules/system/src/Plugin/Block/SystemPageActionsBlock.php
@@ -0,0 +1,136 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Plugin\Block\SystemPageActionsBlock.
+ */
+
+namespace Drupal\system\Plugin\Block;
+
+use Drupal\Core\Block\BlockBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Menu\LocalActionManager;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Symfony\Cmf\Component\Routing\RouteObjectInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
+
+/**
+ * Provides a block to display the page local actions.
+ *
+ * @Block(
+ *   id = "system_page_actions_block",
+ *   admin_label = @Translation("Page actions")
+ * )
+ */
+class SystemPageActionsBlock extends BlockBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * Stores the configuration factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * A local action manger.
+   *
+   * @var \Drupal\Core\Menu\LocalActionManager
+   */
+  protected $localActionManager;
+
+  /**
+   * A request stack object.
+   *
+   * @var \Symfony\Component\HttpFoundation\RequestStack
+   */
+  protected $requestStack;
+
+  /**
+   * Creates a SystemPageActionsBlock instance.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The factory for configuration objects.
+   * @param \Drupal\Core\Menu\LocalActionManager $local_action_manager
+   *   The local action manager.
+   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
+   *   The request stack object.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, LocalActionManager $local_action_manager, RequestStack $request_stack) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->configFactory = $config_factory;
+    $this->localActionManager = $local_action_manager;
+    $this->requestStack = $request_stack;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('config.factory'),
+      $container->get('plugin.manager.menu.local_action'),
+      $container->get('request_stack')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['label_display' => FALSE];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $build = [];
+    $links = menu_local_tasks();
+    $request = $this->requestStack->getCurrentRequest();
+    $route_name = $request->attributes->get(RouteObjectInterface::ROUTE_NAME);
+    $action_links = $this->localActionManager->getActionsForRoute($route_name) + $links['actions'];
+    if (empty($action_links)) {
+      return FALSE;
+    }
+
+    $build['action_links'] = ['#markup' => $action_links];
+
+    return $build;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildConfigurationForm($form, $form_state);
+
+    // The "Page actions" block is never cacheable, due to access checking.
+    $form['cache']['#disabled'] = TRUE;
+    $form['cache']['#description'] = $this->t('This block is never cacheable because access checking is needed, it is not configurable.');
+    $form['cache']['max_age']['#value'] = 0;
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isCacheable() {
+    // The "Page Actions" block is never cacheable, because its contents depends
+    // on access checks, which are currently uncacheable.
+    // @todo Make cacheable once https://drupal.org/node/2287071 lands.
+    return FALSE;
+  }
+
+}
diff --git a/core/modules/system/src/Plugin/Block/SystemPageTabsBlock.php b/core/modules/system/src/Plugin/Block/SystemPageTabsBlock.php
new file mode 100644
index 0000000..ad240d4
--- /dev/null
+++ b/core/modules/system/src/Plugin/Block/SystemPageTabsBlock.php
@@ -0,0 +1,105 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Plugin\Block\SystemPageTabsBlock.
+ */
+
+namespace Drupal\system\Plugin\Block;
+
+use Drupal\Core\Block\BlockBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a block to display the page tabs.
+ *
+ * @Block(
+ *   id = "system_page_tabs_block",
+ *   admin_label = @Translation("Page tabs")
+ * )
+ */
+class SystemPageTabsBlock extends BlockBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * Stores the configuration factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * Creates a SystemPageTabsBlock instance.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The factory for configuration objects.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->configFactory = $config_factory;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('config.factory')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['label_display' => FALSE];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $tabs = menu_local_tabs();
+    if (empty($tabs)) {
+      return FALSE;
+    }
+    $build['tabs']['#markup'] = menu_local_tabs();
+    return $build;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildConfigurationForm($form, $form_state);
+
+    // The "Page tabs" block is never cacheable, due to access checking.
+    $form['cache']['#disabled'] = TRUE;
+    $form['cache']['#description'] = $this->t('This block is never cacheable because access checking is needed, it is not configurable.');
+    $form['cache']['max_age']['#value'] = 0;
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isCacheable() {
+    // The "Page Tabs" block is never cacheable, because its contents depends
+    // on access checks, which are currently uncacheable.
+    // @todo Make cacheable once https://drupal.org/node/2287071 lands.
+    return FALSE;
+  }
+
+}
diff --git a/core/modules/system/src/Plugin/Block/SystemPageTitleBlock.php b/core/modules/system/src/Plugin/Block/SystemPageTitleBlock.php
new file mode 100644
index 0000000..e8bf660
--- /dev/null
+++ b/core/modules/system/src/Plugin/Block/SystemPageTitleBlock.php
@@ -0,0 +1,135 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Plugin\Block\SystemPageTitleBlock.
+ */
+
+namespace Drupal\system\Plugin\Block;
+
+use Drupal\Core\Block\BlockBase;
+use Drupal\Core\Config\ConfigFactoryInterface;
+use Drupal\Core\Controller\TitleResolverInterface;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
+use Symfony\Cmf\Component\Routing\RouteObjectInterface;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\RequestStack;
+
+/**
+ * Provides a block to display the page title.
+ *
+ * @Block(
+ *   id = "system_page_title_block",
+ *   admin_label = @Translation("Page title")
+ * )
+ */
+class SystemPageTitleBlock extends BlockBase implements ContainerFactoryPluginInterface {
+
+  /**
+   * Stores the configuration factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactoryInterface
+   */
+  protected $configFactory;
+
+  /**
+   * The title resolver.
+   *
+   * @var \Drupal\Core\Controller\TitleResolverInterface
+   */
+  protected $titleResolver;
+
+  /**
+   * A request stack object.
+   *
+   * @var \Symfony\Component\HttpFoundation\RequestStack
+   */
+  protected $requestStack;
+
+  /**
+   * Creates a SystemPageTitleBlock instance.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Config\ConfigFactoryInterface $config_factory
+   *   The factory for configuration objects.
+   * @param \Drupal\Core\Controller\TitleResolverInterface $title_resolver
+   *   The title resolver.
+   * @param \Symfony\Component\HttpFoundation\RequestStack $request_stack
+   *   The request stack object.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, ConfigFactoryInterface $config_factory, TitleResolverInterface $title_resolver, RequestStack $request_stack) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition);
+    $this->configFactory = $config_factory;
+    $this->titleResolver = $title_resolver;
+    $this->requestStack = $request_stack;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static(
+      $configuration,
+      $plugin_id,
+      $plugin_definition,
+      $container->get('config.factory'),
+      $container->get('title_resolver'),
+      $container->get('request_stack')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function defaultConfiguration() {
+    return ['label_display' => FALSE];
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function build() {
+    $build = array();
+    $title = '';
+    $request = $this->requestStack->getCurrentRequest();
+    if ($route = $request->attributes->get(routeObjectInterface::ROUTE_OBJECT)) {
+      $title = $this->titleResolver->getTitle($request, $route);
+    }
+    if (empty($title)) {
+      return FALSE;
+    }
+
+    $build['title'] = ['#markup' => $title];
+
+    return $build;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
+    $form = parent::buildConfigurationForm($form, $form_state);
+
+    // The 'Page title' block is never cacheable, because it may be dynamic.
+    $form['cache']['#disabled'] = TRUE;
+    $form['cache']['#description'] = t('This block is never cacheable, it is not configurable.');
+    $form['cache']['max_age']['#value'] = 0;
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function isCacheable() {
+    // The 'Page title' block is never cacheable, because it may be dynamic.
+    return FALSE;
+  }
+
+}
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index a0fa679..b4bce41 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -168,6 +168,18 @@ function system_theme() {
       'render element' => 'elements',
       'base hook' => 'block',
     ),
+    'block__system_page_title_block' => array(
+      'base hook' => 'block',
+      'template' => 'block--system-page-title-block',
+    ),
+    'block__system_page_actions_block' => array(
+      'base hook' => 'block',
+      'template' => 'block--system-page-actions-block',
+    ),
+    'block__system_page_tabs_block' => array(
+      'base hook' => 'block',
+      'template' => 'block--system-page-tabs-block',
+    ),
     'block__system_menu_block' => array(
       'render element' => 'elements',
       'base hook' => 'block',
@@ -783,7 +795,24 @@ function system_preprocess_block(&$variables) {
         $variables['site_slogan'] = $variables['content']['site_slogan']['#markup'];
       }
       break;
-
+    case 'system_page_title_block':
+      $variables['title'] = '';
+      if($variables['content']['title']['#markup']) {
+        $variables['title'] = $variables['content']['title']['#markup'];
+      }
+      break;
+    case 'system_page_actions_block':
+      $variables['action_links'] = '';
+      if($variables['content']['action_links']['#markup']) {
+        $variables['action_links'] = $variables['content']['action_links']['#markup'];
+      }
+      break;
+    case 'system_page_tabs_block':
+      $variables['tabs'] = '';
+      if($variables['content']['tabs']['#markup']) {
+        $variables['tabs'] = $variables['content']['tabs']['#markup'];
+      }
+      break;
     case 'system_powered_by_block':
       $variables['attributes']['role'] = 'complementary';
       break;
diff --git a/core/modules/system/templates/block--system-page-actions-block.html.twig b/core/modules/system/templates/block--system-page-actions-block.html.twig
new file mode 100644
index 0000000..a5972dc
--- /dev/null
+++ b/core/modules/system/templates/block--system-page-actions-block.html.twig
@@ -0,0 +1,18 @@
+{% extends "@block/block.html.twig" %}
+{#
+/**
+ * @file
+ * Default theme implementation for page local actions.
+ *
+ * Available variables:
+ * - action_links: Actions local to the page, such as "Add menu" on the menu
+ *   administration interface.
+ *
+ * @ingroup themeable
+ */
+#}
+{% block content %}
+  {% if action_links %}
+    <nav class="action-links">{{ action_links }}</nav>
+  {% endif %}
+{% endblock %}
diff --git a/core/modules/system/templates/block--system-page-tabs-block.html.twig b/core/modules/system/templates/block--system-page-tabs-block.html.twig
new file mode 100644
index 0000000..780abe7
--- /dev/null
+++ b/core/modules/system/templates/block--system-page-tabs-block.html.twig
@@ -0,0 +1,16 @@
+{% extends "@block/block.html.twig" %}
+{#
+/**
+ * @file
+ * Default theme implementation for page tabs.
+ *
+ * Available variables:
+ * - tabs: The Tabs linking to any sub-pages beneath the current page (e.g., the
+ *   view and edit tabs when displaying a node).
+ *
+ * @ingroup themeable
+ */
+#}
+{% block content %}
+  {{ tabs }}
+{% endblock %}
diff --git a/core/modules/system/templates/block--system-page-title-block.html.twig b/core/modules/system/templates/block--system-page-title-block.html.twig
new file mode 100644
index 0000000..aca427c
--- /dev/null
+++ b/core/modules/system/templates/block--system-page-title-block.html.twig
@@ -0,0 +1,23 @@
+{% extends "@block/block.html.twig" %}
+{#
+/**
+ * @file
+ * Default theme implementation for a page title.
+ *
+ * Available variables:
+ * - title_prefix: Additional output populated by modules, intended to be
+ *   displayed in front of the main title tag that appears in the template.
+ * - title: The page title, for use in the actual content.
+ * - title_suffix: Additional output populated by modules, intended to be
+ *   displayed after the main title tag that appears in the template.
+ *
+ * @ingroup themeable
+ */
+#}
+{% block content %}
+  {{ title_prefix }}
+  {% if title %}
+    <h1>{{ title }}</h1>
+  {% endif %}
+  {{ title_suffix }}
+{% endblock %}
diff --git a/core/modules/system/templates/page.html.twig b/core/modules/system/templates/page.html.twig
index 627d7c7..82a7c95 100644
--- a/core/modules/system/templates/page.html.twig
+++ b/core/modules/system/templates/page.html.twig
@@ -28,14 +28,9 @@
  * Page content (in order of occurrence in the default page.html.twig):
  * - title_prefix: Additional output populated by modules, intended to be
  *   displayed in front of the main title tag that appears in the template.
- * - title: The page title, for use in the actual content.
  * - title_suffix: Additional output populated by modules, intended to be
  *   displayed after the main title tag that appears in the template.
  * - messages: Status and error messages. Should be displayed prominently.
- * - tabs: Tabs linking to any sub-pages beneath the current page (e.g., the
- *   view and edit tabs when displaying a node).
- * - action_links: Actions local to the page, such as "Add menu" on the menu
- *   administration interface.
  * - node: Fully loaded node, if there is an automatically-loaded node
  *   associated with the page and the node ID is the second argument in the
  *   page's path (e.g. node/12345 and node/12345/revisions, but not
@@ -52,6 +47,9 @@
  * - page.sidebar_second: Items for the second sidebar.
  * - page.footer: Items for the footer region.
  * - page.breadcrumb: Items for the breadcrumb region.
+ * - page.title: Items for the page title region.
+ * - page.tabs: Items for the tabs region.
+ * - page.actions: Items for the actions region.
  *
  * @see template_preprocess_page()
  * @see html.html.twig
@@ -107,15 +105,13 @@
       {{ page.highlighted }}
 
       {{ title_prefix }}
-      {% if title %}
-        <h1>{{ title }}</h1>
-      {% endif %}
+      {{ page.title }}
       {{ title_suffix }}
 
-      {{ tabs }}
+      {{ page.tabs }}
 
-      {% if action_links %}
-        <nav class="action-links">{{ action_links }}</nav>
+      {% if page.actions %}
+        <nav class="action-links">{{ page.actions }}</nav>
       {% endif %}
 
       {{ page.content }}
diff --git a/core/profiles/standard/config/install/block.block.bartik_page_actions.yml b/core/profiles/standard/config/install/block.block.bartik_page_actions.yml
new file mode 100644
index 0000000..4e051e8
--- /dev/null
+++ b/core/profiles/standard/config/install/block.block.bartik_page_actions.yml
@@ -0,0 +1,18 @@
+id: bartik_page_actions
+theme: bartik
+weight: 10
+status: true
+langcode: en
+region: actions
+plugin: system_page_actions_block
+settings:
+  id: system_page_actions_block
+  label: Page actions
+  provider: system
+  label_display: '0'
+dependencies:
+  module:
+    - system
+  theme:
+    - bartik
+visibility: {  }
diff --git a/core/profiles/standard/config/install/block.block.bartik_page_tabs.yml b/core/profiles/standard/config/install/block.block.bartik_page_tabs.yml
new file mode 100644
index 0000000..c8cf59a
--- /dev/null
+++ b/core/profiles/standard/config/install/block.block.bartik_page_tabs.yml
@@ -0,0 +1,18 @@
+id: bartik_page_tabs
+theme: bartik
+weight: 10
+status: true
+langcode: en
+region: tabs
+plugin: system_page_tabs_block
+settings:
+  id: system_page_tabs_block
+  label: Page tabs
+  provider: system
+  label_display: '0'
+dependencies:
+  module:
+    - system
+  theme:
+    - bartik
+visibility: {  }
diff --git a/core/profiles/standard/config/install/block.block.bartik_page_title.yml b/core/profiles/standard/config/install/block.block.bartik_page_title.yml
new file mode 100644
index 0000000..ff73d59
--- /dev/null
+++ b/core/profiles/standard/config/install/block.block.bartik_page_title.yml
@@ -0,0 +1,18 @@
+id: bartik_page_title
+theme: bartik
+weight: 10
+status: true
+langcode: en
+region: title
+plugin: system_page_title_block
+settings:
+  id: system_page_title_block
+  label: Page title
+  provider: system
+  label_display: '0'
+dependencies:
+  module:
+    - system
+  theme:
+    - bartik
+visibility: {  }
diff --git a/core/profiles/standard/config/install/block.block.seven_page_actions.yml b/core/profiles/standard/config/install/block.block.seven_page_actions.yml
new file mode 100644
index 0000000..7802a57
--- /dev/null
+++ b/core/profiles/standard/config/install/block.block.seven_page_actions.yml
@@ -0,0 +1,18 @@
+id: page_actions
+theme: seven
+weight: 0
+status: true
+langcode: en
+region: actions
+plugin: system_page_actions_block
+settings:
+  id: system_page_actions_block
+  label: Page actions
+  provider: system
+  label_display: '0'
+dependencies:
+  module:
+    - system
+  theme:
+    - seven
+visibility: {  }
diff --git a/core/profiles/standard/config/install/block.block.seven_page_tabs.yml b/core/profiles/standard/config/install/block.block.seven_page_tabs.yml
new file mode 100644
index 0000000..9b9995a
--- /dev/null
+++ b/core/profiles/standard/config/install/block.block.seven_page_tabs.yml
@@ -0,0 +1,18 @@
+id: page_tabs
+theme: seven
+weight: 0
+status: true
+langcode: en
+region: tabs
+plugin: system_page_tabs_block
+settings:
+  id: system_page_tabs_block
+  label: Page tabs
+  provider: system
+  label_display: '0'
+dependencies:
+  module:
+    - system
+  theme:
+    - seven
+visibility: {  }
diff --git a/core/profiles/standard/config/install/block.block.seven_page_title.yml b/core/profiles/standard/config/install/block.block.seven_page_title.yml
new file mode 100644
index 0000000..ae1cb30
--- /dev/null
+++ b/core/profiles/standard/config/install/block.block.seven_page_title.yml
@@ -0,0 +1,18 @@
+id: page_title
+theme: seven
+weight: 0
+status: true
+langcode: en
+region: title
+plugin: system_page_title_block
+settings:
+  id: system_page_title_block
+  label: Page Title
+  provider: system
+  label_display: '0'
+dependencies:
+  module:
+    - system
+  theme:
+    - seven
+visibility: {  }
diff --git a/core/themes/bartik/bartik.info.yml b/core/themes/bartik/bartik.info.yml
index 37a2c68..9713c39 100644
--- a/core/themes/bartik/bartik.info.yml
+++ b/core/themes/bartik/bartik.info.yml
@@ -21,6 +21,9 @@ regions:
   page_bottom: 'Page bottom'
   featured_top: 'Featured top'
   breadcrumb: Breadcrumb
+  title: Title
+  tabs: Tabs
+  actions: Actions
   content: Content
   sidebar_first: 'Sidebar first'
   sidebar_second: 'Sidebar second'
diff --git a/core/themes/bartik/templates/block--system-page-actions-block.html.twig b/core/themes/bartik/templates/block--system-page-actions-block.html.twig
new file mode 100644
index 0000000..b8283b5
--- /dev/null
+++ b/core/themes/bartik/templates/block--system-page-actions-block.html.twig
@@ -0,0 +1,20 @@
+{% extends "@block/block.html.twig" %}
+{#
+/**
+ * @file
+ * Bartik's theme implementation for page local actions.
+ *
+ * Available variables:
+ * - action_links: Actions local to the page, such as "Add menu" on the menu
+ *   administration interface.
+ *
+ * @ingroup themeable
+ */
+#}
+{% block content %}
+  {% if action_links %}
+    <ul class="action-links">
+      {{ action_links }}
+    </ul>
+  {% endif %}
+{% endblock %}
diff --git a/core/themes/bartik/templates/block--system-page-tabs-block.html.twig b/core/themes/bartik/templates/block--system-page-tabs-block.html.twig
new file mode 100644
index 0000000..429ad98
--- /dev/null
+++ b/core/themes/bartik/templates/block--system-page-tabs-block.html.twig
@@ -0,0 +1,20 @@
+{% extends "@block/block.html.twig" %}
+{#
+/**
+ * @file
+ * Bartik's theme implementation for page tabs.
+ *
+ * Available variables:
+ * - tabs: The Tabs linking to any sub-pages beneath the current page (e.g., the
+ *   view and edit tabs when displaying a node).
+ *
+ * @ingroup themeable
+ */
+#}
+{% block content %}
+  {% if tabs %}
+     <nav class="tabs" role="navigation" aria-label="{{ 'Tabs'|t }}">
+       {{ tabs }}
+     </nav>
+  {% endif %}
+{% endblock %}
diff --git a/core/themes/bartik/templates/block--system-page-title-block.html.twig b/core/themes/bartik/templates/block--system-page-title-block.html.twig
new file mode 100644
index 0000000..d95521a
--- /dev/null
+++ b/core/themes/bartik/templates/block--system-page-title-block.html.twig
@@ -0,0 +1,23 @@
+{% extends "@block/block.html.twig" %}
+{#
+/**
+ * @file
+ * Bartik's theme implementation for a page title.
+ *
+ * Available variables:
+ * - title_prefix: Additional output populated by modules, intended to be
+ *   displayed in front of the main title tag that appears in the template.
+ * - title: The page title, for use in the actual content.
+ * - title_suffix: Additional output populated by modules, intended to be
+ *   displayed after the main title tag that appears in the template.
+ *
+ * @ingroup themeable
+ */
+#}
+{% block content %}
+  {% if title %}
+    <h1 class="title" id="page-title">
+      {{ title }}
+    </h1>
+  {% endif %}
+{% endblock %}
diff --git a/core/themes/bartik/templates/page.html.twig b/core/themes/bartik/templates/page.html.twig
index 8429b44..9e4a420 100644
--- a/core/themes/bartik/templates/page.html.twig
+++ b/core/themes/bartik/templates/page.html.twig
@@ -35,14 +35,9 @@
  * Page content (in order of occurrence in the default page.html.twig):
  * - title_prefix: Additional output populated by modules, intended to be
  *   displayed in front of the main title tag that appears in the template.
- * - title: The page title, for use in the actual content.
  * - title_suffix: Additional output populated by modules, intended to be
  *   displayed after the main title tag that appears in the template.
  * - messages: Status and error messages. Should be displayed prominently.
- * - tabs: Tabs linking to any sub-pages beneath the current page (e.g., the
- *   view and edit tabs when displaying a node).
- * - action_links: Actions local to the page, such as "Add menu" on the menu
- *   administration interface.
  * - node: Fully loaded node, if there is an automatically-loaded node
  *   associated with the page and the node ID is the second argument in the
  *   page's path (e.g. node/12345 and node/12345/revisions, but not
@@ -66,6 +61,9 @@
  * - page.footer_fourth: Items for the fourth footer column.
  * - page.footer_fifth: Items for the fifth footer column.
  * - page.breadcrumb: Items for the breadcrumb region.
+ * - page.title: Items for the page title region.
+ * - page.tabs: Items for the tabs region.
+ * - page.actions: Items for the actions region.
  *
  * @see template_preprocess_page()
  * @see bartik_preprocess_page()
@@ -128,20 +126,20 @@
           <section class="section">
             <a id="main-content" tabindex="-1"></a>
             {{ title_prefix }}
-            {% if title %}
+            {% if page.title %}
               <h1 class="title" id="page-title">
-                {{ title }}
+                {{ page.title }}
               </h1>
             {% endif %}
             {{ title_suffix }}
-            {% if tabs %}
+            {% if page.tabs %}
               <nav class="tabs" role="navigation" aria-label="{{ 'Tabs'|t }}">
-                {{ tabs }}
+                {{ page.tabs }}
               </nav>
             {% endif %}
             {{ page.help }}
-            {% if action_links %}
-              <ul class="action-links">{{ action_links }}</ul>
+            {% if page.actions %}
+              <ul class="action-links">{{ page.actions }}</ul>
             {% endif %}
             {{ page.content }}
           </section>
diff --git a/core/themes/classy/templates/system/page.html.twig b/core/themes/classy/templates/system/page.html.twig
index 627d7c7..eaaed2c 100644
--- a/core/themes/classy/templates/system/page.html.twig
+++ b/core/themes/classy/templates/system/page.html.twig
@@ -28,14 +28,9 @@
  * Page content (in order of occurrence in the default page.html.twig):
  * - title_prefix: Additional output populated by modules, intended to be
  *   displayed in front of the main title tag that appears in the template.
- * - title: The page title, for use in the actual content.
  * - title_suffix: Additional output populated by modules, intended to be
  *   displayed after the main title tag that appears in the template.
  * - messages: Status and error messages. Should be displayed prominently.
- * - tabs: Tabs linking to any sub-pages beneath the current page (e.g., the
- *   view and edit tabs when displaying a node).
- * - action_links: Actions local to the page, such as "Add menu" on the menu
- *   administration interface.
  * - node: Fully loaded node, if there is an automatically-loaded node
  *   associated with the page and the node ID is the second argument in the
  *   page's path (e.g. node/12345 and node/12345/revisions, but not
@@ -52,6 +47,9 @@
  * - page.sidebar_second: Items for the second sidebar.
  * - page.footer: Items for the footer region.
  * - page.breadcrumb: Items for the breadcrumb region.
+ * - page.title: Items for the page title region.
+ * - page.tabs: Items for the tabs region.
+ * - page.actions: Items for the actions region.
  *
  * @see template_preprocess_page()
  * @see html.html.twig
@@ -107,15 +105,15 @@
       {{ page.highlighted }}
 
       {{ title_prefix }}
-      {% if title %}
-        <h1>{{ title }}</h1>
+      {% if page.title %}
+        <h1>{{ page.title }}</h1>
       {% endif %}
       {{ title_suffix }}
 
-      {{ tabs }}
+      {{ page.tabs }}
 
-      {% if action_links %}
-        <nav class="action-links">{{ action_links }}</nav>
+      {% if page.actions %}
+        <nav class="action-links">{{ page.actions }}</nav>
       {% endif %}
 
       {{ page.content }}
diff --git a/core/themes/seven/seven.info.yml b/core/themes/seven/seven.info.yml
index 945ceac..a4cacf6 100644
--- a/core/themes/seven/seven.info.yml
+++ b/core/themes/seven/seven.info.yml
@@ -24,5 +24,8 @@ regions:
   page_bottom: 'Page bottom'
   sidebar_first: 'First sidebar'
   breadcrumb: Breadcrumb
+  title: Title
+  tabs: Tabs
+  actions: Actions
 regions_hidden:
   - sidebar_first
diff --git a/core/themes/seven/templates/page.html.twig b/core/themes/seven/templates/page.html.twig
index fc3c7d4..8964396 100644
--- a/core/themes/seven/templates/page.html.twig
+++ b/core/themes/seven/templates/page.html.twig
@@ -29,14 +29,9 @@
  * Page content (in order of occurrence in the default page.html.twig):
  * - title_prefix: Additional output populated by modules, intended to be
  *   displayed in front of the main title tag that appears in the template.
- * - title: The page title, for use in the actual content.
  * - title_suffix: Additional output populated by modules, intended to be
  *   displayed after the main title tag that appears in the template.
  * - messages: Status and error messages. Should be displayed prominently.
- * - tabs: Tabs linking to any sub-pages beneath the current page (e.g., the
- *   view and edit tabs when displaying a node).
- * - action_links: Actions local to the page, such as "Add menu" on the menu
- *   administration interface.
  * - node: Fully loaded node, if there is an automatically-loaded node
  *   associated with the page and the node ID is the second argument in the
  *   page's path (e.g. node/12345 and node/12345/revisions, but not
@@ -51,6 +46,9 @@
  * - page.sidebar_second: Items for the second sidebar.
  * - page.page_bottom: Items for the footer region.
  * - page.breadcrumb: Items for the breadcrumb region.
+ * - page.title: Items for the page title region.
+ * - page.tabs: Items for the tabs region.
+ * - page.actions: Items for the actions region.
  *
  * @see template_preprocess_page()
  * @see seven_preprocess_page()
@@ -60,10 +58,15 @@
   <header class="content-header clearfix">
     <div class="layout-container">
       {{ title_prefix }}
-      {% if title %}
-        <h1 class="page-title">{{ title }}</h1>
+      {% if page.title %}
+        <h1 class="page-title">{{ page.title }}</h1>
       {% endif %}
       {{ title_suffix }}
+      {% if page.tabs %}
+        <nav class="tabs" role="navigation" aria-label="{{ 'Tabs'|t }}">
+          {{ page.tabs }}
+        </nav>
+      {% endif %}
       {% if primary_local_tasks %}
         {{ primary_local_tasks }}
       {% endif %}
@@ -85,9 +88,9 @@
           {{ page.help }}
         </div>
       {% endif %}
-      {% if action_links %}
+      {% if page.actions %}
         <ul class="action-links">
-          {{ action_links }}
+          {{ page.actions }}
         </ul>
       {% endif %}
       {{ page.content }}
