diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php
index a291143..a626c3b 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/PluginBase.php
@@ -105,8 +105,8 @@ public static function create(ContainerInterface $container, array $configuratio
    *   The options configured for this plugin.
    */
   public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
-    $this->setOptionDefaults($this->options, $this->defineOptions());
     $this->view = $view;
+    $this->setOptionDefaults($this->options, $this->defineOptions());
     $this->displayHandler = $display;
 
     $this->unpackOptions($this->options, $options);
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
index f5d7002..9d7e977 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/field/FieldPluginBase.php
@@ -410,7 +410,15 @@ public function useStringGroupBy() {
   protected function defineOptions() {
     $options = parent::defineOptions();
 
-    $options['label'] = array('default' => $this->definition['title'], 'translatable' => TRUE);
+    $options['label'] = array('default' => '', 'translatable' => TRUE);
+    // Some styles (for example table) should have field labels enabled by
+    // default.
+    if (!isset($this->view->style_plugin)) {
+      $this->view->initStyle();
+    }
+    if ($this->view->style_plugin->defaultFieldLabels()) {
+     $options['label']['default'] = $this->definition['title'];
+    }
     $options['exclude'] = array('default' => FALSE, 'bool' => TRUE);
     $options['alter'] = array(
       'contains' => array(
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
index 68cdc5a..f0da4d4 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
@@ -93,6 +93,13 @@
    * @see StylePluginBase::renderGroupingSets()
    */
   protected $groupingTheme = 'views_view_grouping';
+   
+  /**
+   * Should field labels be enabled by default.
+   *
+   * @var bool
+   */
+  protected $defaultFieldLabels = FALSE;
 
   /**
    * Overrides \Drupal\views\Plugin\views\PluginBase::init().
@@ -180,6 +187,15 @@ public function usesTokens() {
   }
 
   /**
+   * Return TRUE if this style enables field labels by default.
+   *
+   * @return bool
+   */
+  public function defaultFieldLabels() {
+    return $this->defaultFieldLabels;
+  }
+
+  /**
    * Return the token replaced row class for the specified row.
    */
   public function getRowClass($row_index) {
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php b/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php
index de5eef1..c2ecaaf 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/style/Table.php
@@ -51,6 +51,13 @@ class Table extends StylePluginBase {
   protected $usesRowClass = TRUE;
 
   /**
+   * Should field labels be enabled by default.
+   *
+   * @var bool
+   */
+  protected $defaultFieldLabels = TRUE;
+
+  /**
    * Contains the current active sort column.
    * @var string
    */
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php
index 6d73636..3d23801 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/FieldWebTest.php
@@ -330,6 +330,8 @@ public function testFieldClasses() {
     $id_field = $view->field['id'];
 
     $id_field->options['element_default_classes'] = FALSE;
+    // Setup some kind of label by default.
+    $id_field->options['label'] = $this->randomName();
     $output = $view->preview();
     $output = drupal_render($output);
     $this->assertFalse($this->xpathContent($output, '//div[contains(@class, :class)]', array(':class' => 'field-content')));
diff --git a/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php b/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php
index 13335e6..eb1aaa9 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Plugin/StyleTest.php
@@ -127,12 +127,14 @@ function _testGrouping($stripped = FALSE) {
         'table' => 'views_test_data',
         'field' => 'name',
         'relationship' => 'none',
+        'label' => 'Name',
       ),
       'job' => array(
         'id' => 'job',
         'table' => 'views_test_data',
         'field' => 'job',
         'relationship' => 'none',
+        'label' => 'Job',
       ),
       'age' => array(
         'id' => 'age',
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/FieldTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/FieldTest.php
new file mode 100644
index 0000000..2dc7faf
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/FieldTest.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\UI\FieldTest.
+ */
+
+namespace Drupal\views\Tests\UI;
+
+use Drupal\views_ui\Tests\UITestBase;
+
+/**
+ * Tests the UI of field handlers.
+ *
+ * @see \Drupal\views\Plugin\views\field\FieldPluginBase.
+ */
+class FieldTest extends UITestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Field UI',
+      'description' => 'Tests the UI of field handlers.',
+      'group' => 'Views UI',
+    );
+  }
+
+  /**
+   * Tests the field labels.
+   */
+  public function testFieldLabel() {
+    // Create a view with unformatted style and make sure the fields have no
+    // labels by default.
+    $view = array();
+    $view['human_name'] = $this->randomName(16);
+    $view['name'] = strtolower($this->randomName(16));
+    $view['show[wizard_key]'] = 'node';
+    $view['page[create]'] = TRUE;
+    $view['page[style][style_plugin]'] = 'default';
+    $view['page[path]'] = $view['name'];
+    $this->drupalPost('admin/structure/views/add', $view, t('Save & exit'));
+
+    $view = views_get_view($view['name']);
+    $view->initHandlers();
+    $this->assertEqual($view->field['title']->options['label'], '', 'The field label for normal styles are empty.');
+  }
+}
diff --git a/core/modules/views/lib/Drupal/views/Tests/UI/StyleTableTest.php b/core/modules/views/lib/Drupal/views/Tests/UI/StyleTableTest.php
new file mode 100644
index 0000000..276b523
--- /dev/null
+++ b/core/modules/views/lib/Drupal/views/Tests/UI/StyleTableTest.php
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\UI\StyleTableTest.
+ */
+
+namespace Drupal\views\Tests\UI;
+
+use Drupal\views_ui\Tests\UITestBase;
+
+/**
+ * Tests the UI of views when using the table style.
+ *
+ * @see \Drupal\views\Plugin\views\style\Table.
+ */
+class StyleTableTest extends UITestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Style: Table UI',
+      'description' => 'Tests the UI of views when using the table style.',
+      'group' => 'Views UI',
+    );
+  }
+
+  /**
+   * Tests created a table style view.
+   */
+  public function testWizard() {
+    // Create a new view and check that the first field has a label.
+    $view = array();
+    $view['human_name'] = $this->randomName(16);
+    $view['name'] = strtolower($this->randomName(16));
+    $view['show[wizard_key]'] = 'node';
+    $view['page[create]'] = TRUE;
+    $view['page[style][style_plugin]'] = 'table';
+    $view['page[path]'] = $view['name'];
+    $this->drupalPost('admin/structure/views/add', $view, t('Save & exit'));
+
+    $view = views_get_view($view['name']);
+    $view->initHandlers();
+    $this->assertEqual($view->field['title']->options['label'], 'Title', 'The field label for table styles is not empty.');
+  }
+
+}
diff --git a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml
index 2dfc632..9101617 100644
--- a/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml
+++ b/core/modules/views/tests/modules/views_test_config/test_views/views.view.test_click_sort.yml
@@ -10,18 +10,21 @@ display:
           id: id
           table: views_test_data
           field: id
+          label: ID
           plugin_id: numeric
           provider: views_test_data
         name:
           id: name
           table: views_test_data
           field: name
+          label: Name
           plugin_id: string
           provider: views_test_data
         created:
           id: created
           table: views_test_data
           field: created
+          label: created
           plugin_id: date
           provider: views_test_data
       display_options:
