diff --git uc_product_keys.module uc_product_keys.module
index a5d708b..4b96fd2 100644
--- uc_product_keys.module
+++ uc_product_keys.module
@@ -589,20 +589,12 @@
   switch ($op) {
 
   case 'update':
-
-    $order = $arg1;
-    if (_uc_product_keys_order_ready($order, $arg2)) {
-
-      // To avoid re-issuing keys, we'll check if the order currently has any keys
-
-      $keys = _uc_product_keys_db_get_keys('order', $order);
-
-      // If there are no keys, go ahead and process the order as though placed by a customer
-
-      if (!$keys) {
-	_uc_product_keys_issue_keys_for_order($order, user_load(array('uid' => $order->uid)));
-      }
-    }
+            
+          global $user;
+          if($arg2=='completed'){              
+              _uc_product_keys_issue_keys_for_order($arg1, $user);
+          }
+          
     break;
 
   case 'delete':
@@ -729,6 +721,7 @@
       foreach($errors as $error) {
         drupal_set_message($error, 'error');
       }
+      db_query("UPDATE {uc_orders set order_status ='%s'}","pending");
       $args = array('!order' => $order->order_id);
       watchdog('uc_product_keys', t('Errors obtaining product key(s) for order !order.'), $args, WATCHDOG_ERROR,
 	       l(t('Order !order', $args),'admin/store/orders/'.$order->order_id));
@@ -1210,10 +1203,17 @@
  * @return An array of valid keys.
  */
 function _uc_product_keys_db_assign_keys($product, $user, $order, $order_product) {
+  $limit = 0;
+  
+  $limitObj = db_fetch_object(db_query(
+      "SELECT count(pkid) as assigned FROM {uc_product_keys} WHERE pksid = %s AND status = %d AND order_id = %d",
+      $product->pksid, 1, $order->order_id));
+  $limit = ($limitObj > 0) ? $order_product->qty-$limitObj->assigned : $order_product->qty;
+  $order_product->qty = $limit;
   $result =
     db_query(
       "SELECT * FROM {uc_product_keys} WHERE pksid = %s AND status = %d LIMIT %d",
-      $product->pksid, UC_PRODUCT_KEYS_STATUS_UNASSIGNED, $order_product->qty);
+      $product->pksid, UC_PRODUCT_KEYS_STATUS_UNASSIGNED, $limit);
   if ($result === false) return false;
 
   // Turn the results into objects
