diff --git a/core/modules/views/templates/views-view-grouping.html.twig b/core/modules/views/templates/views-view-grouping.html.twig
new file mode 100644
index 0000000..ad80090
--- /dev/null
+++ b/core/modules/views/templates/views-view-grouping.html.twig
@@ -0,0 +1,24 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display a single views grouping.
+ *
+ * Available variables:
+ * - view: The View object.
+ * - grouping: The grouping instruction.
+ * - grouping_level: Integer indicating the hierarchical level of the grouping.
+ * - title: The group heading.
+ * - content: The content to be grouped. This is set via aggregation settings
+ *   on the view.
+ * - rows: The rows returned from the view.
+ *
+ * @see template_preprocess()
+ * @see template_preprocess_views_view_grouping()
+ *
+ * @ingroup themeable
+ */
+#}
+<div class="view-grouping">
+  <div class="view-grouping-header">{{ title }}</div>
+  <div class="view-grouping-content">{{ content }}</div>
+</div>
diff --git a/core/modules/views/templates/views-view-grouping.tpl.php b/core/modules/views/templates/views-view-grouping.tpl.php
deleted file mode 100644
index ebf7bc2..0000000
--- a/core/modules/views/templates/views-view-grouping.tpl.php
+++ /dev/null
@@ -1,25 +0,0 @@
-<?php
-
-/**
- * @file
- * This template is used to print a single grouping in a view.
- *
- * It is not actually used in default Views, as this is registered as a theme
- * function which has better performance. For single overrides, the template is
- * perfectly okay.
- *
- * Variables available:
- * - $view: The view object
- * - $grouping: The grouping instruction.
- * - $grouping_level: Integer indicating the hierarchical level of the grouping.
- * - $rows: The rows contained in this grouping.
- * - $title: The title of this grouping.
- * - $content: The processed content output that will normally be used.
- */
-?>
-<div class="view-grouping">
-  <div class="view-grouping-header"><?php print $title; ?></div>
-  <div class="view-grouping-content">
-    <?php print $content; ?>
-  </div>
-</div>
diff --git a/core/modules/views/views.module b/core/modules/views/views.module
index 0e5838a..196f59d 100644
--- a/core/modules/views/views.module
+++ b/core/modules/views/views.module
@@ -112,8 +112,8 @@ function views_theme($existing, $type, $theme, $path) {
     'variables' => array('view' => NULL, 'field' => NULL, 'row' => NULL),
   );
   $hooks['views_view_grouping'] = $base + array(
-    'pattern' => 'views_view_grouping__',
     'variables' => array('view' => NULL, 'grouping' => NULL, 'grouping_level' => NULL, 'rows' => NULL, 'title' => NULL),
+    'template' => 'views-view-grouping',
   );
 
   $plugins = views_get_plugin_definitions();
diff --git a/core/modules/views/views.theme.inc b/core/modules/views/views.theme.inc
index 0bae0fc..2a6f41b 100644
--- a/core/modules/views/views.theme.inc
+++ b/core/modules/views/views.theme.inc
@@ -296,26 +296,22 @@ function template_preprocess_views_view_fields(&$vars) {
 }
 
 /**
- * Display a single views grouping.
- */
-function theme_views_view_grouping($vars) {
-  $view = $vars['view'];
-  $title = $vars['title'];
-  $content = $vars['content'];
-
-  $output = '<div class="view-grouping">';
-  $output .= '<div class="view-grouping-header">' . $title . '</div>';
-  $output .= '<div class="view-grouping-content">' . $content . '</div>' ;
-  $output .= '</div>';
-
-  return $output;
-}
-
-/**
- * Process a single grouping within a view.
+ * Prepares variables for views single grouping templates.
+ *
+ * Default template: views-view-grouping.html.twig.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - view: The View object.
+ *   - rows: The rows returned from the view.
+ *   - grouping_level: Integer indicating the hierarchical level of the
+ *     grouping.
+ *   - content: The content to be grouped. This is set via aggregation settings
+ *     on the view.
+ *   - title: The group heading.
  */
-function template_preprocess_views_view_grouping(&$vars) {
-  $vars['content'] = $vars['view']->style_plugin->render_grouping_sets($vars['rows'], $vars['grouping_level']);
+function template_preprocess_views_view_grouping(&$variables) {
+  $variables['content'] = $variables['view']->style_plugin->render_grouping_sets($variables['rows'], $variables['grouping_level']);
 }
 
 /**
