diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/style/Grid.php b/core/modules/views/lib/Drupal/views/Plugin/views/style/Grid.php
index 0cfaa2d..242afb4 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/style/Grid.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/style/Grid.php
@@ -49,6 +49,7 @@ protected function defineOptions() {
     $options['alignment'] = array('default' => 'horizontal');
     $options['fill_single_line'] = array('default' => TRUE, 'bool' => TRUE);
     $options['summary'] = array('default' => '');
+    $options['caption'] = array('default' => '');
 
     return $options;
   }
@@ -86,6 +87,12 @@ public function buildOptionsForm(&$form, &$form_state) {
       '#description' => t('This value will be displayed as table-summary attribute in the html. Set this for better accessiblity of your site.'),
       '#default_value' => $this->options['summary'],
     );
-  }
 
-}
+    $form['caption'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Short description of table'),
+      '#description' => t('Include a caption for better accessibility of your table.'),
+      '#default_value' => $this->options['caption'],
+      '#maxlength' => 255,
+    );
+}
\ No newline at end of file
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 5a3e907..0cbb559 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
@@ -69,6 +69,7 @@ protected function defineOptions() {
     $options['sticky'] = array('default' => FALSE, 'bool' => TRUE);
     $options['order'] = array('default' => 'asc');
     $options['summary'] = array('default' => '', 'translatable' => TRUE);
+    $options['caption'] = array('default' => '', 'translatable' => TRUE);
     $options['empty_table'] = array('default' => FALSE, 'bool' => TRUE);
 
     return $options;
@@ -221,8 +222,15 @@ public function buildOptionsForm(&$form, &$form_state) {
     $form['summary'] = array(
       '#type' => 'textfield',
       '#title' => t('Table summary'),
-      '#description' => t('This value will be displayed as table-summary attribute in the html. Set this for better accessiblity of your site.'),
-      '#default_value' => $this->options['summary'],
+      '#description' => t('This value will be displayed as table-summary attribute in the html. Use this to give a summary of complex tables.'),      '#default_value' => $this->options['summary'],
+      '#maxlength' => 255,
+    );
+
+    $form['caption'] = array(
+      '#type' => 'textfield',
+      '#title' => t('Short description of table'),
+      '#description' => t('Include a caption for better accessibility of your table.'),
+      '#default_value' => $this->options['caption'],
       '#maxlength' => 255,
     );
 
diff --git a/core/modules/views/templates/views-view-grid.tpl.php b/core/modules/views/templates/views-view-grid.tpl.php
index 43ba37b..d574951 100644
--- a/core/modules/views/templates/views-view-grid.tpl.php
+++ b/core/modules/views/templates/views-view-grid.tpl.php
@@ -14,6 +14,9 @@
   <h3><?php print $title; ?></h3>
 <?php endif; ?>
 <table <?php print $attributes; ?>>
+  <?php if (!empty($caption)) : ?>
+    <caption><?php print $caption; ?></caption>
+  <?php endif; ?>
   <tbody>
     <?php foreach ($rows as $row_number => $columns): ?>
       <tr <?php print $row_classes[$row_number]; ?>>
diff --git a/core/modules/views/templates/views-view-table.tpl.php b/core/modules/views/templates/views-view-table.tpl.php
index 4d44d42..86d6deb 100644
--- a/core/modules/views/templates/views-view-table.tpl.php
+++ b/core/modules/views/templates/views-view-table.tpl.php
@@ -7,6 +7,7 @@
  * - $title : The title of this group of rows.  May be empty.
  * - $header: An array of header labels keyed by field id.
  * - $header_classes: An array of header classes keyed by field id.
+ * - $caption: The caption for this table. May be empty.
  * - $fields: An array of CSS IDs to use for each field id.
  * - $classes: A class or classes to apply to the table, based on settings.
  * - $row_classes: An array of classes to apply to each row, indexed by row
@@ -20,8 +21,8 @@
 
 ?>
 <table <?php print $attributes; ?>>
-  <?php if (!empty($title)) : ?>
-    <caption><?php print $title; ?></caption>
+   <?php if (!empty($title) || !empty($caption)) : ?>
+     <caption><?php print $caption . $title; ?></caption>
   <?php endif; ?>
   <?php if (!empty($header)) : ?>
     <thead>
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index 395f275..71ff5e7 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -773,9 +773,20 @@ function template_preprocess_views_view_grid(&$vars) {
     }
   }
   $vars['rows'] = $rows;
+
+  // Add the summary to the list if set.
   if (!empty($handler->options['summary'])) {
-    $vars['attributes_array'] = array('summary' => $handler->options['summary']);
+    $vars['attributes_array'] = array('summary' => filter_xss_admin($handler->options['summary']));
+  }
+
+  // Add the caption to the list if set.
+  if (!empty($handler->options['caption'])) {
+    $vars['caption'] = filter_xss_admin($handler->options['caption']);
+  } 
+  else {
+    $vars['caption'] = '';
   }
+
   // If the table has headers and it should react responsively to columns hidden
   // with the classes represented by the constants RESPONSIVE_PRIORITY_MEDIUM
   // and RESPONSIVE_PRIORITY_LOW, add the tableresponsive behaviors.
