diff --git a/uc_taxes/uc_taxes.admin.inc b/uc_taxes/uc_taxes.admin.inc
index 23e2e9b..579d5a4 100644
--- a/uc_taxes/uc_taxes.admin.inc
+++ b/uc_taxes/uc_taxes.admin.inc
@@ -219,15 +219,18 @@ function uc_taxes_clone($rate_id) {
   $rate->name = t('Copy of !name', array('!name' => $rate->name));
   $rate->id = NULL;
 
-  // Save the new rate.
-  $rate = uc_taxes_rate_save($rate);
+  // Save the new rate without clearing the Rules cache.
+  $rate = uc_taxes_rate_save($rate, FALSE);
 
   // Clone the associated conditions as well.
   if ($conditions = rules_config_load('uc_taxes_' . $rate_id)) {
-    unset($conditions->id);
+    $conditions->id = NULL;
+    $conditions->name = '';
     $conditions->save('uc_taxes_' . $rate->id);
   }
 
+  entity_flush_caches();
+
   // Display a message and redirect back to the overview.
   drupal_set_message(t('Tax rate %name cloned.', array('%name' => $name)));
 
diff --git a/uc_taxes/uc_taxes.module b/uc_taxes/uc_taxes.module
index e016a18..5cdaed9 100644
--- a/uc_taxes/uc_taxes.module
+++ b/uc_taxes/uc_taxes.module
@@ -325,11 +325,13 @@ function uc_line_item_tax_subtotal($op, $order) {
  *
  * @param $rate
  *   The tax rate object to be saved.
+ * @param $reset
+ *   If TRUE, resets the Rules cache after saving. Defaults to TRUE.
  *
  * @return
  *   The saved tax rate object including the rate ID for new rates.
  */
-function uc_taxes_rate_save($rate) {
+function uc_taxes_rate_save($rate, $reset = TRUE) {
   // Save it as a new rate if no ID is specified.
   if (!$rate->id) {
     drupal_write_record('uc_taxes', $rate);
@@ -366,8 +368,10 @@ function uc_taxes_rate_save($rate) {
   $p_insert->execute();
   $l_insert->execute();
 
-  // Ensure Rules picks up the new condition.
-  entity_flush_caches();
+  if ($reset) {
+    // Ensure Rules picks up the new condition.
+    entity_flush_caches();
+  }
 
   return $rate;
 }
