diff --git a/payment/uc_payment/lib/Drupal/uc_payment/Plugin/Ubercart/CheckoutPane/PaymentMethodPane.php b/payment/uc_payment/lib/Drupal/uc_payment/Plugin/Ubercart/CheckoutPane/PaymentMethodPane.php
index 87ecf3a..6e62f85 100644
--- a/payment/uc_payment/lib/Drupal/uc_payment/Plugin/Ubercart/CheckoutPane/PaymentMethodPane.php
+++ b/payment/uc_payment/lib/Drupal/uc_payment/Plugin/Ubercart/CheckoutPane/PaymentMethodPane.php
@@ -160,7 +160,7 @@ class PaymentMethodPane extends CheckoutPanePluginBase implements ContainerFacto
   public function review(UcOrderInterface $order) {
     $line_items = uc_order_load_line_items_display($order);
     foreach ($line_items as $line_item) {
-      $review[] = array('title' => $line_item['title'], 'data' => theme('uc_price', array('price' => $line_item['amount'])));
+      $review[] = array('title' => $line_item['title'], 'data' => uc_currency_format($line_item['amount']));
     }
     $method = $this->paymentMethodManager->createFromOrder($order);
     $review[] = array('border' => 'top', 'title' => t('Paying by'), 'data' => $method->cartReviewTitle());
diff --git a/payment/uc_payment/uc_payment.module b/payment/uc_payment/uc_payment.module
index 1260603..783498d 100644
--- a/payment/uc_payment/uc_payment.module
+++ b/payment/uc_payment/uc_payment.module
@@ -83,7 +83,7 @@ function template_preprocess_uc_payment_totals(&$variables) {
 
   foreach ($variables['line_items'] as $key => $line) {
     $variables['line_items'][$key]['title'] = filter_xss($line['title']);
-    $variables['line_items'][$key]['amount'] = theme('uc_price', array('price' => $line['amount']));
+    $variables['line_items'][$key]['amount'] = uc_currency_format($line['amount']);
   }
 }
 
diff --git a/payment/uc_payment/uc_payment_order_pane.inc b/payment/uc_payment/uc_payment_order_pane.inc
index f59bed2..0102732 100644
--- a/payment/uc_payment/uc_payment_order_pane.inc
+++ b/payment/uc_payment/uc_payment_order_pane.inc
@@ -114,7 +114,8 @@ function uc_order_pane_payment($op, $order, &$form = NULL, &$form_state = NULL)
 function uc_payment_order_pane_ajax_callback($form, &$form_state) {
   $response = new AjaxResponse();
   $response->addCommand(new ReplaceCommand('#payment-details', trim(drupal_render($form['payment']['payment_details']))));
-  $response->addCommand(new PrependCommand('#payment-details', trim(theme('status_messages'))));
+  $status_messages = array('#theme' => 'status_messages');
+  $response->addCommand(new PrependCommand('#payment-details', drupal_render($status_messages)));
 
   return $response;
 }
diff --git a/shipping/uc_quote/uc_quote.module b/shipping/uc_quote/uc_quote.module
index db43a07..ea62bf4 100644
--- a/shipping/uc_quote/uc_quote.module
+++ b/shipping/uc_quote/uc_quote.module
@@ -868,7 +868,8 @@ function uc_quote_build_quote_form($order, $show_errors = TRUE) {
 function uc_quote_cart_returned_rates($form, $form_state) {
   $response = new AjaxResponse();
   $response->addCommand(new ReplaceCommand('#quote', trim(drupal_render($form['quote']))));
-  $response->addCommand(new PrependCommand('#quote', trim(theme('status_messages'))));
+  $status_messages = array('#theme' => 'status_messages');
+  $response->addCommand(new PrependCommand('#quote', drupal_render($status_messages)));
 
   return $response;
 }
@@ -917,7 +918,8 @@ function uc_quote_order_update_rates($form, $form_state) {
 
   // Reset shipping form.
   $response->addCommand(new ReplaceCommand('#quote', trim(drupal_render($form['quotes']['quotes']))));
-  $response->addCommand(new PrependCommand('#quote', trim(theme('status_messages'))));
+  $status_messages = array('#theme' => 'status_messages');
+  $response->addCommand(new PrependCommand('#quote', drupal_render($status_messages)));
 
   return $response;
 }
diff --git a/shipping/uc_shipping/uc_shipping.admin.inc b/shipping/uc_shipping/uc_shipping.admin.inc
index 5667f5b..b627ab6 100644
--- a/shipping/uc_shipping/uc_shipping.admin.inc
+++ b/shipping/uc_shipping/uc_shipping.admin.inc
@@ -141,7 +141,7 @@ function uc_shipping_new_package($form, &$form_state, $order) {
         );
         $product_row['qty'] = array(
           '#type'          => 'select',
-          '#title'         => theme('uc_qty_label'),
+          '#title'         => t('Quantity'),
           '#title_display' => 'invisible',
           '#options'       => drupal_map_assoc(range(1, $unboxed_qty)),
           '#default_value' => $unboxed_qty,
@@ -198,7 +198,7 @@ function theme_uc_shipping_new_package_fieldset($variables) {
   drupal_add_js('misc/tableselect.js');
 
   $output = '';
-  $header = array(array('class' => array('select-all')), t('SKU'), t('Title'), theme('uc_qty_label'), t('Package'));
+  $header = array(array('class' => array('select-all')), t('SKU'), t('Title'), t('Quantity'), t('Package'));
 
   $rows = array();
   foreach (element_children($fieldset) as $op_id) {
@@ -379,7 +379,7 @@ function theme_uc_shipping_edit_package_fieldset($variables) {
   drupal_add_js('misc/tableselect.js');
 
   $output = '';
-  $header = array(array('class' => array('select-all')), t('SKU'), t('Title'), theme('uc_qty_label'));
+  $header = array(array('class' => array('select-all')), t('SKU'), t('Title'), t('Quantity'));
   $rows = array();
   foreach (element_children($fieldset) as $op_id) {
     $row = array();
diff --git a/uc_attribute/lib/Drupal/uc_attribute/Form/ObjectAttributesFormBase.php b/uc_attribute/lib/Drupal/uc_attribute/Form/ObjectAttributesFormBase.php
index c868bf7..0cfc344 100644
--- a/uc_attribute/lib/Drupal/uc_attribute/Form/ObjectAttributesFormBase.php
+++ b/uc_attribute/lib/Drupal/uc_attribute/Form/ObjectAttributesFormBase.php
@@ -85,7 +85,7 @@ abstract class ObjectAttributesFormBase extends FormBase {
         '#size' => 20,
       );
       $form['attributes'][$aid]['option'] = array(
-        '#markup' => $option ? (check_plain($option->name) . ' (' . theme('uc_price', array('price' => $option->price)) . ')' ) : t('n/a'),
+        '#markup' => $option ? (check_plain($option->name) . ' (' . uc_currency_format($option->price) . ')' ) : t('n/a'),
       );
       $form['attributes'][$aid]['required'] = array(
         '#type' => 'checkbox',
diff --git a/uc_attribute/uc_attribute.admin.inc b/uc_attribute/uc_attribute.admin.inc
index 927e5b7..ed1b094 100644
--- a/uc_attribute/uc_attribute.admin.inc
+++ b/uc_attribute/uc_attribute.admin.inc
@@ -45,7 +45,14 @@ function theme_uc_product_attributes($variables) {
   }
 
   if (!empty($option_rows)) {
-    return theme('item_list', array('items' => array_values($option_rows), 'attributes' => array('class' => array('product-description'))));
+    $item_list = array(
+      '#theme' => 'item_list',
+      '#items' => array_values($option_rows),
+      '#attributes' => array(
+        'class' => array('product-description'),
+      ),
+    );
+    return drupal_render($item_list);
   }
 
   return '';
diff --git a/uc_attribute/uc_attribute.module b/uc_attribute/uc_attribute.module
index b0b270b..993c401 100644
--- a/uc_attribute/uc_attribute.module
+++ b/uc_attribute/uc_attribute.module
@@ -1119,7 +1119,8 @@ function uc_attribute_option_ajax($form, $form_state) {
   if (strpos($form['#form_id'], 'add_to_cart_form') !== FALSE) {
     uc_product_view_ajax_commands($response, $form_state, array('display_price', 'weight', 'cost'));
   }
-  $response->addCommand(new PrependCommand($wrapper, trim(theme('status_messages'))));
+  $status_messages = array('#theme' => 'status_messages');
+  $response->addCommand(new PrependCommand($wrapper, drupal_render($status_messages)));
   return $response;
 }
 
@@ -1236,10 +1237,12 @@ function _uc_attribute_alter_form($id, &$product, $use_ajax) {
       }
 
       // Select options are check_plain()ed, but radio button labels are not.
-      $options[$option->oid] = theme('uc_attribute_option', array(
-        'option' => $attribute->display == 2 ? check_plain($option->name) : $option->name,
-        'price' => $display_price,
-      ));
+      $build = array(
+        '#theme' => 'uc_attribute_option',
+        '#option' => $attribute->display == 2 ? check_plain($option->name) : $option->name,
+        '#price' => $display_price,
+      );
+      $options[$option->oid] = drupal_render($build);
     }
 
     if (count($attribute->options) && $attribute->display > 0) {
diff --git a/uc_cart/lib/Drupal/uc_cart/Form/CartForm.php b/uc_cart/lib/Drupal/uc_cart/Form/CartForm.php
index ff4fee5..e93ae73 100644
--- a/uc_cart/lib/Drupal/uc_cart/Form/CartForm.php
+++ b/uc_cart/lib/Drupal/uc_cart/Form/CartForm.php
@@ -49,7 +49,7 @@ class CartForm extends FormBase {
           'class' => array('desc'),
         ),
         'qty' => array(
-          'data' => theme('uc_qty_label'),
+          'data' => array('#theme' => 'uc_qty_label'),
           'class' => array('qty'),
         ),
         'total' => array(
@@ -73,7 +73,8 @@ class CartForm extends FormBase {
         $form['items'][$i]['remove'] = $item['remove'];
         $form['items'][$i]['remove']['#name'] = 'remove-' . $i;
         $form['items'][$i]['image'] = uc_product_get_picture($item['nid']['#value'], 'uc_cart');
-        $form['items'][$i]['desc']['#markup'] = $item['title']['#markup'] . $item['description']['#markup'];
+        $form['items'][$i]['desc']['title'] = $item['title'];
+        $form['items'][$i]['desc']['description'] = $item['description'];
         $form['items'][$i]['qty'] = $item['qty'];
         $form['items'][$i]['total'] = array(
           '#theme' => 'uc_price',
diff --git a/uc_cart/lib/Drupal/uc_cart/Plugin/Block/CartBlock.php b/uc_cart/lib/Drupal/uc_cart/Plugin/Block/CartBlock.php
index a155174..64060dd 100644
--- a/uc_cart/lib/Drupal/uc_cart/Plugin/Block/CartBlock.php
+++ b/uc_cart/lib/Drupal/uc_cart/Plugin/Block/CartBlock.php
@@ -95,7 +95,7 @@ class CartBlock extends BlockBase {
           if (count(element_children($display_item))) {
             $items[] = array(
               'nid' => $display_item['nid']['#value'],
-              'qty' => theme('uc_qty', array('qty' => $display_item['qty']['#default_value'])),
+              'qty' => $display_item['qty']['#default_value'],
               'title' => $display_item['title']['#markup'],
               'price' => $display_item['#total'],
               'desc' => isset($display_item['description']['#markup']) ? $display_item['description']['#markup'] : FALSE,
diff --git a/uc_cart/lib/Drupal/uc_cart/Plugin/Ubercart/CheckoutPane/CartPane.php b/uc_cart/lib/Drupal/uc_cart/Plugin/Ubercart/CheckoutPane/CartPane.php
index 2c996c5..6fbe445 100644
--- a/uc_cart/lib/Drupal/uc_cart/Plugin/Ubercart/CheckoutPane/CartPane.php
+++ b/uc_cart/lib/Drupal/uc_cart/Plugin/Ubercart/CheckoutPane/CartPane.php
@@ -36,7 +36,11 @@ class CartPane extends CheckoutPanePluginBase {
    * {@inheritdoc}
    */
   public function review(UcOrderInterface $order) {
-    $review[] = theme('uc_cart_review_table', array('items' => $order->products, 'show_subtotal' => FALSE));
+    $review[] = array(
+      '#theme' => 'uc_cart_review_table',
+      '#items' => $order->products,
+      '#show_subtotal' => FALSE,
+    );
     return $review;
   }
 
diff --git a/uc_cart/templates/uc-cart-block.html.twig b/uc_cart/templates/uc-cart-block.html.twig
index e8b8b7e..4b4f556 100644
--- a/uc_cart/templates/uc-cart-block.html.twig
+++ b/uc_cart/templates/uc-cart-block.html.twig
@@ -22,7 +22,7 @@
   <table {{ attributes }}>
   {% for item in items %}
     <tr>
-      <td class="cart-block-item-qty">{{ item.qty }}</td>
+      <td class="cart-block-item-qty">{{ item.qty }} ×</td>
       <td class="cart-block-item-title">{{ item.title }}</td>
       <td class="cart-block-item-price">{{ item.price }}</td>
     </tr>
diff --git a/uc_cart/uc_cart.module b/uc_cart/uc_cart.module
index d3e4dc4..0947f28 100644
--- a/uc_cart/uc_cart.module
+++ b/uc_cart/uc_cart.module
@@ -198,10 +198,10 @@ function template_preprocess_uc_cart_block(&$variables) {
     $variables['attributes']['class'][] = 'collapsed';
   }
 
-  $variables['total'] = theme('uc_price', array('price' => $variables['total']));
+  $variables['total'] = uc_currency_format($variables['total']);
 
   foreach ($variables['items'] as $key => $item) {
-    $variables['items'][$key]['price'] = theme('uc_price', array('price' => $item['price']));
+    $variables['items'][$key]['price'] = uc_currency_format($item['price']);
   }
 
   $variables['summary_links'] = array(
@@ -216,13 +216,14 @@ function template_preprocess_uc_cart_block(&$variables) {
  */
 function uc_cart_preprocess_block(&$variables) {
   if ($variables['plugin_id'] == 'uc_cart' && $variables['label']) {
-    $variables['label'] = theme('uc_cart_block_title', array(
-      'title' => $variables['label'],
-      'show_icon' => $variables['configuration']['show_image'],
-      'cart_empty' => !uc_cart_get_contents(),
-      'collapsible' => $variables['configuration']['collapsible'],
-      'collapsed' => $variables['configuration']['collapsed'],
-    ));
+    $variables['label'] = array(
+      '#theme' => 'uc_cart_block_title',
+      '#title' => $variables['label'],
+      '#show_icon' => $variables['configuration']['show_image'],
+      '#cart_empty' => !uc_cart_get_contents(),
+      '#collapsible' => $variables['configuration']['collapsible'],
+      '#collapsed' => $variables['configuration']['collapsed'],
+    );
   }
 }
 
diff --git a/uc_cart/uc_cart.theme.inc b/uc_cart/uc_cart.theme.inc
index 28294be..0537014 100644
--- a/uc_cart/uc_cart.theme.inc
+++ b/uc_cart/uc_cart.theme.inc
@@ -75,7 +75,7 @@ function theme_uc_cart_review_table($variables) {
 
   // Set up table header.
   $header = array(
-    array('data' => theme('uc_qty_label'), 'class' => array('qty')),
+    array('data' => array('#theme' => 'uc_qty_label'), 'class' => array('qty')),
     array('data' => t('Products'), 'class' => array('products')),
     array('data' => t('Price'), 'class' => array('price')),
   );
@@ -115,7 +115,14 @@ function theme_uc_cart_review_table($variables) {
     );
   }
 
-  return theme('table', array('header' => $header, 'rows' => $rows, 'attributes' => array('class' => array('cart-review'))));
+  $table = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#attributes' => array('class' => array('cart-review')),
+  );
+
+  return drupal_render($table);
 }
 
 /**
@@ -147,27 +154,25 @@ function theme_uc_cart_checkout_review($variables) {
     $output .= '<tr class="pane-title-row">';
     $output .= '<td colspan="2">' . $title . '</td>';
     $output .= '</tr>';
-    if (is_array($data)) {
-      foreach ($data as $row) {
-        if (is_array($row)) {
-          if (isset($row['border'])) {
-            $border = ' class="row-border-' . $row['border'] . '"';
-          }
-          else {
-            $border = '';
-          }
-          $output .= '<tr' . $border . '>';
-          $output .= '<td class="title-col">' . $row['title'] . ':</td>';
-          $output .= '<td class="data-col">' . $row['data'] . '</td>';
-          $output .= '</tr>';
+    foreach ($data as $row) {
+      if (isset($row['data'])) {
+        if (is_array($row['data'])) {
+          $row['data'] = drupal_render($row['data']);
+        }
+        if (isset($row['border'])) {
+          $border = ' class="row-border-' . $row['border'] . '"';
         }
         else {
-          $output .= '<tr><td colspan="2">' . $row . '</td></tr>';
+          $border = '';
         }
+        $output .= '<tr' . $border . '>';
+        $output .= '<td class="title-col">' . $row['title'] . ':</td>';
+        $output .= '<td class="data-col">' . $row['data'] . '</td>';
+        $output .= '</tr>';
+      }
+      else {
+        $output .= '<tr><td colspan="2">' . drupal_render($row) . '</td></tr>';
       }
-    }
-    else {
-      $output .= '<tr><td colspan="2">' . $data . '</td></tr>';
     }
   }
 
diff --git a/uc_cart_links/lib/Drupal/uc_cart_links/Tests/CartLinksTest.php b/uc_cart_links/lib/Drupal/uc_cart_links/Tests/CartLinksTest.php
index 7774b3e..944269c 100644
--- a/uc_cart_links/lib/Drupal/uc_cart_links/Tests/CartLinksTest.php
+++ b/uc_cart_links/lib/Drupal/uc_cart_links/Tests/CartLinksTest.php
@@ -679,10 +679,14 @@ class CartLinksTest extends UbercartTestBase {
    *   Array of Cart Links to appear on page.
    */
   protected function createCartLinksPage($links = array()) {
+    $item_list = array(
+      '#theme' => 'links',
+      '#links' => array(),
+    );
     if (!empty($links)) {
       $i = 0;
       foreach ($links as $link) {
-        $body['links'][] = array(
+        $item_list['#links'][] = array(
           'title' => t('Cart Link #@num', array('@num' => $i++)),
           'href' => $link,
         );
@@ -693,7 +697,7 @@ class CartLinksTest extends UbercartTestBase {
       'type' => 'page',  // This is default anyway ...
       'body' => array(
         0 => array(
-          'value' => isset($body) ? theme('links', $body) : $this->randomName(128),
+          'value' => !empty($links) ? drupal_render($item_list) : $this->randomName(128),
           'format' => 'full_html',
         )
       ),
diff --git a/uc_catalog/uc_catalog.module b/uc_catalog/uc_catalog.module
index 921b12a..0788de8 100644
--- a/uc_catalog/uc_catalog.module
+++ b/uc_catalog/uc_catalog.module
@@ -323,7 +323,7 @@ function uc_catalog_add_node_type($type) {
 
   $field = field_info_field('node', 'taxonomy_catalog');
   if (!$field) {
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => 'node',
       'name' => 'taxonomy_catalog',
       'type' => 'taxonomy_term_reference',
@@ -342,7 +342,7 @@ function uc_catalog_add_node_type($type) {
 
   $instance = field_info_instance('node', 'taxonomy_catalog', $type);
   if (!$instance) {
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'taxonomy_catalog',
       'entity_type' => 'node',
       'bundle' => $type,
@@ -369,7 +369,7 @@ function uc_catalog_add_image_field() {
   $field = field_info_field('taxonomy_term', 'uc_catalog_image');
 
   if (!$field) {
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => 'taxonomy_term',
       'name' => 'uc_catalog_image',
       'type' => 'image',
@@ -381,7 +381,7 @@ function uc_catalog_add_image_field() {
 
   // Only add the instance if it doesn't exist. Don't overwrite any changes.
   if (!$instance) {
-    $instance = entity_create('field_instance', array(
+    $instance = entity_create('field_instance_config', array(
       'field_name' => 'uc_catalog_image',
       'entity_type' => 'taxonomy_term',
       'bundle' => 'catalog',
diff --git a/uc_order/lib/Drupal/uc_order/Entity/OrderStatus.php b/uc_order/lib/Drupal/uc_order/Entity/OrderStatus.php
index 8bfb9bd..1c33a90 100644
--- a/uc_order/lib/Drupal/uc_order/Entity/OrderStatus.php
+++ b/uc_order/lib/Drupal/uc_order/Entity/OrderStatus.php
@@ -13,12 +13,9 @@ use Drupal\Core\Entity\EntityStorageControllerInterface;
 /**
  * Defines the order status entity.
  *
- * @EntityType(
+ * @ConfigEntityType(
  *   id = "uc_order_status",
  *   label = @Translation("Order status"),
- *   controllers = {
- *     "storage" = "Drupal\Core\Config\Entity\ConfigStorageController",
- *   },
  *   admin_permission = "administer order workflow",
  *   config_prefix = "uc_order.status",
  *   entity_keys = {
diff --git a/uc_order/lib/Drupal/uc_order/Entity/UcOrder.php b/uc_order/lib/Drupal/uc_order/Entity/UcOrder.php
index efedb1f..85233c3 100644
--- a/uc_order/lib/Drupal/uc_order/Entity/UcOrder.php
+++ b/uc_order/lib/Drupal/uc_order/Entity/UcOrder.php
@@ -375,11 +375,16 @@ class UcOrder extends ContentEntityBase implements UcOrderInterface {
         }
       }
 
+      $item_list = array(
+        '#theme' => 'item_list',
+        '#items' => $items,
+      );
+
       db_insert('uc_order_log')
         ->fields(array(
           'order_id' => $this->id(),
           'uid' => $user->id(),
-          'changes' => theme('item_list', array('items' => $items)),
+          'changes' => drupal_render($item_list),
           'created' => REQUEST_TIME,
         ))
         ->execute();
diff --git a/uc_order/uc_order.module b/uc_order/uc_order.module
index 0d34b25..4c0f3c1 100644
--- a/uc_order/uc_order.module
+++ b/uc_order/uc_order.module
@@ -850,13 +850,16 @@ function template_preprocess_uc_order_invoice(&$variables) {
         $variables['products'][$id]->individual_price = '';
       }
 
-      $variables['products'][$id]->details = '';
+      $variables['products'][$id]->details = array();
       if (!empty($product->data['attributes'])) {
         $attributes = array();
         foreach ($product->data['attributes'] as $attribute => $option) {
           $attributes[] = t('@attribute: @options', array('@attribute' => $attribute, '@options' => implode(', ', (array)$option)));
         }
-        $variables['products'][$id]->details .= theme('item_list', array('items' => $attributes));
+        $variables['products'][$id]->details = array(
+          '#theme' => 'item_list',
+          '#items' => $attributes,
+        );
       }
     }
   }
diff --git a/uc_order/uc_order.order_pane.inc b/uc_order/uc_order.order_pane.inc
index 7954374..4ec0f37 100644
--- a/uc_order/uc_order.order_pane.inc
+++ b/uc_order/uc_order.order_pane.inc
@@ -200,7 +200,7 @@ function uc_order_pane_products($op, $order, &$form = NULL, &$form_state = NULL)
         '#attributes' => array('class' => array('order-pane-table')),
         '#header' => array(
           'qty' => array(
-            'data' => theme('uc_qty_label'),
+            'data' => t('Quantity'),
             'class' => array('qty'),
           ),
           'product' => array(
@@ -388,7 +388,7 @@ function uc_order_add_product_form($form, &$form_state, $order, $node) {
   );
   $form['qty'] = array(
     '#type' => 'uc_quantity',
-    '#title' => theme('uc_qty_label'),
+    '#title' => t('Quantity'),
     '#default_value' => 1,
   );
   $form['actions'] = array('#type' => 'actions');
@@ -428,7 +428,7 @@ function uc_order_edit_products_form($form, &$form_state, $products) {
   $form['products'] = array(
     '#type' => 'table',
     '#tree' => TRUE,
-    '#header' => array(t('Remove'), theme('uc_qty_label'), t('Name'), t('SKU'), t('Weight'), t('Units'), t('Cost'), t('Price')),
+    '#header' => array(t('Remove'), t('Quantity'), t('Name'), t('SKU'), t('Weight'), t('Units'), t('Cost'), t('Price')),
     '#attributes' => array('id' => 'order-edit-products', 'class' => array('order-pane-table')),
     '#empty' => t('This order contains no products.'),
   );
@@ -455,7 +455,7 @@ function uc_order_edit_products_form($form, &$form_state, $products) {
     );
     $form['products'][$i]['qty'] = array(
       '#type' => 'uc_quantity',
-      '#title' => theme('uc_qty_label'),
+      '#title' => t('Quantity'),
       '#title_display' => 'invisible',
       '#default_value' => $product->qty->value,
     );
@@ -650,12 +650,12 @@ function uc_order_edit_products_remove($form, &$form_state) {
 function uc_order_pane_products_ajax_callback($form, &$form_state) {
   $response = new AjaxResponse();
   $response->addCommand(new ReplaceCommand('#product-controls', trim(drupal_render($form['product_controls']))));
-  $response->addCommand(new PrependCommand('#product-controls', trim(theme('status_messages'))));
+  $status_messages = array('#theme' => 'status_messages');
+  $response->addCommand(new PrependCommand('#product-controls', drupal_render($status_messages)));
 
   if (isset($form_state['refresh_products']) && $form_state['refresh_products']) {
     $response->addCommand(new ReplaceCommand('#order-edit-products', trim(drupal_render($form['products']))));
     $response->addCommand(new ReplaceCommand('#order-line-items', trim(drupal_render($form['line_items']))));
-    $response->addCommand(new PrependCommand('#order-edit-products', trim(theme('status_messages'))));
   }
 
   // Remove the field so we only refresh the admin comments item-list.
@@ -888,7 +888,8 @@ function uc_order_pane_line_items_remove($form, &$form_state) {
 function uc_order_pane_line_items_update($form, &$form_state) {
   $response = new AjaxResponse();
   $response->addCommand(new ReplaceCommand('#order-line-items', trim(drupal_render($form['line_items']))));
-  $response->addCommand(new PrependCommand('#order-line-items', theme('status_messages')));
+  $status_messages = array('#theme' => 'status_messages');
+  $response->addCommand(new PrependCommand('#order-line-items', drupal_render($status_messages)));
 
   return $response;
 }
@@ -918,8 +919,8 @@ function uc_order_pane_order_comments($op, $order, &$form = NULL, &$form_state =
         $icon = $comment->notified ? 'true-icon.gif' : 'false-icon.gif';
         $build['#rows'][] = array(
           array('data' => format_date($comment->created, 'short'), 'class' => array('date')),
-          array('data' => theme('uc_uid', array('uid' => $comment->uid)), 'class' => array('user')),
-          array('data' => theme('image', array('uri' => drupal_get_path('module', 'uc_order') . '/images/' . $icon)), 'class' => array('notified')),
+          array('data' => array('#theme' => 'uc_uid', '#uid' => $comment->uid), 'class' => array('user')),
+          array('data' => array('#theme' => 'image', '#uri' => drupal_get_path('module', 'uc_order') . '/images/' . $icon), 'class' => array('notified')),
           array('data' => check_plain($statuses[$comment->order_status]->name), 'class' => array('status')),
           array('data' => check_plain($comment->message), 'class' => array('message')),
         );
@@ -976,7 +977,7 @@ function uc_order_pane_admin_comments($op, $order, &$form = NULL, &$form_state =
       foreach ($comments as $comment) {
         $build['#rows'][] = array(
           array('data' => format_date($comment->created, 'short'), 'class' => array('date')),
-          array('data' => theme('uc_uid', array('uid' => $comment->uid)), 'class' => array('user')),
+          array('data' => array('#theme' => 'uc_uid', '#uid' => $comment->uid), 'class' => array('user')),
           array('data' => filter_xss_admin($comment->message), 'class' => array('message')),
         );
       }
@@ -996,16 +997,22 @@ function uc_order_pane_admin_comments($op, $order, &$form = NULL, &$form_state =
       return $form;
 
     case 'edit-theme':
+      $items = array();
       $comments = uc_order_comments_load($form['order_id']['#value'], TRUE);
-      if (is_array($comments) && count($comments) > 0) {
-        foreach ($comments as $comment) {
-          $items[] = '[' . theme('uc_uid', array('uid' => $comment->uid)) . '] ' . filter_xss_admin($comment->message);
-        }
-      }
-      else {
-        $items = array(t('No admin comments have been entered for this order.'));
+      foreach ($comments as $comment) {
+        $username = array(
+          '#theme' => 'uc_uid',
+          '#uid' => $comment->uid,
+        );
+        $items[] = '[' . drupal_render($username) . '] ' . filter_xss_admin($comment->message);
       }
-      $output = theme('item_list', array('items' => $items)) . drupal_render($form['admin_comment_field']);
+      $item_list = array(
+        '#theme' => 'item_list',
+        '#items' => $items,
+        '#empty' => t('No admin comments have been entered for this order.'),
+      );
+      $output = drupal_render($item_list);
+      $output .= drupal_render($form['admin_comment_field']);
       return $output;
 
     case 'edit-process':
diff --git a/uc_order/uc_order.rules.inc b/uc_order/uc_order.rules.inc
index c4c6d43..5769523 100644
--- a/uc_order/uc_order.rules.inc
+++ b/uc_order/uc_order.rules.inc
@@ -770,7 +770,13 @@ function uc_order_action_email_invoice($order, $from, $addresses, $subject, $tem
     }
   }
 
-  $settings['message'] = theme('uc_order_invoice', array('order' => $order, 'op' => $settings['view'], 'template' => $settings['template']));
+  $message = array(
+    '#theme' => 'uc_order_invoice',
+    '#order' => $order,
+    '#op' => $settings['view'],
+    '#template' => $settings['template'],
+  );
+  $settings['message'] = drupal_render($message);
 
   foreach ($recipients as $email) {
     $sent = drupal_mail('uc_order', 'action-mail', $email, uc_store_mail_recipient_langcode($email), $settings, $from);
diff --git a/uc_order/uc_order.tokens.inc b/uc_order/uc_order.tokens.inc
index aabe2a8..f968ee3 100644
--- a/uc_order/uc_order.tokens.inc
+++ b/uc_order/uc_order.tokens.inc
@@ -298,7 +298,11 @@ function uc_order_tokens($type, $tokens, $data = array(), $options = array()) {
         case 'products':
           $products = array();
           foreach ($order->products as $product) {
-            $products[] = theme('uc_qty', array('qty' => $product->qty->value)) . ' ' . $product->title->value;
+            $qty = array(
+              '#theme' => 'uc_qty',
+              '#qty' => $product->qty->value,
+            );
+            $products[] = drupal_render($qty) . ' ' . $product->title->value;
           }
           if ($sanitize) {
             $products = array_map('check_plain', $products);
diff --git a/uc_product/uc_product.module b/uc_product/uc_product.module
index 0932a69..2336b2d 100644
--- a/uc_product/uc_product.module
+++ b/uc_product/uc_product.module
@@ -847,11 +847,8 @@ function uc_product_uc_store_status() {
   }
   else {
     $status = 'warning';
-    $description = t('<a href="!url">Click here</a> to automatically configure the following items for core image support:', array('!url' => url('admin/store/settings/products/defaults')));
-
-    $items[] = t('The Image file field has not been created for products.');
-
-    $description .= theme('item_list', array('items' => $items)) . t('(This action is not required and should not be taken if you do not need images or have implemented your own image support.)');
+    $description = t('<a href="!url">Click here</a> to automatically configure core image support.', array('!url' => url('admin/store/settings/products/defaults')))
+      . ' ' . t('(This action is not required and should not be taken if you do not need images or have implemented your own image support.)');
   }
 
   return array(array('status' => $status, 'title' => t('Images'), 'desc' => $description));
@@ -1278,7 +1275,7 @@ function uc_product_add_default_image_field($type = NULL) {
 
   // Set up field if it doesn't exist.
   if (!$field) {
-    $field = entity_create('field_entity', array(
+    $field = entity_create('field_config', array(
       'entity_type' => 'node',
       'name' => 'uc_product_image',
       'type' => 'image',
@@ -1315,7 +1312,7 @@ function uc_product_add_default_image_field($type = NULL) {
 
     // Only add the instance if it doesn't exist. Don't overwrite any changes.
     if (!$instance) {
-      $instance = entity_create('field_instance', $new_instance);
+      $instance = entity_create('field_instance_config', $new_instance);
       $instance->save();
 
       \Drupal::config('node.type.' . $type)
diff --git a/uc_product/uc_product.theme.inc b/uc_product/uc_product.theme.inc
index e4c346f..4906af0 100644
--- a/uc_product/uc_product.theme.inc
+++ b/uc_product/uc_product.theme.inc
@@ -56,11 +56,14 @@ function theme_uc_product_price($variables) {
   if ($label) {
     $output .= '<span class="uc-price-label">' . $label . '</span> ';
   }
-  $vars = array('price' => $price);
+  $vars = array(
+    '#theme' => 'uc_price',
+    '#price' => $price,
+  );
   if (!empty($element['#suffixes'])) {
-    $vars['suffixes'] = $element['#suffixes'];
+    $vars['#suffixes'] = $element['#suffixes'];
   }
-  $output .= theme('uc_price', $vars);
+  $output .= drupal_render($vars);
   $output .= drupal_render_children($element);
   $output .= '</div>';
 
diff --git a/uc_product_kit/uc_product_kit.module b/uc_product_kit/uc_product_kit.module
index 62b30df..1ca4435 100644
--- a/uc_product_kit/uc_product_kit.module
+++ b/uc_product_kit/uc_product_kit.module
@@ -514,7 +514,7 @@ function uc_product_kit_module_implements_alter(&$implementations, $hook) {
 function uc_product_kit_theme() {
   return array(
     'uc_product_kit_list_item' => array(
-      'arguments' => array('product' => NULL),
+      'variables' => array('product' => NULL),
       'file' => 'uc_product_kit.theme.inc',
     ),
   );
@@ -724,7 +724,10 @@ function uc_product_kit_node_view(EntityInterface $node, EntityViewDisplay $disp
     $i = 0;
     foreach ($node->products as $product) {
       $node->content['products'][$product->id()]['qty'] = array(
-        '#markup' => '<div class="product-qty">' . theme('uc_product_kit_list_item', array('product' => $product)) . '</div>',
+        '#theme' => 'uc_product_kit_list_item',
+        '#product' => $product,
+        '#prefix' => '<div class="product-qty">',
+        '#suffix' => '</div>',
       );
       $node->content['products'][$product->id()]['#weight'] = $i++;
     }
@@ -964,12 +967,12 @@ function uc_product_kit_uc_cart_display($item) {
                                   // render-array to be the kit itself.
       $elements[$unique_id] = $element;
     }
-    // Add product specific information.
-    $extra = uc_product_get_description($item);
 
     if ($kit->mutable == UC_PRODUCT_KIT_UNMUTABLE_WITH_LIST) {
       $elements[$unique_id]['#extra'][] = array(
-        '#markup' => theme('uc_product_kit_list_item', array('product' => $item)) . $extra,
+        '#theme' => 'uc_product_kit_list_item',
+        '#product' => $item,
+        '#suffix' => uc_product_get_description($item),
         '#wrapper_attributes' => array(
           'class' => array('kit-component-cart-desc'),
         ),
@@ -995,7 +998,13 @@ function uc_product_kit_uc_cart_display($item) {
     if ($done) {
       $elements[$unique_id]['data'] = array('#type' => 'value', '#value' => serialize($elements[$unique_id]['data']));
       if ($kit->mutable == UC_PRODUCT_KIT_UNMUTABLE_WITH_LIST) {
-        $elements[$unique_id]['description']['#markup'] .= theme('item_list', array('items' => $elements[$unique_id]['#extra'], 'attributes' => array('class' => array('product-description'))));
+        $elements[$unique_id]['description'] = array(
+          '#theme' => 'item_list',
+          '#items' => $elements[$unique_id]['#extra'],
+          '#attributes' => array(
+            'class' => array('product-description'),
+          ),
+        );
       }
       $element = $elements[$unique_id];
       unset($products[$unique_id]);
diff --git a/uc_product_kit/uc_product_kit.theme.inc b/uc_product_kit/uc_product_kit.theme.inc
index c2d7483..cec200f 100644
--- a/uc_product_kit/uc_product_kit.theme.inc
+++ b/uc_product_kit/uc_product_kit.theme.inc
@@ -36,5 +36,9 @@ function theme_uc_product_kit_list_item($variables) {
     $qty = $product->qty->value;
   }
 
-  return theme('uc_qty', array('qty' => $qty)) . ' ' . $title;
+  $build = array(
+    '#theme' => 'uc_qty',
+    '#qty' => $qty,
+  );
+  return drupal_render($build) . ' ' . $title;
 }
diff --git a/uc_store/includes/uc_ajax_attach.inc b/uc_store/includes/uc_ajax_attach.inc
index 16f297c..c38d4e0 100644
--- a/uc_store/includes/uc_ajax_attach.inc
+++ b/uc_store/includes/uc_ajax_attach.inc
@@ -174,7 +174,8 @@ function uc_ajax_multiplex($form, $form_state) {
           // Otherwise, assume the callback returned a string or render-array, and insert it into the wrapper.
           $html = is_string($result) ? $result : drupal_render($result);
           $response->addCommand(new ReplaceCommand('#' . $wrapper, trim($html)));
-          $response->addCommand(new PrependCommand('#' . $wrapper, trim(theme('status_messages'))));
+          $status_messages = array('#theme' => 'status_messages');
+          $response->addCommand(new PrependCommand('#' . $wrapper, drupal_render($status_messages)));
         }
       }
     }
diff --git a/uc_store/lib/Drupal/uc_store/Controller/StoreController.php b/uc_store/lib/Drupal/uc_store/Controller/StoreController.php
index 76d30f1..4cd775e 100644
--- a/uc_store/lib/Drupal/uc_store/Controller/StoreController.php
+++ b/uc_store/lib/Drupal/uc_store/Controller/StoreController.php
@@ -124,8 +124,10 @@ class StoreController extends ControllerBase implements ContainerInjectionInterf
           case 'error':   $icon = 'error.gif'; break;
           default:        $icon = 'info.gif';
         }
-        $icon = theme('image', array('uri' => drupal_get_path('module', 'uc_store') . '/images/' . $icon));
-
+        $icon = array(
+          '#theme' => 'image',
+          '#uri' => drupal_get_path('module', 'uc_store') . '/images/' . $icon,
+        );
         $rows[] = array(
           array('data' => $icon, 'class' => array('status-icon')),
           array('data' => $message['title'], 'class' => array('status-title')),
diff --git a/uc_store/uc_store.module b/uc_store/uc_store.module
index 46cb9d9..1668e08 100644
--- a/uc_store/uc_store.module
+++ b/uc_store/uc_store.module
@@ -470,7 +470,11 @@ function uc_store_update_address_field_zones($form, &$form_state) {
  */
 function uc_store_pre_render_address_field($element) {
   if (!empty($element['#required'])) {
-    $element['#title'] = theme('form_required_marker', $element) . ' ' . $element['#title'];
+    $marker = array(
+      '#theme' => 'form_required_marker',
+      '#element' => $element,
+    );
+    $element['#title'] = drupal_render($marker) . ' ' . $element['#title'];
     unset($element['#required']);
   }
   return $element;
diff --git a/uc_store/uc_store.tokens.inc b/uc_store/uc_store.tokens.inc
index fcb56ac..2e77ea3 100644
--- a/uc_store/uc_store.tokens.inc
+++ b/uc_store/uc_store.tokens.inc
@@ -82,7 +82,11 @@ function uc_store_tokens($type, $tokens, $data = array(), $options = array()) {
           // Use a logo; but only if we have one to use.
           $replacements[$original] = '';
           if ($uri = theme_get_setting('logo.url')) {
-            $replacements[$original] = theme('image', array('uri' => $uri));
+            $logo = array(
+              '#theme' => 'image',
+              '#uri' => $uri,
+            );
+            $replacements[$original] = drupal_render($logo);
           }
           break;
       }
