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..1c36912 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' => array('#theme' => 'uc_price', '#price' => $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..4c2d0b8 100644
--- a/payment/uc_payment/uc_payment.module
+++ b/payment/uc_payment/uc_payment.module
@@ -83,7 +83,10 @@ 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'] = array(
+      '#theme' => 'uc_price',
+      '#price' => $line['amount'],
+    );
   }
 }
 
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..42a49bc 100644
--- a/uc_attribute/uc_attribute.module
+++ b/uc_attribute/uc_attribute.module
@@ -1236,10 +1236,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/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/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_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..7fe9522 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' => array('#theme' => 'uc_qty_label'),
             'class' => array('qty'),
           ),
           'product' => array(
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..7deb73b 100644
--- a/uc_product/uc_product.module
+++ b/uc_product/uc_product.module
@@ -1278,7 +1278,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 +1315,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/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;
       }
