diff --git a/core/modules/block/lib/Drupal/block/Entity/Block.php b/core/modules/block/lib/Drupal/block/Entity/Block.php
index 44fa169..a8ea16e 100644
--- a/core/modules/block/lib/Drupal/block/Entity/Block.php
+++ b/core/modules/block/lib/Drupal/block/Entity/Block.php
@@ -121,7 +121,11 @@ public function getPlugin() {
    */
   public function label($langcode = NULL) {
     $settings = $this->get('settings');
-    return $settings['label'];
+    $definition = $this->getPlugin()->getPluginDefinition();
+    $definition += array(
+      'admin_label' => '',
+    );
+    return $settings['label'] ?: $definition['admin_label'];
   }
 
   /**
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php
index 3f3fe30..9628826 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlock.php
@@ -46,7 +46,7 @@ public function build() {
    * {@inheritdoc}
    */
   public function defaultConfiguration() {
-    $settings = array();
+    $settings = parent::defaultConfiguration();
 
     if ($this->displaySet) {
       return $this->view->display_handler->blockSettings($settings);
diff --git a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php
index e20f146..a04fd08 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/Block/ViewsBlockBase.php
@@ -87,6 +87,16 @@ public function access(AccountInterface $account) {
   /**
    * {@inheritdoc}
    */
+  public function defaultConfiguration() {
+    $settings = array();
+    $settings['views_label'] = '';
+
+    return $settings;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function buildConfigurationForm(array $form, array &$form_state) {
     $form = parent::buildConfigurationForm($form, $form_state);
 
@@ -94,10 +104,59 @@ public function buildConfigurationForm(array $form, array &$form_state) {
     $form['label']['#default_value'] = '';
     $form['label']['#access'] = FALSE;
 
+    // Allow to override the label on the actual page.
+    $form['views_label_checkbox'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Override title'),
+      '#default_value' => !empty($this->configuration['views_label']),
+    );
+
+    $form['views_label_fieldset'] = array(
+      '#type' => 'fieldset',
+      '#states' => array(
+        'visible' => array(array(
+          ':input[name="settings[views_label_checkbox]"]' => array('checked' => TRUE),
+        ),
+      )),
+    );
+
+    $form['views_label_fieldset']['views_label_warning'] = array(
+      '#markup' => $this->t('<div class="warning">In most cases you better change the title directly on the view. Overriding the title here will remove dynamic title support from arguments for example.</div>'),
+      '#type' => 'item',
+      '#states' => array(
+        'visible' => array(array(
+          ':input[name="settings[views_label_checkbox]"]' => array('checked' => TRUE),
+        ),
+      )),
+    );
+
+    $form['views_label_fieldset']['views_label'] = array(
+      '#title' => $this->t('Title'),
+      '#type' => 'textfield',
+      '#default_value' => $this->configuration['views_label'] ?: $this->view->getTitle(),
+      '#states' => array(
+        'visible' => array(array(
+          ':input[name="settings[views_label_checkbox]"]' => array('checked' => TRUE),
+        ),
+        )),
+    );
+
     return $form;
   }
 
   /**
+   * {@inheritdoc}{
+   */
+  public function blockSubmit($form, &$form_state) {
+    if (!empty($form_state['values']['views_label_checkbox'])) {
+      $this->setConfigurationValue('views_label', $form_state['values']['label']);
+    }
+    else {
+      $this->setConfigurationValue('views_label', '');
+    }
+  }
+
+  /**
    * Converts Views block content to a renderable array with contextual links.
    *
    * @param string|array $output
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 8445804..f71c966 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -1355,3 +1355,23 @@ function views_element_validate_tags($element, &$form_state) {
     }
   }
 }
+
+
+/**
+ * Implements hook_form_FORM_ID_alter for block_form().
+ *
+ * Views overrides block configuration form elements during
+ * \Drupal\views\Plugin\Block\ViewsBlock::form() but machine_name assignment is
+ * added later by \Drupal\block\BlockFormController::form() so we provide an
+ * override for the block machine_name here.
+ */
+function views_form_block_form_alter(&$form, &$form_state) {
+  // Ensure the block-form being altered is a Views block configuration form.
+  if ($form['settings']['module']['#value'] == 'views') {
+    // Unset the machine_name provided by BlockFormController.
+    unset($form['id']['#machine_name']['source']);
+    // Load the Views plugin object using form_state array and create a
+    // Prevent users from changing the auto-generated block machine_name.
+    $form['id']['#access'] = FALSE;
+  }
+}
