diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index 1a5ed47..73e076c 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -544,7 +544,7 @@ function aggregator_filter_xss($value) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function aggregator_preprocess_block(&$variables) {
   if ($variables['block']->module == 'aggregator') {
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index 57f1572..32ca608 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -516,39 +516,39 @@ function block_rebuild() {
 }
 
 /**
- * Processes variables for block.tpl.php.
+ * Prepares variables for block templates.
  *
- * Prepares the values passed to the theme_block function to be passed
- * into a pluggable template engine. Uses block properties to generate a
- * series of template file suggestions. If none are found, the default
- * block.tpl.php is used.
+ * Default template: block.html.twig.
  *
- * Most themes utilize their own copy of block.tpl.php. The default is located
- * inside "modules/block/block.tpl.php". Look in there for the full list of
- * variables.
+ * Most themes use their own copy of block.html.twig. The default is located
+ * inside "core/modules/block/templates/block.html.twig". Look in there for the
+ * full list of available variables.
  *
- * The $variables array contains the following arguments:
- * - $block
- *
- * @see block.tpl.php
+ * @param array $variables
+ *   An associative array containing:
+ *   - elements: An associative array containing the properties of the element.
+ *     Properties used: #block, #block_config, #children.
  */
 function template_preprocess_block(&$variables) {
   $block_counter = &drupal_static(__FUNCTION__, array());
 
   $variables['block'] = (object) $variables['elements']['#block_config'];
+  if (!isset($variables['block']->label)) {
+    $variables['block']->label = $variables['elements']['#block']->label;
+  }
   // If the block title is configured to be hidden, set it to an empty string.
   if (empty($variables['elements']['#block']->label_display)) {
     $variables['block']->label_hidden = $variables['block']->label;
     $variables['block']->label = '';
   }
+  $variables['label'] = $variables['block']->label;
 
   // Create the $content variable that templates expect.
   $variables['content'] = $variables['elements']['#children'];
 
-  $variables['attributes']['class'][] = drupal_html_class('block-' . $variables['block']->module);
-
   // Add default class for block content.
   $variables['content_attributes']['class'][] = 'content';
+  $variables['attributes']['class'][] = drupal_html_class('block-' . $variables['block']->module);
 
   $variables['theme_hook_suggestions'][] = 'block__' . $variables['block']->module;
   // Hyphens (-) and underscores (_) play a special role in theme suggestions.
@@ -571,7 +571,7 @@ function template_preprocess_block(&$variables) {
   if ($id = $variables['elements']['#block']->id()) {
     $config_id = explode('.', $id);
     $machine_name = array_pop($config_id);
-    $variables['block_html_id'] = drupal_html_id('block-' . $machine_name);
+    $variables['attributes']['id'] = drupal_html_id('block-' . $machine_name);
     $variables['theme_hook_suggestions'][] = 'block__' . $machine_name;
   }
 }
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
index af060db..1b4fb07 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockStorageUnitTest.php
@@ -140,11 +140,13 @@ protected function renderTests() {
     // Test the rendering of a block.
     $output = entity_view($entity, 'block');
     $expected = array();
-    $expected[] = '  <div id="block-test-block"  class="block block-block-test">';
-    $expected[] = '';
+    $expected[] = '<div class="block block-block-test" id="block-test-block">';
+    $expected[] = '  ';
     $expected[] = '    ';
-    $expected[] = '  <div class="content">';
-    $expected[] = '      </div>';
+    $expected[] = '';
+    $expected[] = '  <div class="content ">';
+    $expected[] = '   ';
+    $expected[] = '  </div>';
     $expected[] = '</div>';
     $expected[] = '';
     $expected_output = implode("\n", $expected);
@@ -157,12 +159,14 @@ protected function renderTests() {
     $entity->set('label', 'Powered by Bananas');
     $output = entity_view($entity, 'block');
     $expected = array();
-    $expected[] = '  <div id="block-test-block"  class="block block-block-test">';
-    $expected[] = '';
-    $expected[] = '    <h2>Powered by Bananas</h2>';
+    $expected[] = '<div class="block block-block-test" id="block-test-block">';
     $expected[] = '  ';
-    $expected[] = '  <div class="content">';
-    $expected[] = '      </div>';
+    $expected[] = '      <h2 class="">Powered by Bananas</h2>';
+    $expected[] = '    ';
+    $expected[] = '';
+    $expected[] = '  <div class="content ">';
+    $expected[] = '   ';
+    $expected[] = '  </div>';
     $expected[] = '</div>';
     $expected[] = '';
     $expected_output = implode("\n", $expected);
diff --git a/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php b/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php
index 95f2cf1..be36f64 100644
--- a/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php
+++ b/core/modules/block/lib/Drupal/block/Tests/BlockTemplateSuggestionsUnitTest.php
@@ -51,11 +51,8 @@ function testBlockThemeHookSuggestions() {
       'module' => $block->get('module'),
     );
     $variables['elements']['#children'] = '';
-    // Test adding a class to the block content.
-    $variables['content_attributes']['class'][] = 'test-class';
     template_preprocess_block($variables);
     $this->assertEqual($variables['theme_hook_suggestions'], array('block__system', 'block__system_menu_block', 'block__system_menu_block__menu_admin', 'block__machinename'));
-    $this->assertEqual($variables['content_attributes']['class'], array('test-class', 'content'), 'Default .content class added to block content_attributes_array');
   }
 
 }
diff --git a/core/modules/block/templates/block.html.twig b/core/modules/block/templates/block.html.twig
new file mode 100644
index 0000000..5b78ae1
--- /dev/null
+++ b/core/modules/block/templates/block.html.twig
@@ -0,0 +1,41 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display a block.
+ *
+ * Available variables:
+ * - label: The block title.
+ * - block - The full block entity.
+ *   - block.label_hidden: The hidden block title value if the block was
+ *     configured to hide the title ('label' is empty in this case).
+ *   - block.module: The module that generated the block.
+ *   - block.delta: An ID for the block, unique within each module.
+ *   - block.region: The block region embedding the current block.
+ * - contents: The contents of this block.
+ * - attributes: Remaining HTML attributes for the containing element.
+ * - attributes.id: A valid HTML ID and guaranteed unique.
+ * - attributes.class: Classes that can be used to style contextually through
+ *   CSS. These can be manipulated through preprocess functions. The default
+ *   values can be one or more of the following:
+ *   - block-[module]: The module generating the block. For example, the user
+ *     module is responsible for handling the default user navigation block. In
+ *     that case the class would be 'block-user'.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_block()
+ *
+ * @ingroup themeable
+ */
+ @todo Remove the div around content as per http://drupal.org/node/1972122.
+#}
+<div{{ attributes }}>
+  {{ title_prefix }}
+  {% if label %}
+    <h2{{ title_attributes }}>{{ label }}</h2>
+  {% endif %}
+  {{ title_suffix }}
+
+  <div{{ content_attributes }}>
+   {{ content }}
+  </div>
+</div>
diff --git a/core/modules/block/templates/block.tpl.php b/core/modules/block/templates/block.tpl.php
deleted file mode 100644
index 4b301fa..0000000
--- a/core/modules/block/templates/block.tpl.php
+++ /dev/null
@@ -1,57 +0,0 @@
-<?php
-
-/**
- * @file
- * Default theme implementation to display a block.
- *
- * Available variables:
- * - $block->label: Block title.
- * - $block->label_hidden: The hidden block title value if the block was
- *    configured to hide the title ($block->label is empty in this case).
- * - $content: Block content.
- * - $block->module: Module that generated the block.
- * - $block->delta: An ID for the block, unique within each module.
- * - $block->region: The block region embedding the current block.
- * - $attributes: An instance of Attributes class that can be manipulated as an
- *    array and printed as a string.
- *    It includes the 'class' information, which includes:
- *   - block: The current template type, i.e., "theming hook".
- *   - block-[module]: The module generating the block. For example, the user
- *     module is responsible for handling the default user navigation block. In
- *     that case the class would be 'block-user'.
- * - $title_prefix (array): An array containing additional output populated by
- *   modules, intended to be displayed in front of the main title tag that
- *   appears in the template.
- * - $title_suffix (array): An array containing additional output populated by
- *   modules, intended to be displayed after the main title tag that appears in
- *   the template.
- *
- * Helper variables:
- * - $is_front: Flags true when presented in the front page.
- * - $logged_in: Flags true when the current user is a logged-in member.
- * - $is_admin: Flags true when the current user is an administrator.
- * - $block_html_id: A valid HTML ID and guaranteed unique.
- *
- * @see template_preprocess()
- * @see template_preprocess_block()
- * @see template_process()
- *
- * @ingroup themeable
- */
-?>
-<?php if (isset($block_html_id)): ?>
-  <div id="<?php print $block_html_id; ?>" <?php print $attributes; ?>>
-<?php else: ?>
-  <div <?php print $attributes; ?>>
-<?php endif; ?>
-
-  <?php print render($title_prefix); ?>
-<?php if ($block->label): ?>
-  <h2<?php print $title_attributes; ?>><?php print $block->label; ?></h2>
-<?php endif;?>
-  <?php print render($title_suffix); ?>
-
-  <div<?php print $content_attributes; ?>>
-    <?php print $content ?>
-  </div>
-</div>
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index a94b8f2..6a1cc9c 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -959,7 +959,7 @@ function _book_link_defaults($nid) {
 }
 
  /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function book_preprocess_block(&$variables) {
   if ($variables['block']-> module == 'book') {
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 6d0d003..9eebe8c 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -1527,7 +1527,7 @@ function comment_preview(Comment $comment) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function comment_preprocess_block(&$variables) {
   if ($variables['block']->module == 'comment') {
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index af1330e..7938b70 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -969,7 +969,7 @@ function forum_get_topics($tid, $sortby, $forum_per_page) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function forum_preprocess_block(&$variables) {
   if ($variables['block']->module == 'forum') {
diff --git a/core/modules/help/help.module b/core/modules/help/help.module
index be57134..df87a1b 100644
--- a/core/modules/help/help.module
+++ b/core/modules/help/help.module
@@ -66,7 +66,7 @@ function help_help($path, $arg) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function help_preprocess_block(&$variables) {
   if ($variables['block']->id == 'system_help_block') {
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index 2f2966c..0a46bd4 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -760,7 +760,7 @@ function language_language_delete($language) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function language_preprocess_block(&$variables) {
   if ($variables['block']->module == 'language') {
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
index 8088f6a..47a61e7 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageSwitchingTest.php
@@ -59,7 +59,7 @@ function testLanguageBlock() {
     $this->assertText($block->label(), 'Language switcher block found.');
 
     // Assert that only the current language is marked as active.
-    list($language_switcher) = $this->xpath('//div[@id=:id]/div[@class="content"]', array(':id' => 'block-test-language-block'));
+    list($language_switcher) = $this->xpath('//div[@id=:id]/div[contains(@class, "content")]', array(':id' => 'block-test-language-block'));
     $links = array(
       'active' => array(),
       'inactive' => array(),
diff --git a/core/modules/menu/menu.module b/core/modules/menu/menu.module
index b638917..0533cfa 100644
--- a/core/modules/menu/menu.module
+++ b/core/modules/menu/menu.module
@@ -714,7 +714,7 @@ function menu_get_menus($all = TRUE) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function menu_preprocess_block(&$variables) {
   if ($variables['block']->module == 'menu') {
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 7ba5d23..11cc6b2 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -1096,7 +1096,7 @@ function node_is_page(EntityInterface $node) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function node_preprocess_block(&$variables) {
   if ($variables['block']->module == 'node') {
diff --git a/core/modules/shortcut/shortcut.module b/core/modules/shortcut/shortcut.module
index c2c9b4a..2852f6e 100644
--- a/core/modules/shortcut/shortcut.module
+++ b/core/modules/shortcut/shortcut.module
@@ -451,7 +451,7 @@ function shortcut_renderable_links($shortcut_set = NULL) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function shortcut_preprocess_block(&$variables) {
   if ($variables['block']->module == 'shortcut') {
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index 66842a5..6499e73 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -234,7 +234,7 @@ function statistics_update_index() {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function statistics_preprocess_block(&$variables) {
   if ($variables['block']->module == 'statistics') {
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index 614cec7..e2e082f 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -2715,7 +2715,7 @@ function system_user_timezone(&$form, &$form_state) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function system_preprocess_block(&$variables) {
   switch ($variables['block']->id) {
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 5afcfd9..1dc69ae 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -664,7 +664,7 @@ function user_validate_current_pass(&$form, &$form_state) {
 }
 
 /**
- * Implements hook_preprocess_HOOK() for block.tpl.php.
+ * Implements hook_preprocess_HOOK() for block.html.twig.
  */
 function user_preprocess_block(&$variables) {
   if ($variables['block']->module == 'user') {
