diff --git a/uc_order/uc_order.module b/uc_order/uc_order.module
index 1723ffd..566cc9b 100644
--- a/uc_order/uc_order.module
+++ b/uc_order/uc_order.module
@@ -288,6 +288,17 @@ function uc_order_menu() {
 }
 
 /**
+ * Implements hook_menu_alter().
+ */
+function uc_order_menu_alter(&$items) {
+  // Adjust the Field UI tabs on admin/store/settings/orders.
+  $items['admin/store/settings/orders/products/fields']['title'] = 'Product fields';
+  $items['admin/store/settings/orders/products/fields']['weight'] = 3;
+  // Disable field display settings for ordered products, as we don't use this anywhere (yet).
+  $items['admin/store/settings/orders/products/display']['access callback'] = FALSE;
+}
+
+/**
  * Implements hook_menu_local_tasks_alter().
  */
 function uc_order_menu_local_tasks_alter(&$data, $router_item, $root_path) {
@@ -483,6 +494,9 @@ function uc_order_entity_info() {
       'base table' => 'uc_order_products',
       'controller class' => 'UcOrderProductController',
       'metadata controller class' => 'UcOrderProductMetadataController',
+      'fieldable' => TRUE,
+      'load hook' => 'uc_order_product_load',
+      'module' => 'uc_order',
       'entity keys' => array(
         'id' => 'order_product_id',
         'label' => t('Order product'),
@@ -490,6 +504,10 @@ function uc_order_entity_info() {
       'bundles' => array(
         'uc_order_product' => array(
           'label' => t('Order product'),
+          'admin' => array(
+            'path' => 'admin/store/settings/orders/products',
+            'access arguments' => array('administer store'),
+          ),
         ),
       ),
       'view modes' => array(
@@ -943,9 +961,14 @@ function uc_order_delete($order_id) {
     db_delete('uc_orders')
       ->condition('order_id', $order_id)
       ->execute();
-    db_delete('uc_order_products')
+    $product_ids = db_select('uc_order_products')
+      ->fields('order_product_id')
       ->condition('order_id', $order_id)
-      ->execute();
+      ->execute()
+      ->fetchCol();
+    foreach ($product_ids as $product_id) {
+      uc_order_product_delete($product_id);
+    }
     db_delete('uc_order_comments')
       ->condition('order_id', $order_id)
       ->execute();
@@ -1011,7 +1034,7 @@ function uc_order_product_save($order_id, $product) {
       $product->weight_units = empty($units) ? variable_get('uc_weight_unit', 'lb') : $units;
     }
   }
-  return drupal_write_record('uc_order_products', $product, $key);
+  return entity_save('uc_order_product', $product);
 }
 
 /**
@@ -1035,9 +1058,22 @@ function uc_order_product_delete($order_product_id) {
   // the deleted row, and will be useless.
   module_invoke_all('uc_order_product_delete', $order_product_id);
 
-  db_delete('uc_order_products')
-    ->condition('order_product_id', $order_product_id)
-    ->execute();
+  return entity_delete('uc_order_product', $order_product_id);
+}
+
+/**
+ * Load an ordered product entity.
+ */
+function uc_order_product_load($opid, $reset = FALSE) {
+  $products = uc_order_product_load_multiple(array($opid), array(), $reset);
+  return reset($products);
+}
+
+/**
+* Load multiple ordered products based on certain conditions.
+*/
+function uc_order_product_load_multiple($opids = array(), $conditions = array(), $reset = FALSE) {
+  return entity_load('uc_order_product', $opids, $conditions, $reset);
 }
 
 /**
