diff --git a/uc_taxes/uc_taxes.admin.inc b/uc_taxes/uc_taxes.admin.inc
index bdf930f..21fab0f 100644
--- a/uc_taxes/uc_taxes.admin.inc
+++ b/uc_taxes/uc_taxes.admin.inc
@@ -43,10 +43,29 @@ function uc_taxes_admin_settings() {
     '#rows' => $rows,
   );
 
+  $build['settings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Global Tax Settings'),
+  );
+  $build['settings']['content'] = drupal_get_form('uc_taxes_admin_settings_form');
+
   return $build;
 }
 
 /**
+ * Builds a form for administrative settings.
+ */
+function uc_taxes_admin_settings_form($form, &$form_state) {
+  $form['uc_taxes_line_item_adjustment'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Allow per line-item tax adjustments'),
+    '#description' => t('If some products are taxed at different rates, taxes should not be applied at a flat rate against line items such as discounts.'),
+    '#default_value' => variable_get('uc_taxes_line_item_adjustment', FALSE),
+  );
+  return system_settings_form($form);
+}
+
+/**
  * Builds a form to add or edit a tax rate.
  *
  * @param $rate_id
diff --git a/uc_taxes/uc_taxes.install b/uc_taxes/uc_taxes.install
index b2b2a0c..9f6af82 100644
--- a/uc_taxes/uc_taxes.install
+++ b/uc_taxes/uc_taxes.install
@@ -106,6 +106,13 @@ function uc_taxes_schema() {
 }
 
 /**
+ * Implements hook_uninstall()
+ */
+function uc_taxes_uninstall() {
+  variable_del('uc_taxes_line_item_adjustment');
+}
+
+/**
  * Implements hook_update_last_removed().
  */
 function uc_taxes_update_last_removed() {
diff --git a/uc_taxes/uc_taxes.module b/uc_taxes/uc_taxes.module
index fffa9f0..f35ab21 100644
--- a/uc_taxes/uc_taxes.module
+++ b/uc_taxes/uc_taxes.module
@@ -582,7 +582,13 @@ function uc_taxes_apply_tax($order, $tax) {
         continue;
       }
       if (in_array($line_item['type'], $taxed_line_items)) {
-        $taxable_amount += $line_item['amount'];
+        $callback = _uc_line_item_data($line_item['type'], 'tax_adjustment');
+        if (variable_get('uc_taxes_line_item_adjustment',FALSE) && isset($callback) && function_exists($callback)) {
+          $taxable_amount += $callback($line_item['amount'], $order, $tax);
+        }
+        else {
+          $taxable_amount += $line_item['amount'];
+        }
       }
     }
   }
