diff --git uc_gift_certificate.module uc_gift_certificate.module
index aba9e9b..fbd6d55 100644
--- uc_gift_certificate.module
+++ uc_gift_certificate.module
@@ -688,12 +688,12 @@ function uc_gift_certificate_line_item() {
  */
 function uc_gift_certificate_create_new_certs($order_id) {
   $order = uc_order_load($order_id);
-
+  watchdog("uc_gift_certificate", "<pre>" . print_r($order, TRUE) . '</pre>');
   foreach ($order->products as $product) {
     if ($product->data){
       $data = $product->data;
       // Check if the product is a gift certificate
-      if ($data && $data['attributes'] && isset($data['attributes']["Recipient's Email Address"][0])){
+      if ($data && $data['attributes'] && isset($data['attributes']["Recipient's Email Address"][0]) && !isset($data['attributes']['Certificate Code'][0])){ //ADD: addition to make sure it's not a dupe. http://drupal.org/node/543430
         $data['attributes']['Certificate Code'][0] = '';
         $title = t('@gc_title for order #@order_id', array('@gc_title' => $product->title, '@order_id' => $order_id));
         // Generate a random code and insert the certificate. First delete other certificates for this order_id
@@ -747,39 +747,47 @@ function uc_gift_certificate_update_cert_vals($order_id) {
   }
   else {
     $res = db_fetch_object(db_query("SELECT * FROM {uc_order_line_items} WHERE order_id = %d AND type ='gift_certificate'", $order_id));
-    $line_item_val = - $res->amount;
-
-    $query = db_query("SELECT * FROM {uc_orders} WHERE order_id = %d", $order_id);
-    $res = db_fetch_object($query);
-    $user_id = $res->uid;
-    $order_total = $res->order_total;
-    $deducted = 0;
-
-    $query_gift_certs = db_query("SELECT * FROM {uc_gift_certificates} WHERE user_id  = %d AND value > 0", $user_id);
-
-    while (($cert = db_fetch_object($query_gift_certs)) && $deducted < $line_item_val) {
-      $cert_val = $cert->value;
-
-      $left_to_deduct = $line_item_val - $deducted;
-
-      if ($left_to_deduct <= $cert_val){
-        $deduct_from_cert = $left_to_deduct;
-      }
-      else {
-        $deduct_from_cert = $cert_val;
-      }
+    $li_data = unserialize($res->data);
+    
+    if(!isset($li_data['uc_gift_certificate']['cert_updated']) || !$li_data['uc_gift_certificate']['cert_updated']) { //ADD: flag to see if gift certificates have run already.
+      $li_data = is_array($li_data) ? $li_data : array(); //ADD
+      $li_data['uc_gift_certificate'] = array('cert_updated' => true); //ADD
+      uc_order_update_line_item($res->line_item_id, $res->title, $res->amount, $li_data); //ADD: store new data back into record
+      
+      $line_item_val = - $res->amount;
+
+      $query = db_query("SELECT * FROM {uc_orders} WHERE order_id = %d", $order_id);
+      $res = db_fetch_object($query);
+      $user_id = $res->uid;
+      $order_total = $res->order_total;
+      $deducted = 0;
+
+      $query_gift_certs = db_query("SELECT * FROM {uc_gift_certificates} WHERE user_id  = %d AND value > 0", $user_id);
+
+      while (($cert = db_fetch_object($query_gift_certs)) && $deducted < $line_item_val) {
+        $cert_val = $cert->value;
+
+        $left_to_deduct = $line_item_val - $deducted;
+
+        if ($left_to_deduct <= $cert_val){
+          $deduct_from_cert = $left_to_deduct;
+        }
+        else {
+          $deduct_from_cert = $cert_val;
+        }
 
-      $deducted += $deduct_from_cert;
-      $new_cert_val = $cert_val - $deduct_from_cert;
+        $deducted += $deduct_from_cert;
+        $new_cert_val = $cert_val - $deduct_from_cert;
 
-      if (db_query("UPDATE {uc_gift_certificates} SET value  = %f, order_id = %d WHERE certificate_id = %d", $new_cert_val, $order_id, $cert->certificate_id)) {
-        $user = user_load(array('uid' => $user_id));
+        if (db_query("UPDATE {uc_gift_certificates} SET value  = %f, order_id = %d WHERE certificate_id = %d", $new_cert_val, $order_id, $cert->certificate_id)) {
+          $user = user_load(array('uid' => $user_id));
 
-        //  drupal_set_message('updated cert '.$cert->certificate_id .' to '.$new_cert_val);
+          //  drupal_set_message('updated cert '.$cert->certificate_id .' to '.$new_cert_val);
 
-      }
-      else {
-        drupal_set_message("Error updating gift certificates");
+        }
+        else {
+          drupal_set_message("Error updating gift certificates");
+        }
       }
     }
   }
