diff --git a/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index 8c6483c..c093ea3 100644
--- a/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -1213,7 +1213,7 @@ abstract class DisplayPluginBase extends PluginBase {
       $options['style_plugin']['links']['style_options'] = t('Change settings for this format');
     }
 
-    if (!empty($style_plugin['uses_row_plugin'])) {
+    if (!empty($style_plugin_instance->uses_row_plugin())) {
       $manager = new ViewsPluginManager('row');
       $row_plugin = $manager->getDefinition($this->get_option('row_plugin'));
       $row_plugin_instance = $this->get_plugin('row');
diff --git a/lib/Drupal/views/Plugin/views/row/Fields.php b/lib/Drupal/views/Plugin/views/row/Fields.php
index 2c7bd37..21db542 100644
--- a/lib/Drupal/views/Plugin/views/row/Fields.php
+++ b/lib/Drupal/views/Plugin/views/row/Fields.php
@@ -23,7 +23,6 @@ use Drupal\Core\Annotation\Translation;
  *   title = @Translation("Fields"),
  *   help = @Translation("Displays the fields with an optional template."),
  *   theme = "views_view_fields",
- *   uses_fields = TRUE,
  *   uses_options = TRUE,
  *   type = "normal",
  *   help_topic = "style-row-fields"
@@ -31,6 +30,13 @@ use Drupal\Core\Annotation\Translation;
  */
 class Fields extends RowPluginBase {
 
+  /**
+   * Does the row plugin support to add fields to it's output.
+   *
+   * @var bool
+   */
+  public $uses_fields = TRUE;
+
   function option_definition() {
     $options = parent::option_definition();
 
diff --git a/lib/Drupal/views/Plugin/views/row/RowPluginBase.php b/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
index f51d232..87ef8e0 100644
--- a/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/row/RowPluginBase.php
@@ -27,6 +27,13 @@ use Drupal\views\Plugin\views\PluginBase;
 abstract class RowPluginBase extends PluginBase {
 
   /**
+   * Does the row plugin support to add fields to it's output.
+   *
+   * @var bool
+   */
+  public $uses_fields = FALSE;
+
+  /**
    * Initialize the row plugin.
    */
   function init(&$view, &$display, $options = NULL) {
@@ -38,7 +45,7 @@ abstract class RowPluginBase extends PluginBase {
   }
 
   function uses_fields() {
-    return !empty($this->definition['uses_fields']);
+    return $this->uses_fields;
   }
 
 
diff --git a/lib/Drupal/views/Plugin/views/row/RssFields.php b/lib/Drupal/views/Plugin/views/row/RssFields.php
index d4246ba..de12eeb 100644
--- a/lib/Drupal/views/Plugin/views/row/RssFields.php
+++ b/lib/Drupal/views/Plugin/views/row/RssFields.php
@@ -18,7 +18,6 @@ use Drupal\Core\Annotation\Translation;
  *   title = @Translation("Fields"),
  *   help = @Translation("Display fields as RSS items."),
  *   theme = "views_view_row_rss",
- *   uses_fields = TRUE,
  *   uses_options = TRUE,
  *   type = "feed",
  *   help_topic = "style-row-fields"
@@ -26,6 +25,13 @@ use Drupal\Core\Annotation\Translation;
  */
 class RssFields extends RowPluginBase {
 
+  /**
+   * Does the row plugin support to add fields to it's output.
+   *
+   * @var bool
+   */
+  public $uses_fields = TRUE;
+
   function option_definition() {
     $options = parent::option_definition();
     $options['title_field'] = array('default' => '');
diff --git a/lib/Drupal/views/Plugin/views/style/DefaultStyle.php b/lib/Drupal/views/Plugin/views/style/DefaultStyle.php
index a7ce343..29e3bce 100644
--- a/lib/Drupal/views/Plugin/views/style/DefaultStyle.php
+++ b/lib/Drupal/views/Plugin/views/style/DefaultStyle.php
@@ -21,8 +21,6 @@ use Drupal\Core\Annotation\Translation;
  *   title = @Translation("Unformatted list"),
  *   help = @Translation("Displays rows one after another."),
  *   theme = "views_view_unformatted",
- *   uses_row_plugin = TRUE,
- *   uses_row_class = TRUE,
  *   uses_grouping = TRUE,
  *   uses_options = TRUE,
  *   type = "normal",
@@ -32,6 +30,20 @@ use Drupal\Core\Annotation\Translation;
 class DefaultStyle extends StylePluginBase {
 
   /**
+   * Does the style plugin allows to use style plugins.
+   *
+   * @var bool
+   */
+  public $uses_row_plugin = TRUE;
+
+  /**
+   * Does the style plugin support custom css class for the rows.
+   *
+   * @var bool
+   */
+  public $uses_row_class = TRUE;
+
+  /**
    * Set default options
    */
   function options(&$options) {
diff --git a/lib/Drupal/views/Plugin/views/style/Grid.php b/lib/Drupal/views/Plugin/views/style/Grid.php
index b5146c9..07882c1 100644
--- a/lib/Drupal/views/Plugin/views/style/Grid.php
+++ b/lib/Drupal/views/Plugin/views/style/Grid.php
@@ -20,9 +20,6 @@ use Drupal\Core\Annotation\Translation;
  *   title = @Translation("Grid"),
  *   help = @Translation("Displays rows in a grid."),
  *   theme = "views_view_grid",
- *   uses_fields = FALSE,
- *   uses_row_plugin = TRUE,
- *   uses_row_class = TRUE,
  *   uses_options = TRUE,
  *   type = "normal",
  *   help_topic = "style-grid"
@@ -31,6 +28,20 @@ use Drupal\Core\Annotation\Translation;
 class Grid extends StylePluginBase {
 
   /**
+   * Does the style plugin allows to use style plugins.
+   *
+   * @var bool
+   */
+  public $uses_row_plugin = TRUE;
+
+  /**
+   * Does the style plugin support custom css class for the rows.
+   *
+   * @var bool
+   */
+  public $uses_row_class = TRUE;
+
+  /**
    * Set default options
    */
   function option_definition() {
diff --git a/lib/Drupal/views/Plugin/views/style/HtmlList.php b/lib/Drupal/views/Plugin/views/style/HtmlList.php
index 9760a94..fccebc0 100644
--- a/lib/Drupal/views/Plugin/views/style/HtmlList.php
+++ b/lib/Drupal/views/Plugin/views/style/HtmlList.php
@@ -20,8 +20,6 @@ use Drupal\Core\Annotation\Translation;
  *   title = @Translation("HTML List"),
  *   help = @Translation("Displays rows as HTML list."),
  *   theme = "views_view_list",
- *   uses_row_plugin = TRUE,
- *   uses_row_class = TRUE,
  *   uses_options = TRUE,
  *   type = "normal",
  *   help_topic = "style-list"
@@ -30,6 +28,20 @@ use Drupal\Core\Annotation\Translation;
 class HtmlList extends StylePluginBase {
 
   /**
+   * Does the style plugin allows to use style plugins.
+   *
+   * @var bool
+   */
+  public $uses_row_plugin = TRUE;
+
+  /**
+   * Does the style plugin support custom css class for the rows.
+   *
+   * @var bool
+   */
+  public $uses_row_class = TRUE;
+
+  /**
    * Set default options
    */
   function option_definition() {
diff --git a/lib/Drupal/views/Plugin/views/style/StylePluginBase.php b/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
index 7735f29..3050663 100644
--- a/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
+++ b/lib/Drupal/views/Plugin/views/style/StylePluginBase.php
@@ -44,6 +44,30 @@ abstract class StylePluginBase extends PluginBase {
   var $row_plugin;
 
   /**
+   * Does the style plugin allows to use style plugins.
+   *
+   * @var bool
+   */
+  public $uses_row_plugin = FALSE;
+
+  /**
+   * Does the style plugin support custom css class for the rows.
+   *
+   * @var bool
+   */
+  public $uses_row_class = FALSE;
+
+  /**
+   * Does the style plugin for itself support to add fields to it's output.
+   *
+   * This option only makes sense on style plugins without row plugins, like
+   * for example table.
+   *
+   * @var bool
+   */
+  public $uses_fields = FALSE;
+
+  /**
    * Initialize a style plugin.
    *
    * @param $view
@@ -82,16 +106,21 @@ abstract class StylePluginBase extends PluginBase {
 
   /**
    * Return TRUE if this style also uses a row plugin.
+   *
+   * @return bool
    */
   function uses_row_plugin() {
-    return !empty($this->definition['uses_row_plugin']);
+    return $this->uses_row_plugin;
+
   }
 
   /**
    * Return TRUE if this style also uses a row plugin.
+   *
+   * @return bool
    */
   function uses_row_class() {
-    return !empty($this->definition['uses_row_class']);
+    return $this->uses_row_class;
   }
 
   /**
@@ -107,7 +136,7 @@ abstract class StylePluginBase extends PluginBase {
       $row_uses_fields = $this->row_plugin->uses_fields();
     }
     // Otherwise, check the definition or the option.
-    return $row_uses_fields || !empty($this->definition['uses_fields']) || !empty($this->options['uses_fields']);
+    return $row_uses_fields || !empty($this->uses_fields) || !empty($this->options['uses_fields']);
   }
 
   /**
diff --git a/lib/Drupal/views/Plugin/views/style/Table.php b/lib/Drupal/views/Plugin/views/style/Table.php
index 4c1a14b..880b552 100644
--- a/lib/Drupal/views/Plugin/views/style/Table.php
+++ b/lib/Drupal/views/Plugin/views/style/Table.php
@@ -20,9 +20,6 @@ use Drupal\Core\Annotation\Translation;
  *   title = @Translation("Table"),
  *   help = @Translation("Displays rows in a table."),
  *   theme = "views_view_table",
- *   uses_row_plugin = FALSE,
- *   uses_row_class = TRUE,
- *   uses_fields = TRUE,
  *   uses_options = TRUE,
  *   type = "normal",
  *   help_topic = "style-table"
@@ -31,6 +28,27 @@ use Drupal\Core\Annotation\Translation;
 class Table extends StylePluginBase {
 
   /**
+   * Does the style plugin for itself support to add fields to it's output.
+   *
+   * @var bool
+   */
+  public $uses_fields = TRUE;
+
+  /**
+   * Does the style plugin allows to use style plugins.
+   *
+   * @var bool
+   */
+  public $uses_row_plugin = FALSE;
+
+  /**
+   * Does the style plugin support custom css class for the rows.
+   *
+   * @var bool
+   */
+  public $uses_row_class = TRUE;
+
+  /**
    * Contains the current active sort column.
    * @var string
    */
