 core/config/schema/core.data_types.schema.yml      | 13 ---
 core/lib/Drupal/Core/Block/BlockBase.php           | 73 +----------------
 .../src/Plugin/Block/AggregatorFeedBlock.php       |  7 --
 core/modules/block/src/Tests/BlockCacheTest.php    | 32 ++------
 .../modules/block/src/Tests/BlockInterfaceTest.php | 34 --------
 .../block/src/Tests/BlockStorageUnitTest.php       |  4 -
 core/modules/block/src/Tests/BlockTest.php         |  5 +-
 .../block/src/Tests/BlockViewBuilderTest.php       | 95 +---------------------
 .../block/src/Tests/Views/DisplayBlockTest.php     |  2 +-
 .../block_test/src/Plugin/Block/TestCacheBlock.php | 15 ++++
 .../src/Plugin/Block/BlockContentBlock.php         |  6 --
 .../src/Tests/BlockContentCacheTagsTest.php        |  2 +-
 .../config/install/block.block.foobargorilla.yml   |  3 -
 .../book/src/Plugin/Block/BookNavigationBlock.php  | 11 ++-
 .../forum/src/Plugin/Block/ForumBlockBase.php      | 11 ++-
 core/modules/help/src/Plugin/Block/HelpBlock.php   | 13 +--
 .../language/src/Plugin/Block/LanguageBlock.php    |  9 ++
 core/modules/menu_ui/src/Tests/MenuTest.php        |  6 --
 core/modules/node/node.module                      |  4 +-
 .../node/src/Plugin/Block/SyndicateBlock.php       | 14 ----
 .../search/src/Plugin/Block/SearchBlock.php        |  9 ++
 core/modules/simpletest/src/WebTestBase.php        |  4 -
 .../src/Plugin/Block/SystemBrandingBlock.php       |  6 --
 .../src/Plugin/Block/SystemBreadcrumbBlock.php     |  9 ++
 .../system/src/Plugin/Block/SystemMainBlock.php    | 14 ----
 .../system/src/Plugin/Block/SystemMenuBlock.php    | 12 +--
 .../src/Plugin/Block/SystemMessagesBlock.php       | 19 -----
 .../src/Plugin/Block/SystemPoweredByBlock.php      | 24 ------
 .../src/Plugin/Block/RedirectFormBlock.php         | 10 +++
 .../user/src/Plugin/Block/UserLoginBlock.php       |  9 ++
 .../src/Tests/Plugin/BlockDependenciesTest.php     |  4 -
 .../config/install/block.block.stark_admin.yml     |  3 -
 .../config/install/block.block.stark_tools.yml     |  3 -
 .../install/block.block.bartik_account_menu.yml    |  3 -
 .../config/install/block.block.bartik_footer.yml   |  3 -
 .../install/block.block.bartik_main_menu.yml       |  3 -
 .../config/install/block.block.bartik_tools.yml    |  3 -
 37 files changed, 101 insertions(+), 396 deletions(-)

diff --git a/core/config/schema/core.data_types.schema.yml b/core/config/schema/core.data_types.schema.yml
index a06e3ad..5c2691e 100644
--- a/core/config/schema/core.data_types.schema.yml
+++ b/core/config/schema/core.data_types.schema.yml
@@ -288,19 +288,6 @@ block_settings:
     label_display:
       type: string
       label: 'Display title'
-    cache:
-      type: mapping
-      label: 'Cache settings'
-      mapping:
-        max_age:
-          type: integer
-          label: 'Maximum age'
-        contexts:
-          type: sequence
-          label: 'Vary by context'
-          sequence:
-            type: string
-            label: 'Context'
     status:
       type: boolean
       label: 'Status'
diff --git a/core/lib/Drupal/Core/Block/BlockBase.php b/core/lib/Drupal/Core/Block/BlockBase.php
index 9872481..6938453 100644
--- a/core/lib/Drupal/Core/Block/BlockBase.php
+++ b/core/lib/Drupal/Core/Block/BlockBase.php
@@ -10,7 +10,6 @@
 use Drupal\block\BlockInterface;
 use Drupal\Component\Utility\String;
 use Drupal\Core\Access\AccessResult;
-use Drupal\Core\Cache\CacheContexts;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Plugin\ContextAwarePluginBase;
 use Drupal\Component\Utility\Unicode;
@@ -90,10 +89,6 @@ protected function baseConfigurationDefaults() {
       'label' => '',
       'provider' => $this->pluginDefinition['provider'],
       'label_display' => BlockInterface::BLOCK_LABEL_VISIBLE,
-      'cache' => array(
-        'max_age' => 0,
-        'contexts' => array(),
-      ),
     );
   }
 
@@ -187,53 +182,6 @@ public function buildConfigurationForm(array $form, FormStateInterface $form_sta
       '#default_value' => ($this->configuration['label_display'] === BlockInterface::BLOCK_LABEL_VISIBLE),
       '#return_value' => BlockInterface::BLOCK_LABEL_VISIBLE,
     );
-    // Identical options to the ones for page caching.
-    // @see \Drupal\system\Form\PerformanceForm::buildForm()
-    $period = array(0, 60, 180, 300, 600, 900, 1800, 2700, 3600, 10800, 21600, 32400, 43200, 86400);
-    $period = array_map(array(\Drupal::service('date.formatter'), 'formatInterval'), array_combine($period, $period));
-    $period[0] = '<' . $this->t('no caching') . '>';
-    $period[\Drupal\Core\Cache\Cache::PERMANENT] = $this->t('Forever');
-    $form['cache'] = array(
-      '#type' => 'details',
-      '#title' => $this->t('Cache settings'),
-    );
-    $form['cache']['max_age'] = array(
-      '#type' => 'select',
-      '#title' => $this->t('Maximum age'),
-      '#description' => $this->t('The maximum time this block may be cached.'),
-      '#default_value' => $this->configuration['cache']['max_age'],
-      '#options' => $period,
-    );
-    $contexts = \Drupal::service("cache_contexts")->getLabels();
-    // Blocks are always rendered in the "per language" and "per theme" cache
-    // contexts. No need to show those options to the end user.
-    unset($contexts['languages']);
-    unset($contexts['theme']);
-    $form['cache']['contexts'] = array(
-      '#type' => 'checkboxes',
-      '#title' => $this->t('Vary by context'),
-      '#description' => $this->t('The contexts this cached block must be varied by. <em>All</em> blocks are varied by language and theme.'),
-      '#default_value' => $this->configuration['cache']['contexts'],
-      '#options' => $contexts,
-      '#states' => array(
-        'disabled' => array(
-          ':input[name="settings[cache][max_age]"]' => array('value' => (string) 0),
-        ),
-      ),
-    );
-    if (count($this->getRequiredCacheContexts()) > 0) {
-      // Remove the required cache contexts from the list of contexts a user can
-      // choose to modify by: they must always be applied.
-      $context_labels = array();
-      $all_contexts = \Drupal::service("cache_contexts")->getLabels(TRUE);
-      foreach (CacheContexts::parseTokens($this->getRequiredCacheContexts()) as $context) {
-        $context_id = $context[0];
-        $context_labels[] = $all_contexts[$context_id];
-        unset($form['cache']['contexts']['#options'][$context_id]);
-      }
-      $required_context_list = implode(', ', $context_labels);
-      $form['cache']['contexts']['#description'] .= ' ' . $this->t('This block is <em>always</em> varied by the following contexts: %required-context-list.', array('%required-context-list' => $required_context_list));
-    }
 
     // Add plugin-specific settings for this block type.
     $form += $this->blockForm($form, $form_state);
@@ -259,10 +207,6 @@ public function validateConfigurationForm(array &$form, FormStateInterface $form
     // Remove the admin_label form item element value so it will not persist.
     $form_state->unsetValue('admin_label');
 
-    // Transform the #type = checkboxes value to a numerically indexed array.
-    $contexts = $form_state->getValue(array('cache', 'contexts'));
-    $form_state->setValue(array('cache', 'contexts'), array_values(array_filter($contexts)));
-
     $this->blockValidate($form, $form_state);
   }
 
@@ -285,7 +229,6 @@ public function submitConfigurationForm(array &$form, FormStateInterface $form_s
       $this->configuration['label'] = $form_state->getValue('label');
       $this->configuration['label_display'] = $form_state->getValue('label_display');
       $this->configuration['provider'] = $form_state->getValue('provider');
-      $this->configuration['cache'] = $form_state->getValue('cache');
       $this->blockSubmit($form, $form_state);
     }
   }
@@ -341,16 +284,6 @@ public function setTransliteration(TransliterationInterface $transliteration) {
   }
 
   /**
-   * Returns the cache contexts required for this block.
-   *
-   * @return array
-   *   The required cache contexts IDs.
-   */
-  protected function getRequiredCacheContexts() {
-    return array();
-  }
-
-  /**
    * {@inheritdoc}
    */
   public function getCacheKeys() {
@@ -361,9 +294,7 @@ public function getCacheKeys() {
    * {@inheritdoc}
    */
   public function getCacheContexts() {
-    // Return the required cache contexts, merged with the user-configured cache
-    // contexts, if any.
-    return array_merge($this->getRequiredCacheContexts(), $this->configuration['cache']['contexts']);
+    return [];
   }
 
   /**
@@ -377,7 +308,7 @@ public function getCacheTags() {
    * {@inheritdoc}
    */
   public function getCacheMaxAge() {
-    return (int)$this->configuration['cache']['max_age'];
+    return Cache::PERMANENT;
   }
 
   /**
diff --git a/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php b/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
index 539e349..d2092a3 100644
--- a/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
+++ b/core/modules/aggregator/src/Plugin/Block/AggregatorFeedBlock.php
@@ -96,13 +96,6 @@ public function defaultConfiguration() {
     return array(
       'block_count' => 10,
       'feed' => NULL,
-      // Modify the default max age for the 'Aggregator Feed' blocks:
-      // modifications made to feeds or feed items will automatically invalidate
-      // corresponding cache tags, therefore allowing us to cache these blocks
-      // forever.
-      'cache' => array(
-        'max_age' => \Drupal\Core\Cache\Cache::PERMANENT,
-      ),
     );
   }
 
diff --git a/core/modules/block/src/Tests/BlockCacheTest.php b/core/modules/block/src/Tests/BlockCacheTest.php
index 615751d..59c5445 100644
--- a/core/modules/block/src/Tests/BlockCacheTest.php
+++ b/core/modules/block/src/Tests/BlockCacheTest.php
@@ -75,10 +75,7 @@ protected function setUp() {
    * Test "user.roles" cache context.
    */
   function testCachePerRole() {
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-      'contexts' => array('user.roles'),
-    ));
+    \Drupal::state()->set('block_test.cache_contexts', ['user.roles']);
 
     // Enable our test block. Set some content for it to display.
     $current_content = $this->randomMachineName();
@@ -125,9 +122,7 @@ function testCachePerRole() {
    * Test a cacheable block without any cache context.
    */
   function testCacheGlobal() {
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-    ));
+    \Drupal::state()->set('block_test.cache_contexts', []);
 
     $current_content = $this->randomMachineName();
     \Drupal::state()->set('block_test.content', $current_content);
@@ -148,9 +143,7 @@ function testCacheGlobal() {
    * Test non-cacheable block.
    */
   function testNoCache() {
-    $this->setBlockCacheConfig(array(
-      'max_age' => 0,
-    ));
+    \Drupal::state()->set('block_test.cache_max_age', 0);
 
     $current_content = $this->randomMachineName();
     \Drupal::state()->set('block_test.content', $current_content);
@@ -170,10 +163,7 @@ function testNoCache() {
    * Test "user" cache context.
    */
   function testCachePerUser() {
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-      'contexts' => array('user'),
-    ));
+    \Drupal::state()->set('block_test.cache_contexts', ['user']);
 
     $current_content = $this->randomMachineName();
     \Drupal::state()->set('block_test.content', $current_content);
@@ -202,10 +192,7 @@ function testCachePerUser() {
    * Test "url" cache context.
    */
   function testCachePerPage() {
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-      'contexts' => array('url'),
-    ));
+    \Drupal::state()->set('block_test.cache_contexts', ['url']);
 
     $current_content = $this->randomMachineName();
     \Drupal::state()->set('block_test.content', $current_content);
@@ -225,13 +212,4 @@ function testCachePerPage() {
     $this->assertText($old_content, 'Block content cached for the test page.');
   }
 
-  /**
-   * Private helper method to set the test block's cache configuration.
-   */
-  private function setBlockCacheConfig($cache_config) {
-    $block = $this->block->getPlugin();
-    $block->setConfigurationValue('cache', $cache_config);
-    $this->block->save();
-  }
-
 }
diff --git a/core/modules/block/src/Tests/BlockInterfaceTest.php b/core/modules/block/src/Tests/BlockInterfaceTest.php
index 37b9b3c..ded34e1 100644
--- a/core/modules/block/src/Tests/BlockInterfaceTest.php
+++ b/core/modules/block/src/Tests/BlockInterfaceTest.php
@@ -44,10 +44,6 @@ public function testBlockInterface() {
       'label' => 'Custom Display Message',
       'provider' => 'block_test',
       'label_display' => BlockInterface::BLOCK_LABEL_VISIBLE,
-      'cache' => array(
-        'max_age' => 0,
-        'contexts' => array(),
-      ),
       'display_message' => 'no message set',
     );
     // Initial configuration of the block at construction time.
@@ -61,13 +57,6 @@ public function testBlockInterface() {
     $this->assertIdentical($display_block->getConfiguration(), $expected_configuration, 'The block configuration was updated correctly.');
     $definition = $display_block->getPluginDefinition();
 
-    $period = array(0, 60, 180, 300, 600, 900, 1800, 2700, 3600, 10800, 21600, 32400, 43200, 86400);
-    $period = array_map(array(\Drupal::service('date.formatter'), 'formatInterval'), array_combine($period, $period));
-    $period[0] = '<' . t('no caching') . '>';
-    $period[\Drupal\Core\Cache\Cache::PERMANENT] = t('Forever');
-    $contexts = \Drupal::service("cache_contexts")->getLabels();
-    unset($contexts['theme']);
-    unset($contexts['languages']);
     $expected_form = array(
       'provider' => array(
         '#type' => 'value',
@@ -91,29 +80,6 @@ public function testBlockInterface() {
         '#default_value' => TRUE,
         '#return_value' => 'visible',
       ),
-      'cache' => array(
-        '#type' => 'details',
-        '#title' => t('Cache settings'),
-        'max_age' => array(
-          '#type' => 'select',
-          '#title' => t('Maximum age'),
-          '#description' => t('The maximum time this block may be cached.'),
-          '#default_value' => 0,
-          '#options' => $period,
-        ),
-        'contexts' => array(
-          '#type' => 'checkboxes',
-          '#title' => t('Vary by context'),
-          '#description' => t('The contexts this cached block must be varied by. <em>All</em> blocks are varied by language and theme.'),
-          '#default_value' => array(),
-          '#options' => $contexts,
-          '#states' => array(
-            'disabled' => array(
-              ':input[name="settings[cache][max_age]"]' => array('value' => (string) 0),
-            ),
-          ),
-        ),
-      ),
       'display_message' => array(
         '#type' => 'textfield',
         '#title' => t('Display message'),
diff --git a/core/modules/block/src/Tests/BlockStorageUnitTest.php b/core/modules/block/src/Tests/BlockStorageUnitTest.php
index eb3f8eb..140f746 100644
--- a/core/modules/block/src/Tests/BlockStorageUnitTest.php
+++ b/core/modules/block/src/Tests/BlockStorageUnitTest.php
@@ -98,10 +98,6 @@ protected function createTests() {
         'label' => '',
         'provider' => 'block_test',
         'label_display' => BlockInterface::BLOCK_LABEL_VISIBLE,
-        'cache' => array(
-          'max_age' => 0,
-          'contexts' => array(),
-        ),
       ),
       'visibility' => array(),
     );
diff --git a/core/modules/block/src/Tests/BlockTest.php b/core/modules/block/src/Tests/BlockTest.php
index 7053696..94283c4 100644
--- a/core/modules/block/src/Tests/BlockTest.php
+++ b/core/modules/block/src/Tests/BlockTest.php
@@ -8,7 +8,6 @@
 namespace Drupal\block\Tests;
 
 use Drupal\Component\Utility\Html;
-use Drupal\Core\Cache\Cache;
 use Drupal\simpletest\WebTestBase;
 use Drupal\Component\Utility\String;
 use Drupal\block\Entity\Block;
@@ -320,7 +319,7 @@ public function testBlockCacheTags() {
     $config->save();
 
     // Place the "Powered by Drupal" block.
-    $block = $this->drupalPlaceBlock('system_powered_by_block', array('id' => 'powered', 'cache' => array('max_age' => 315360000)));
+    $block = $this->drupalPlaceBlock('system_powered_by_block', array('id' => 'powered'));
 
     // Prime the page cache.
     $this->drupalGet('<front>');
@@ -361,7 +360,7 @@ public function testBlockCacheTags() {
     $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'HIT');
 
     // Place the "Powered by Drupal" block another time; verify a cache miss.
-    $block_2 = $this->drupalPlaceBlock('system_powered_by_block', array('id' => 'powered-2', 'cache' => array('max_age' => 315360000)));
+    $block_2 = $this->drupalPlaceBlock('system_powered_by_block', array('id' => 'powered-2'));
     $this->drupalGet('<front>');
     $this->assertEqual($this->drupalGetHeader('X-Drupal-Cache'), 'MISS');
 
diff --git a/core/modules/block/src/Tests/BlockViewBuilderTest.php b/core/modules/block/src/Tests/BlockViewBuilderTest.php
index e0ee522..02fec0f 100644
--- a/core/modules/block/src/Tests/BlockViewBuilderTest.php
+++ b/core/modules/block/src/Tests/BlockViewBuilderTest.php
@@ -149,15 +149,6 @@ protected function verifyRenderCacheHandling() {
     $request_method = $request->server->get('REQUEST_METHOD');
     $request->setMethod('GET');
 
-    // Test that entities with caching disabled do not generate a cache entry.
-    $build = $this->getBlockRenderArray();
-    $this->assertTrue(isset($build['#cache']) && array_keys($build['#cache']) == array('tags', 'max-age'), 'The render array element of uncacheable blocks is not cached, but does have cache tags & max-age set.');
-
-    // Enable block caching.
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-    ));
-
     // Test that a cache entry is created.
     $build = $this->getBlockRenderArray();
     $cid = 'entity_view:block:test_block:en:core';
@@ -194,19 +185,10 @@ public function testBlockViewBuilderAlter() {
 
     // Enable the block view alter hook that adds a suffix, for basic testing.
     \Drupal::state()->set('block_test_view_alter_suffix', TRUE);
-
-    // Basic: non-empty block.
+    Cache::invalidateTags($this->block->getCacheTags());
     $build = $this->getBlockRenderArray();
     $this->assertTrue(isset($build['#suffix']) && $build['#suffix'] === '<br>Goodbye!', 'A block with content is altered.');
     $this->assertIdentical(drupal_render($build), 'Llamas &gt; unicorns!<br>Goodbye!');
-
-    // Basic: empty block.
-    \Drupal::state()->set('block_test.content', NULL);
-    $build = $this->getBlockRenderArray();
-    $this->assertTrue(isset($build['#suffix']) && $build['#suffix'] === '<br>Goodbye!', 'A block without content is altered.');
-    $this->assertIdentical(drupal_render($build), '<br>Goodbye!');
-
-    // Disable the block view alter hook that adds a suffix, for basic testing.
     \Drupal::state()->set('block_test_view_alter_suffix', FALSE);
 
     // Force a request via GET so we can get drupal_render() cache working.
@@ -214,13 +196,13 @@ public function testBlockViewBuilderAlter() {
     $request_method = $request->server->get('REQUEST_METHOD');
     $request->setMethod('GET');
 
+    \Drupal::state()->set('block_test.content', NULL);
+    Cache::invalidateTags($this->block->getCacheTags());
+
     $default_keys = array('entity_view', 'block', 'test_block');
     $default_tags = array('block_view', 'config:block.block.test_block');
 
     // Advanced: cached block, but an alter hook adds an additional cache key.
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-    ));
     $alter_add_key = $this->randomMachineName();
     \Drupal::state()->set('block_test_view_alter_cache_key', $alter_add_key);
     $cid = 'entity_view:block:test_block:' . $alter_add_key . ':en:core';
@@ -263,75 +245,6 @@ public function testBlockViewBuilderAlter() {
   }
 
   /**
-   * Tests block render cache handling with configurable cache contexts.
-   *
-   * This is only intended to test that an existing block can be configured with
-   * additional contexts, not to test that each context works correctly.
-   *
-   * @see \Drupal\block\Tests\BlockCacheTest
-   */
-  public function testBlockViewBuilderCacheContexts() {
-    $cache_contexts = \Drupal::service("cache_contexts");
-
-    // Force a request via GET so we can get drupal_render() cache working.
-    $request = \Drupal::request();
-    $request_method = $request->server->get('REQUEST_METHOD');
-    $request->setMethod('GET');
-
-    // First: no cache context.
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-    ));
-    $build = $this->getBlockRenderArray();
-    $cid = implode(':', $build['#cache']['keys']);
-    drupal_render($build);
-    $this->assertTrue($this->container->get('cache.render', $cid), 'The block render element has been cached.');
-
-    // Second: the "per URL" cache context.
-    $this->setBlockCacheConfig(array(
-      'max_age' => 600,
-      'contexts' => array('url'),
-    ));
-    $old_cid = $cid;
-    $build = $this->getBlockRenderArray();
-    $cid_parts = array_merge($build['#cache']['keys'], $cache_contexts->convertTokensToKeys($build['#cache']['contexts']));
-    $cid = implode(':', $cid_parts);
-    drupal_render($build);
-    $this->assertTrue($this->container->get('cache.render', $cid), 'The block render element has been cached.');
-    $this->assertNotEqual($cid, $old_cid, 'The cache ID has changed.');
-
-    // Third: the same block configuration, but a different URL.
-    $original_url_cache_context = $this->container->get('cache_context.url');
-    $request_stack = new RequestStack();
-    $request_stack->push(Request::create('/foo'));
-    $temp_context = new UrlCacheContext($request_stack);
-    $this->container->set('cache_context.url', $temp_context);
-    $old_cid = $cid;
-    $build = $this->getBlockRenderArray();
-    $cid_parts = array_merge($build['#cache']['keys'], $cache_contexts->convertTokensToKeys($build['#cache']['contexts']));
-    $cid = implode(':', $cid_parts);
-    drupal_render($build);
-    $this->assertTrue($this->container->get('cache.render', $cid), 'The block render element has been cached.');
-    $this->assertNotEqual($cid, $old_cid, 'The cache ID has changed.');
-    $this->container->set('cache_context.url', $original_url_cache_context);
-
-    // Restore the previous request method.
-    $request->setMethod($request_method);
-  }
-
-  /**
-   * Sets the test block's cache configuration.
-   *
-   * @param array $cache_config
-   *   The desired cache configuration.
-   */
-  protected function setBlockCacheConfig(array $cache_config) {
-    $block = $this->block->getPlugin();
-    $block->setConfigurationValue('cache', $cache_config);
-    $this->block->save();
-  }
-
-  /**
    * Get a fully built render array for a block.
    *
    * @return array
diff --git a/core/modules/block/src/Tests/Views/DisplayBlockTest.php b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
index 9e6c8c3..d424853 100644
--- a/core/modules/block/src/Tests/Views/DisplayBlockTest.php
+++ b/core/modules/block/src/Tests/Views/DisplayBlockTest.php
@@ -273,7 +273,7 @@ public function testBlockRendering() {
   public function testBlockContextualLinks() {
     $this->drupalLogin($this->drupalCreateUser(array('administer views', 'access contextual links', 'administer blocks')));
     $block = $this->drupalPlaceBlock('views_block:test_view_block-block_1');
-    $cached_block = $this->drupalPlaceBlock('views_block:test_view_block-block_1', array('cache' => array('max_age' => 3600)));
+    $cached_block = $this->drupalPlaceBlock('views_block:test_view_block-block_1');
     $this->drupalGet('test-page');
 
     $id = 'block:block=' . $block->id() . ':|entity.view.edit_form:view=test_view_block:location=block&name=test_view_block&display_id=block_1';
diff --git a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestCacheBlock.php b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestCacheBlock.php
index 815f3a4..1deafbc 100644
--- a/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestCacheBlock.php
+++ b/core/modules/block/tests/modules/block_test/src/Plugin/Block/TestCacheBlock.php
@@ -8,6 +8,7 @@
 namespace Drupal\block_test\Plugin\Block;
 
 use Drupal\Core\Block\BlockBase;
+use Drupal\Core\Cache\Cache;
 
 /**
  * Provides a block to test caching.
@@ -32,4 +33,18 @@ public function build() {
     return $build;
   }
 
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheContexts() {
+    return \Drupal::state()->get('block_test.cache_contexts', []);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheMaxAge() {
+    return \Drupal::state()->get('block_test.cache_max_age', Cache::PERMANENT);
+  }
+
 }
diff --git a/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php b/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php
index e59eefd..1525723 100644
--- a/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php
+++ b/core/modules/block_content/src/Plugin/Block/BlockContentBlock.php
@@ -98,12 +98,6 @@ public function defaultConfiguration() {
       'status' => TRUE,
       'info' => '',
       'view_mode' => 'full',
-      // Modify the default max age for custom block blocks: modifications made
-      // to them will automatically invalidate corresponding cache tags, thus
-      // allowing us to cache custom block blocks forever.
-      'cache' => array(
-        'max_age' => \Drupal\Core\Cache\Cache::PERMANENT,
-      ),
     );
   }
 
diff --git a/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php b/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php
index d5a98f6..5629039 100644
--- a/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php
+++ b/core/modules/block_content/src/Tests/BlockContentCacheTagsTest.php
@@ -64,7 +64,7 @@ protected function getAdditionalCacheTagsForEntity(EntityInterface $entity) {
    * Tests that the block is cached with the correct contexts and tags.
    */
   public function testBlock() {
-    $block = $this->drupalPlaceBlock('block_content:' . $this->entity->uuid(), ['cache' => []]);
+    $block = $this->drupalPlaceBlock('block_content:' . $this->entity->uuid());
     $build = $this->container->get('entity.manager')->getViewBuilder('block')->view($block, 'block');
 
     // Render the block.
diff --git a/core/modules/block_content/tests/modules/block_content_test/config/install/block.block.foobargorilla.yml b/core/modules/block_content/tests/modules/block_content_test/config/install/block.block.foobargorilla.yml
index 4cc2360..42858f7 100644
--- a/core/modules/block_content/tests/modules/block_content_test/config/install/block.block.foobargorilla.yml
+++ b/core/modules/block_content/tests/modules/block_content_test/config/install/block.block.foobargorilla.yml
@@ -16,9 +16,6 @@ settings:
   label: 'Foobar Gorilla'
   provider: block_content
   label_display: visible
-  cache:
-    max_age: -1
-    contexts: {  }
   status: true
   info: ''
   view_mode: default
diff --git a/core/modules/book/src/Plugin/Block/BookNavigationBlock.php b/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
index 7b52799..30153be 100644
--- a/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
+++ b/core/modules/book/src/Plugin/Block/BookNavigationBlock.php
@@ -181,7 +181,7 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  protected function getRequiredCacheContexts() {
+  public function getCacheContexts() {
     // The "Book navigation" block must be cached per role and book navigation
     // context.
     return [
@@ -190,4 +190,13 @@ protected function getRequiredCacheContexts() {
     ];
   }
 
+  /**
+   * {@inheritdoc}
+   *
+   * @todo Make cacheable as part of https://drupal.org/node/1805054
+   */
+  public function getCacheMaxAge() {
+    return 0;
+  }
+
 }
diff --git a/core/modules/forum/src/Plugin/Block/ForumBlockBase.php b/core/modules/forum/src/Plugin/Block/ForumBlockBase.php
index e5937ce..ec5431a 100644
--- a/core/modules/forum/src/Plugin/Block/ForumBlockBase.php
+++ b/core/modules/forum/src/Plugin/Block/ForumBlockBase.php
@@ -87,7 +87,16 @@ public function blockSubmit($form, FormStateInterface $form_state) {
    * {@inheritdoc}
    */
   public function getCacheKeys() {
-    return array_merge(parent::getCacheKeys(), Cache::keyFromQuery($this->buildForumQuery()));
+    $keys = parent::getCacheKeys();
+    $keys[] = Cache::keyFromQuery($this->buildForumQuery());
+    return $keys;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCacheTags() {
+    return ['node_list'];
   }
 
 }
diff --git a/core/modules/help/src/Plugin/Block/HelpBlock.php b/core/modules/help/src/Plugin/Block/HelpBlock.php
index 7038c9d..968fca6 100644
--- a/core/modules/help/src/Plugin/Block/HelpBlock.php
+++ b/core/modules/help/src/Plugin/Block/HelpBlock.php
@@ -127,18 +127,7 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function defaultConfiguration() {
-    // Modify the default max age for the Help block: help text is
-    // static for a given URL, except when a module is updated, in which case
-    // update.php must be run, which clears all caches. Thus it's safe to cache
-    // the output for this block forever on a per-URL basis.
-    return array('cache' => array('max_age' => \Drupal\Core\Cache\Cache::PERMANENT));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  protected function getRequiredCacheContexts() {
+  public function getCacheContexts() {
     // The "Help" block must be cached per URL: help is defined for a
     // given path, and does not come with any access restrictions.
     return array('url');
diff --git a/core/modules/language/src/Plugin/Block/LanguageBlock.php b/core/modules/language/src/Plugin/Block/LanguageBlock.php
index e86f263..7aa9bb8 100644
--- a/core/modules/language/src/Plugin/Block/LanguageBlock.php
+++ b/core/modules/language/src/Plugin/Block/LanguageBlock.php
@@ -107,4 +107,13 @@ public function build() {
     return $build;
   }
 
+  /**
+   * {@inheritdoc}
+   *
+   * @todo Make cacheable in https://drupal.org/node/2232375.
+   */
+  public function getCacheMaxAge() {
+    return 0;
+  }
+
 }
diff --git a/core/modules/menu_ui/src/Tests/MenuTest.php b/core/modules/menu_ui/src/Tests/MenuTest.php
index 5cb6563..9834792 100644
--- a/core/modules/menu_ui/src/Tests/MenuTest.php
+++ b/core/modules/menu_ui/src/Tests/MenuTest.php
@@ -578,12 +578,6 @@ public function testBlockContextualLinks() {
     $this->assertResponse(200);
     $json = Json::decode($response);
     $this->assertIdentical($json[$id], '<ul class="contextual-links"><li class="block-configure"><a href="' . base_path() . 'admin/structure/block/manage/' . $block->id() . '">Configure block</a></li><li class="entitymenuedit-form"><a href="' . base_path() . 'admin/structure/menu/manage/' . $custom_menu->id() . '">Edit menu</a></li></ul>');
-
-    // Test the contextual links are available when block caching is enabled.
-    $this->drupalPostForm('admin/structure/block/manage/' . $block->id(), ['settings[cache][max_age]' => Cache::PERMANENT], t('Save block'));
-    $this->drupalGet('test-page');
-    $id = 'block:block=' . $block->id() . ':|menu:menu=' . $custom_menu->id() . ':';
-    $this->assertRaw('<div data-contextual-id="'. $id . '"></div>', format_string('Contextual link placeholder with id @id exists.', array('@id' => $id)));
   }
 
   /**
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index f181df1..a44d002 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -188,15 +188,17 @@ function node_entity_view_display_alter(EntityViewDisplayInterface $display, $co
 function node_title_list(StatementInterface $result, $title = NULL) {
   $items = array();
   $num_rows = FALSE;
+  $nids = [];
   foreach ($result as $row) {
     // Do not use $node->label() or $node->urlInfo() here, because we only have
     // database rows, not actual nodes.
+    $nids[] = $row->nid;
     $options = !empty($row->comment_count) ? array('attributes' => array('title' => \Drupal::translation()->formatPlural($row->comment_count, '1 comment', '@count comments'))) : array();
     $items[] = \Drupal::l($row->title, new Url('entity.node.canonical', ['node' => $row->nid], $options));
     $num_rows = TRUE;
   }
 
-  return $num_rows ? array('#theme' => 'item_list__node', '#items' => $items, '#title' => $title) : FALSE;
+  return $num_rows ? array('#theme' => 'item_list__node', '#items' => $items, '#title' => $title, '#cache' => ['tags' => \Drupal\Core\Cache\Cache::buildTags('node', $nids)]) : FALSE;
 }
 
 /**
diff --git a/core/modules/node/src/Plugin/Block/SyndicateBlock.php b/core/modules/node/src/Plugin/Block/SyndicateBlock.php
index 436a570..9863363 100644
--- a/core/modules/node/src/Plugin/Block/SyndicateBlock.php
+++ b/core/modules/node/src/Plugin/Block/SyndicateBlock.php
@@ -51,20 +51,6 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    // @see ::isCacheable()
-    $form['cache']['#disabled'] = TRUE;
-    $form['cache']['#description'] = $this->t('This block is never cacheable, it is not configurable.');
-    $form['cache']['max_age']['#value'] = 0;
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function isCacheable() {
     // The 'Syndicate' block is never cacheable, because it is cheaper to just
     // render it rather than to cache it and incur I/O.
diff --git a/core/modules/search/src/Plugin/Block/SearchBlock.php b/core/modules/search/src/Plugin/Block/SearchBlock.php
index 369aad6..48a2b54 100644
--- a/core/modules/search/src/Plugin/Block/SearchBlock.php
+++ b/core/modules/search/src/Plugin/Block/SearchBlock.php
@@ -37,4 +37,13 @@ public function build() {
     return \Drupal::formBuilder()->getForm('Drupal\search\Form\SearchBlockForm');
   }
 
+  /**
+   * {@inheritdoc}
+   *
+   * @todo Make cacheable once https://www.drupal.org/node/2351015 lands.
+   */
+  public function getCacheMaxAge() {
+    return 0;
+  }
+
 }
diff --git a/core/modules/simpletest/src/WebTestBase.php b/core/modules/simpletest/src/WebTestBase.php
index 7088456..21d5d98 100644
--- a/core/modules/simpletest/src/WebTestBase.php
+++ b/core/modules/simpletest/src/WebTestBase.php
@@ -375,7 +375,6 @@ protected function drupalBuildEntityView(EntityInterface $entity, $view_mode = '
    *   - region: 'sidebar_first'.
    *   - theme: The default theme.
    *   - visibility: Empty array.
-   *   - cache: array('max_age' => 0).
    *
    * @return \Drupal\block\Entity\Block
    *   The block entity.
@@ -392,9 +391,6 @@ protected function drupalPlaceBlock($plugin_id, array $settings = array()) {
       'label' => $this->randomMachineName(8),
       'visibility' => array(),
       'weight' => 0,
-      'cache' => array(
-        'max_age' => 0,
-      ),
     );
     $values = [];
     foreach (array('region', 'id', 'theme', 'plugin', 'weight', 'visibility') as $key) {
diff --git a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
index 44650dd..c5ebaa5 100644
--- a/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemBrandingBlock.php
@@ -71,12 +71,6 @@ public function defaultConfiguration() {
       'use_site_name' => TRUE,
       'use_site_slogan' => TRUE,
       'label_display' => FALSE,
-      // Modify the default max age for the 'Site branding' block: the site
-      // logo, name and slogan are static for a given language, except when the
-      // theme settings are updated (global theme settings or theme-specific
-      // settings). Cache tags for those cases ensure that a cached version of
-      // this block is invalidated automatically.
-      'cache' => array('max_age' => \Drupal\Core\Cache\Cache::PERMANENT),
     );
   }
 
diff --git a/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php b/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php
index e822a72..b0cfe9a 100644
--- a/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemBreadcrumbBlock.php
@@ -84,4 +84,13 @@ public function build() {
     }
   }
 
+  /**
+   * {@inheritdoc}
+   *
+   * @todo Make cacheable as part of https://drupal.org/node/1805054
+   */
+  public function getCacheMaxAge() {
+    return 0;
+  }
+
 }
diff --git a/core/modules/system/src/Plugin/Block/SystemMainBlock.php b/core/modules/system/src/Plugin/Block/SystemMainBlock.php
index 0e744db..13b7121 100644
--- a/core/modules/system/src/Plugin/Block/SystemMainBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemMainBlock.php
@@ -45,20 +45,6 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    // The main content block is never cacheable, because it may be dynamic.
-    $form['cache']['#disabled'] = TRUE;
-    $form['cache']['#description'] = $this->t('This block is never cacheable, it is not configurable.');
-    $form['cache']['max_age']['#value'] = 0;
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function isCacheable() {
     // The main content block is never cacheable, because it may be dynamic.
     return FALSE;
diff --git a/core/modules/system/src/Plugin/Block/SystemMenuBlock.php b/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
index 19eb580..4a6a2ea 100644
--- a/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemMenuBlock.php
@@ -8,7 +8,6 @@
 namespace Drupal\system\Plugin\Block;
 
 use Drupal\Core\Block\BlockBase;
-use Drupal\Core\Cache\Cache;
 use Drupal\Core\Form\FormStateInterface;
 use Drupal\Core\Menu\MenuActiveTrailInterface;
 use Drupal\Core\Menu\MenuLinkTreeInterface;
@@ -165,16 +164,7 @@ public function build() {
    * {@inheritdoc}
    */
   public function defaultConfiguration() {
-    // Modify the default max age for menu blocks: modifications made to menus,
-    // menu links and menu blocks will automatically invalidate corresponding
-    // cache tags, therefore allowing us to cache menu blocks forever. This is
-    // only not the case if there are user-specific or dynamic alterations (e.g.
-    // hook_node_access()), but in that:
-    // 1) it is possible to set a different max age for individual blocks, since
-    //    this is just the default value.
-    // 2) modules can modify caching by implementing hook_block_view_alter()
     return [
-      'cache' => array('max_age' => Cache::PERMANENT),
       'level' => 1,
       'depth' => 0,
     ];
@@ -196,7 +186,7 @@ public function getCacheTags() {
   /**
    * {@inheritdoc}
    */
-  protected function getRequiredCacheContexts() {
+  public function getCacheContexts() {
     // Menu blocks must be cached per role and per active trail.
     $menu_name = $this->getDerivativeId();
     return [
diff --git a/core/modules/system/src/Plugin/Block/SystemMessagesBlock.php b/core/modules/system/src/Plugin/Block/SystemMessagesBlock.php
index b724780..6de3858 100644
--- a/core/modules/system/src/Plugin/Block/SystemMessagesBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemMessagesBlock.php
@@ -9,8 +9,6 @@
 
 use Drupal\Core\Block\BlockBase;
 use Drupal\Core\Block\MessagesBlockPluginInterface;
-use Drupal\Core\Cache\Cache;
-use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Provides a block to display the messages.
@@ -43,23 +41,6 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    // @see ::isCacheable()
-    $form['cache']['#description'] = $this->t('This block is cacheable forever, it is not configurable.');
-    $form['cache']['max_age']['#value'] = Cache::PERMANENT;
-    $form['cache']['max_age']['#disabled'] = TRUE;
-    // Don't allow cache contexts to be configured, this block is globally
-    // cacheable.
-    $form['cache']['contexts']['#access'] = FALSE;
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function isCacheable() {
     // The messages are session-specific and hence aren't cacheable, but the
     // block itself *is* cacheable because it uses a #post_render_cache callback
diff --git a/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php b/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php
index 25e244d..3f2d18d 100644
--- a/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php
+++ b/core/modules/system/src/Plugin/Block/SystemPoweredByBlock.php
@@ -8,8 +8,6 @@
 namespace Drupal\system\Plugin\Block;
 
 use Drupal\Core\Block\BlockBase;
-use Drupal\Core\Cache\Cache;
-use Drupal\Core\Form\FormStateInterface;
 
 /**
  * Provides a 'Powered by Drupal' block.
@@ -31,28 +29,6 @@ public function build() {
   /**
    * {@inheritdoc}
    */
-  public function buildConfigurationForm(array $form, FormStateInterface $form_state) {
-    $form = parent::buildConfigurationForm($form, $form_state);
-
-    // The 'Powered by Drupal' block is permanently cacheable, because its
-    // contents can never change.
-    $form['cache']['#disabled'] = TRUE;
-    $form['cache']['max_age']['#value'] = Cache::PERMANENT;
-    $form['cache']['#description'] = $this->t('This block is always cached forever, it is not configurable.');
-
-    return $form;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCacheMaxAge() {
-    return Cache::PERMANENT;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
   public function isCacheable() {
     return TRUE;
   }
diff --git a/core/modules/system/tests/modules/form_test/src/Plugin/Block/RedirectFormBlock.php b/core/modules/system/tests/modules/form_test/src/Plugin/Block/RedirectFormBlock.php
index 4a04599..f02b523 100644
--- a/core/modules/system/tests/modules/form_test/src/Plugin/Block/RedirectFormBlock.php
+++ b/core/modules/system/tests/modules/form_test/src/Plugin/Block/RedirectFormBlock.php
@@ -76,4 +76,14 @@ protected function blockAccess(AccountInterface $account) {
   public function build() {
     return $this->formBuilder->getForm('Drupal\form_test\Form\RedirectBlockForm');
   }
+
+  /**
+   * {@inheritdoc}
+   *
+   * @todo Make cacheable once https://www.drupal.org/node/2351015 lands.
+   */
+  public function getCacheMaxAge() {
+    return 0;
+  }
+
 }
diff --git a/core/modules/user/src/Plugin/Block/UserLoginBlock.php b/core/modules/user/src/Plugin/Block/UserLoginBlock.php
index 8fc92f0..64c4990 100644
--- a/core/modules/user/src/Plugin/Block/UserLoginBlock.php
+++ b/core/modules/user/src/Plugin/Block/UserLoginBlock.php
@@ -113,4 +113,13 @@ public function build() {
     );
   }
 
+  /**
+   * {@inheritdoc}
+   *
+   * @todo Make cacheable once https://www.drupal.org/node/2351015 lands.
+   */
+  public function getCacheMaxAge() {
+    return 0;
+  }
+
 }
diff --git a/core/modules/views/src/Tests/Plugin/BlockDependenciesTest.php b/core/modules/views/src/Tests/Plugin/BlockDependenciesTest.php
index b1f34e6..403ea90 100644
--- a/core/modules/views/src/Tests/Plugin/BlockDependenciesTest.php
+++ b/core/modules/views/src/Tests/Plugin/BlockDependenciesTest.php
@@ -82,7 +82,6 @@ public function testViewsBlock() {
    *   - region: 'sidebar_first'.
    *   - theme: The default theme.
    *   - visibility: Empty array.
-   *   - cache: array('max_age' => 0).
    *
    * @return \Drupal\block\Entity\Block
    *   The block entity.
@@ -96,9 +95,6 @@ protected function createBlock($plugin_id, array $settings = array()) {
       'label' => $this->randomMachineName(8),
       'visibility' => array(),
       'weight' => 0,
-      'cache' => array(
-        'max_age' => 0,
-      ),
     );
     $values = [];
     foreach (array('region', 'id', 'theme', 'plugin', 'weight', 'visibility') as $key) {
diff --git a/core/profiles/minimal/config/install/block.block.stark_admin.yml b/core/profiles/minimal/config/install/block.block.stark_admin.yml
index ffbc2fb..68ac791 100644
--- a/core/profiles/minimal/config/install/block.block.stark_admin.yml
+++ b/core/profiles/minimal/config/install/block.block.stark_admin.yml
@@ -9,9 +9,6 @@ settings:
   label: Administration
   provider: system
   label_display: visible
-  cache:
-    max_age: -1
-    contexts: {  }
   level: 1
   depth: 0
 dependencies:
diff --git a/core/profiles/minimal/config/install/block.block.stark_tools.yml b/core/profiles/minimal/config/install/block.block.stark_tools.yml
index aa82311..e833fe0 100644
--- a/core/profiles/minimal/config/install/block.block.stark_tools.yml
+++ b/core/profiles/minimal/config/install/block.block.stark_tools.yml
@@ -9,9 +9,6 @@ settings:
   label: Tools
   provider: system
   label_display: visible
-  cache:
-    max_age: -1
-    contexts: {  }
   level: 1
   depth: 0
 dependencies:
diff --git a/core/profiles/standard/config/install/block.block.bartik_account_menu.yml b/core/profiles/standard/config/install/block.block.bartik_account_menu.yml
index db8f8ec..ef0f44c 100644
--- a/core/profiles/standard/config/install/block.block.bartik_account_menu.yml
+++ b/core/profiles/standard/config/install/block.block.bartik_account_menu.yml
@@ -10,9 +10,6 @@ settings:
   label: 'User account menu'
   provider: system
   label_display: '0'
-  cache:
-    max_age: -1
-    contexts: {  }
   level: 1
   depth: 1
 dependencies:
diff --git a/core/profiles/standard/config/install/block.block.bartik_footer.yml b/core/profiles/standard/config/install/block.block.bartik_footer.yml
index af960ec..f3a4dcf 100644
--- a/core/profiles/standard/config/install/block.block.bartik_footer.yml
+++ b/core/profiles/standard/config/install/block.block.bartik_footer.yml
@@ -10,9 +10,6 @@ settings:
   label: 'Footer menu'
   provider: system
   label_display: '0'
-  cache:
-    max_age: -1
-    contexts: {  }
   level: 1
   depth: 0
 dependencies:
diff --git a/core/profiles/standard/config/install/block.block.bartik_main_menu.yml b/core/profiles/standard/config/install/block.block.bartik_main_menu.yml
index 3da0571..32a3d1d 100644
--- a/core/profiles/standard/config/install/block.block.bartik_main_menu.yml
+++ b/core/profiles/standard/config/install/block.block.bartik_main_menu.yml
@@ -10,9 +10,6 @@ settings:
   label: 'Main navigation'
   provider: system
   label_display: '0'
-  cache:
-    max_age: -1
-    contexts: {  }
   level: 1
   depth: 1
 dependencies:
diff --git a/core/profiles/standard/config/install/block.block.bartik_tools.yml b/core/profiles/standard/config/install/block.block.bartik_tools.yml
index aa24e61..af3672d 100644
--- a/core/profiles/standard/config/install/block.block.bartik_tools.yml
+++ b/core/profiles/standard/config/install/block.block.bartik_tools.yml
@@ -10,9 +10,6 @@ settings:
   label: Tools
   provider: system
   label_display: visible
-  cache:
-    max_age: -1
-    contexts: {  }
   level: 1
   depth: 0
 dependencies:
