=== modified file 'uc_taxes/uc_taxes.js'
--- uc_taxes/uc_taxes.js	2009-02-12 18:07:59 +0000
+++ uc_taxes/uc_taxes.js	2009-02-19 15:15:26 +0000
@@ -62,10 +62,18 @@
   var order_size = 21;
   var line_item = '';
   var key;
+  var type;
   var i = 0;
   for (key in li_titles) {
     if (key != 'subtotal') {
-      line_item = line_item + 'i:' + i + ';a:3:{s:5:"title";s:' + li_titles[key].bytes() + ':"' + li_titles[key] + '";s:4:"type";s:'+ key.bytes() + ':"'+ key + '";s:6:"amount";d:' + li_values[key] + ';}';
+      temp = key.split('_', 2);
+      if (temp[1] != undefined && temp[1].match(/^\d+$/)) {
+        type = temp[0];
+      }
+      else {
+        type = key;
+      }
+      line_item = line_item + 'i:' + i + ';a:3:{s:5:"title";s:' + li_titles[key].bytes() + ':"' + li_titles[key] + '";s:4:"type";s:'+ type.bytes() + ':"'+ type + '";s:6:"amount";d:' + li_values[key] + ';}';
       i++;
     }
   }
@@ -99,13 +107,13 @@
       dataType: "json",
       success: function(taxes) {
         var key;
-        var render;
+        var render = false;
         var i;
         var j;
         for (j in taxes) {
           key = 'tax_' + taxes[j].id;
           // Check that this tax is a new line item, or updates its amount.
-          if (!li_values[key] || li_values[key] != taxes[j].amount) {
+          if (li_values[key] == undefined || li_values[key] != taxes[j].amount) {
             // The "Subtotal before taxes" line item is not added into the
             // Total line item.
             if (taxes[j].id == 'subtotal') {

=== modified file 'uc_taxes/uc_taxes.module'
--- uc_taxes/uc_taxes.module	2009-02-19 20:44:23 +0000
+++ uc_taxes/uc_taxes.module	2009-02-20 19:17:37 +0000
@@ -148,13 +148,14 @@
       //$arg1->line_items = uc_order_load_line_items($arg1, TRUE);
       if (is_array($arg1->line_items)) {
         //drupal_set_message('<pre>'. var_export($arg1->line_items, TRUE) .'</pre>');
-        foreach ($arg1->line_items as $line) {
+        foreach ($arg1->line_items as $i => $line) {
           if ($line['type'] == 'tax') {
             $delete = TRUE;
             foreach ($line_items as $id => $new_line) {
               if ($new_line['title'] == $line['title']) {
                 if ($new_line['amount'] != $line['amount']) {
                   uc_order_update_line_item($line['line_item_id'], $new_line['title'], $new_line['amount']);
+                  $arg1->line_items[$i]['amount'] = $new_line['amount'];
                   $changes[] = t('Changed %title to %amount.', array('%amount' => uc_currency_format($new_line['amount']), '%title' => $new_line['title']));
                 }
                 unset($line_items[$id]);
@@ -164,6 +165,7 @@
             }
             if ($delete) {
               uc_order_delete_line_item($line['line_item_id']);
+              unset($arg1->line_items[$i]);
               $changes[] = t('Removed %title.', array('%title' => $line['title']));
             }
           }
@@ -172,6 +174,8 @@
       if (is_array($line_items)) {
         foreach ($line_items as $line) {
           uc_order_line_item_add($arg1->order_id, $line['id'], $line['title'], $line['amount'], $line['weight']);
+          $line['type'] = 'tax';
+          $arg1->line_items[] = $line;
           $changes[] = t('Added %amount for %title.', array('%amount' => uc_currency_format($line['amount']), '%title' => $line['title']));
         }
       }
@@ -191,21 +195,6 @@
  */
 function uc_line_item_tax($op, $order) {
   switch ($op) {
-    case 'cart-preview':
-      $taxes = module_invoke_all('calculate_tax', $order);
-      $script = '';
-      foreach ($taxes as $tax) {
-        $script .= "set_line_item('tax_". $tax->id ."', '". $tax->name ."', ". $tax->amount .", + ". variable_get('uc_li_tax_weight', 9) + ($tax->weight / 10) .", 1, false);\n";
-      }
-      if ($script) {
-        drupal_add_js("if (Drupal.jsEnabled) { \$(document).ready(function() {
-          if (window.set_line_item) {
-            ". $script .";
-            render_line_items();
-          }
-        })};", 'inline');
-      }
-      break;
     case 'load':
       $lines = array();
       $taxes = module_invoke_all('calculate_tax', $order);
@@ -387,7 +376,7 @@
   }
   if (is_array($order->line_items)) {
     foreach ($order->line_items as $i => $line) {
-      if (substr($line['type'], 0, 4) == 'tax_' && substr($line['type'], 5) != 'subtotal') {
+      if (substr($line['type'], 0, 3) == 'tax' && substr($line['type'], 4) != '_subtotal') {
         unset($order->line_items[$i]);
       }
     }

