diff --git a/uc_cart/src/Form/CartForm.php b/uc_cart/src/Form/CartForm.php
index ab55b0b..7700239 100644
--- a/uc_cart/src/Form/CartForm.php
+++ b/uc_cart/src/Form/CartForm.php
@@ -52,7 +52,7 @@ class CartForm extends FormBase {
           'class' => array('desc'),
         ),
         'qty' => array(
-          'data' => array('#theme' => 'uc_qty_label'),
+          'data' => $this->t('Quantity'),
           'class' => array('qty'),
         ),
         'total' => array(
diff --git a/uc_cart/uc_cart.theme.inc b/uc_cart/uc_cart.theme.inc
index 50b7b09..f78c4c1 100644
--- a/uc_cart/uc_cart.theme.inc
+++ b/uc_cart/uc_cart.theme.inc
@@ -33,7 +33,7 @@ function theme_uc_cart_review_table(array $variables) {
 
   // Set up table header.
   $header = array(
-    array('data' => array('#theme' => 'uc_qty_label'), 'class' => array('qty')),
+    array('data' => t('Quantity'), 'class' => array('qty')),
     array('data' => t('Products'), 'class' => array('products')),
     array('data' => t('Price'), 'class' => array('price')),
   );
diff --git a/uc_store/templates/uc-price.html.twig b/uc_store/templates/uc-price.html.twig
new file mode 100644
index 0000000..548b572
--- /dev/null
+++ b/uc_store/templates/uc-price.html.twig
@@ -0,0 +1,19 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display a price.
+ *
+ * Displays a price in the standard format and with consistent markup.
+ *
+ * Available variables:
+ * - price: A formatted price.
+ * - suffixes: An array of suffixes to be attached to this price.
+ *
+ * @ingroup themeable
+#}
+{% spaceless %}
+<span class="uc-price">{{ price }}</span>
+{% if suffixes is not empty %}
+  <span class="price-suffixes">{{ suffixes|join(' ') }}</span>
+{% endif %}
+{% endspaceless %}
diff --git a/uc_store/templates/uc-qty.html.twig b/uc_store/templates/uc-qty.html.twig
new file mode 100644
index 0000000..da5259f
--- /dev/null
+++ b/uc_store/templates/uc-qty.html.twig
@@ -0,0 +1,13 @@
+{#
+/**
+ * @file
+ * Default theme implementation to display a quantity.
+ *
+ * Displays a quantity.
+ *
+ * Available variables:
+ * - qty: The quantity to display.
+ *
+ * @ingroup themeable
+#}
+{{ qty }} ×
diff --git a/uc_store/uc_store.module b/uc_store/uc_store.module
index 4945a61..a120888 100644
--- a/uc_store/uc_store.module
+++ b/uc_store/uc_store.module
@@ -112,18 +112,11 @@ function uc_store_theme() {
   return array(
     'uc_price' => array(
       'variables' => array('price' => 0, 'suffixes' => array()),
-      'file' => 'uc_store.theme.inc',
-      'function' => 'theme_uc_price',
-    ),
-    'uc_qty_label' => array(
-      'variables' => array(),
-      'file' => 'uc_store.theme.inc',
-      'function' => 'theme_uc_qty_label',
+      'template' => 'uc-price',
     ),
     'uc_qty' => array(
       'variables' => array('qty' => 1),
-      'file' => 'uc_store.theme.inc',
-      'function' => 'theme_uc_qty',
+      'template' => 'uc-qty',
     ),
     'uc_uid' => array(
       'variables' => array('uid' => 0),
@@ -134,6 +127,15 @@ function uc_store_theme() {
 }
 
 /**
+ * Prepares variables for the price template.
+ *
+ * Default template: uc-price.html.twig.
+ */
+function template_preprocess_uc_price(&$variables) {
+  $variables['price'] = uc_currency_format($variables['price']);
+}
+
+/**
  * Implements hook_help().
  */
 function uc_store_help($route_name, RouteMatchInterface $route_match) {
diff --git a/uc_store/uc_store.theme.inc b/uc_store/uc_store.theme.inc
index 3bf7c4e..527a031 100644
--- a/uc_store/uc_store.theme.inc
+++ b/uc_store/uc_store.theme.inc
@@ -8,46 +8,6 @@
 use Drupal\user\Entity\User;
 
 /**
- * Displays a price in the standard format and with consistent markup.
- *
- * @param array $variables
- *   An associative array containing:
- *   - price: A numerical price value.
- *   - suffixes: An array of suffixes to be attached to this price.
- *
- * @ingroup themeable
- */
-function theme_uc_price(array $variables) {
-  $output = '<span class="uc-price">' . uc_currency_format($variables['price']) . '</span>';
-  if (!empty($variables['suffixes'])) {
-    $output .= '<span class="price-suffixes">' . implode(' ', $variables['suffixes']) . '</span>';
-  }
-  return $output;
-}
-
-/**
- * Displays "Quantity" abbreviated as "Qty".
- *
- * @ingroup themeable
- */
-function theme_uc_qty_label() {
-  return '<abbr title="' . t('Quantity') . '">' . t('Qty') . '</abbr>';
-}
-
-/**
- * Displays a quantity.
- *
- * @param array $variables
- *   An associative array containing:
- *   - qty: The quantity to display.
- *
- * @ingroup themeable
- */
-function theme_uc_qty(array $variables) {
-  return $variables['qty'] . ' ×';
-}
-
-/**
  * Displays a username in the standard format and with consistent markup.
  *
  * @param array $variables
