diff --git a/payment/uc_credit/tests/uc_credit.test b/payment/uc_credit/tests/uc_credit.test
index 4315cd5..836e88c 100644
--- a/payment/uc_credit/tests/uc_credit.test
+++ b/payment/uc_credit/tests/uc_credit.test
@@ -165,6 +165,8 @@ class UbercartCreditCardTestCase extends UbercartTestHelper {
     $order->line_items = uc_order_load_line_items($order, TRUE);
     uc_order_save($order);
 
+    $order = uc_order_load($order->order_id);
+
     return $order;
   }
 
diff --git a/uc_cart/tests/uc_cart.test b/uc_cart/tests/uc_cart.test
index 05944c9..d4bcb54 100644
--- a/uc_cart/tests/uc_cart.test
+++ b/uc_cart/tests/uc_cart.test
@@ -49,6 +49,8 @@ class UbercartCartCheckoutTestCase extends UbercartTestHelper {
     $order->line_items = uc_order_load_line_items($order, TRUE);
     uc_order_save($order);
 
+    $order = uc_order_load($order->order_id);
+
     return $order;
   }
 
diff --git a/uc_cart/uc_cart_checkout_pane.inc b/uc_cart/uc_cart_checkout_pane.inc
index 81a863d..544beee 100644
--- a/uc_cart/uc_cart_checkout_pane.inc
+++ b/uc_cart/uc_cart_checkout_pane.inc
@@ -556,7 +556,7 @@ function theme_uc_checkout_pane_cart_review($variables) {
     $desc = check_plain($item->title) . uc_product_get_description($item);
 
     $output .= '<tr valign="top"><td>' . $item->qty . '&times;</td><td width="100%">' . $desc
-              . '</td><td nowrap="nowrap">' . theme('uc_price', array('price' => $item->price * $item->qty)) . '</td></tr>';
+              . '</td><td nowrap="nowrap">' . theme('uc_price', array('price' => $item->display_price * $item->qty)) . '</td></tr>';
   }
   $output .= '</table>';
 
diff --git a/uc_order/uc_order.module b/uc_order/uc_order.module
index d3c7c29..2aae263 100644
--- a/uc_order/uc_order.module
+++ b/uc_order/uc_order.module
@@ -1423,6 +1423,8 @@ class UcOrderController extends DrupalDefaultEntityController {
       $result = db_query("SELECT * FROM {uc_order_products} WHERE order_id = :id ORDER BY order_product_id", array(':id' => $order->order_id));
       $order->products = array();
       foreach ($result as $product) {
+        $product->display_price = $product->price;
+        $product->display_price_suffix = '';
         $product->data = unserialize($product->data);
         $product->order_uid = $order->uid;
         $order->products[] = $product;
@@ -1617,7 +1619,7 @@ function uc_order_load_line_items($order) {
  */
 function uc_order_load_line_items_display($order) {
   $temp = clone $order;
-  $line_items = uc_order_load_line_items($order);
+  $line_items = uc_order_load_line_items($temp);
   $temp->line_items = &$line_items;
 
   $items = _uc_line_item_list();
@@ -1940,9 +1942,9 @@ function template_preprocess_uc_order(&$variables) {
 
   $variables['products'] = $order->products;
   foreach ($variables['products'] as &$product) {
-    $product->total_price = uc_currency_format($product->price * $product->qty);
+    $product->total_price = uc_currency_format($product->display_price * $product->qty);
     if ($product->qty > 1) {
-      $product->individual_price = t('(!price each)', array('!price' => uc_currency_format($product->price)));
+      $product->individual_price = t('(!price each)', array('!price' => uc_currency_format($product->display_price)));
     }
     else {
       $product->individual_price = '';
diff --git a/uc_order/uc_order.order_pane.inc b/uc_order/uc_order.order_pane.inc
index 7612880..24f6c7e 100644
--- a/uc_order/uc_order.order_pane.inc
+++ b/uc_order/uc_order.order_pane.inc
@@ -1144,12 +1144,12 @@ function uc_op_products_view_table($order) {
 
       $data['price'] = array(
         '#theme' => 'uc_price',
-        '#price' => $product->price,
+        '#price' => $product->display_price,
         '#cell_attributes' => array('align' => 'right'),
       );
       $data['total'] = array(
         '#theme' => 'uc_price',
-        '#price' => $product->price * $product->qty,
+        '#price' => $product->display_price * $product->qty,
         '#cell_attributes' => array('align' => 'right'),
       );
       $data['#attributes'] = array('valign' => 'top');
@@ -1248,12 +1248,12 @@ function uc_op_products_customer_table($order) {
 
       $data['price'] = array(
         '#theme' => 'uc_price',
-        '#price' => $product->price,
+        '#price' => $product->display_price,
         '#cell_attributes' => array('align' => 'right'),
       );
       $data['total'] = array(
         '#theme' => 'uc_price',
-        '#price' => $product->price * $product->qty,
+        '#price' => $product->display_price * $product->qty,
         '#cell_attributes' => array('align' => 'right'),
       );
       $data['#attributes'] = array('valign' => 'top');
diff --git a/uc_taxes/uc_taxes.module b/uc_taxes/uc_taxes.module
index 7ebabbd..95ad0f6 100644
--- a/uc_taxes/uc_taxes.module
+++ b/uc_taxes/uc_taxes.module
@@ -190,6 +190,28 @@ function uc_taxes_uc_line_item() {
 }
 
 /**
+ * Implements hook_uc_line_item_alter().
+ *
+ * Set the display price of the ordered products, after the line item data has
+ * been loaded.
+ *
+ * @param type $line_item
+ * @param type $order
+ */
+function uc_taxes_uc_line_item_alter(&$line_item, &$order) {
+  if (!empty($line_item['data']['taxed_products'])) {
+    $tax = uc_taxes_rate_load($line_item['data']['tax_id']);
+    if ($tax->display_include && !empty($order->products)) {
+      foreach ($order->products as &$product) {
+        if (in_array($product->order_product_id, $line_item['data']['taxed_products'])) {
+          $product->display_price += $product->price * $line_item['data']['tax_rate'];
+        }
+      }
+    }
+  }
+}
+
+/**
  * Implements hook_uc_order().
  *
  * Updates and saves tax line items to the order.
@@ -558,9 +580,17 @@ function uc_taxes_apply_item_tax($item, $tax) {
 function uc_taxes_apply_tax($order, $tax) {
   $amount = 0;
   $taxable_amount = 0;
+  $taxed_items = array(
+    'products' => array(),
+    'line_items' => array(),
+  );
+
   if (is_array($order->products)) {
     foreach ($order->products as $item) {
       $taxable_amount += uc_taxes_apply_item_tax($item, $tax);
+      if (isset($item->order_product_id)) {
+        $taxed_items['products'][] = $item->order_product_id;
+      }
     }
   }
   $taxed_line_items = $tax->taxed_line_items;
@@ -578,6 +608,9 @@ function uc_taxes_apply_tax($order, $tax) {
         else {
           $taxable_amount += $line_item['amount'];
         }
+        if (isset($line_item['line_item_id'])) {
+          $taxed_items['line_items'][] = $line_item['line_item_id'];
+        }
       }
     }
   }
@@ -601,6 +634,8 @@ function uc_taxes_apply_tax($order, $tax) {
       'tax_rate' => $tax->rate,
       'taxable_amount' => $taxable_amount,
       'tax_jurisdiction' => $tax->name,
+      'taxed_products' => $taxed_items['products'],
+      'taxed_line_items' => $taxed_items['line_items'],
     );
     return $line_item;
   }
