diff --git a/core/includes/theme.inc b/core/includes/theme.inc
index 84d4752..7f87b20 100644
--- a/core/includes/theme.inc
+++ b/core/includes/theme.inc
@@ -2329,27 +2329,6 @@ function theme_more_link($variables) {
 }
 
 /**
- * Returns HTML for a progress bar.
- *
- * Note that the core Batch API uses this only for non-JavaScript batch jobs.
- *
- * @param $variables
- *   An associative array containing:
- *   - percent: The percentage of the progress.
- *   - message: A string containing information to be displayed.
- */
-function theme_progress_bar($variables) {
-  $output = '<div id="progress" class="progress">';
-  $output .= '<div class="progress__label">' . $variables['label'] . '</div>';
-  $output .= '<div class="progress__track"><div class="progress__bar" style="width: ' . $variables['percent'] . '%"></div></div>';
-  $output .= '<div class="progress__percentage">' . $variables['percent'] . '%</div>';
-  $output .= '<div class="progress__description">' . $variables['message'] . '</div>';
-  $output .= '</div>';
-
-  return $output;
-}
-
-/**
  * Returns HTML for an indentation div; used for drag and drop tables.
  *
  * @param $variables
@@ -3082,7 +3061,8 @@ function drupal_common_theme() {
       'variables' => array('url' => NULL, 'title' => NULL)
     ),
     'progress_bar' => array(
-      'variables' => array('percent' => NULL, 'message' => NULL),
+      'variables' => array('label' => NULL, 'percent' => NULL, 'message' => NULL),
+      'template' => 'progress-bar',
     ),
     'indentation' => array(
       'variables' => array('size' => 1),
diff --git a/core/modules/system/templates/progress-bar.html.twig b/core/modules/system/templates/progress-bar.html.twig
new file mode 100644
index 0000000..9f94716
--- /dev/null
+++ b/core/modules/system/templates/progress-bar.html.twig
@@ -0,0 +1,25 @@
+{#
+/**
+ * @file
+ * Default theme implementation for a progress bar.
+ *
+ * Note that the core Batch API uses this only for non-JavaScript batch jobs.
+ *
+ * Available variables:
+ * - label: The label of the working task.
+ * - percent: The percentage of the progress.
+ * - message: A string containing information to be displayed.
+ *
+ * @see template_preprocess()
+ *
+ * @ingroup themeable
+ */
+#}
+<div id="progress" class="progress">
+  {% if label %}
+    <div class="progress__label">{{ label }}</div>
+  {% endif %}
+  <div class="progress__track"><div class="progress__bar" style="width: {{ percent }}%"></div></div>
+  <div class="progress__percentage">{{ percent }}%</div>
+  <div class="progress__description">{{ message }}</div>
+</div>
