diff --git a/modules/ec_nap/ec_nap.info b/modules/ec_nap/ec_nap.info
index 0fc1f0d..85d3569 100755
--- a/modules/ec_nap/ec_nap.info
+++ b/modules/ec_nap/ec_nap.info
@@ -3,4 +3,10 @@ description = "Integrates Node Access Product with e-Commerce."
 package = "Node Access Product"
 dependencies[] = nap
 dependencies[] = ec_product
-core = 7.x
\ No newline at end of file
+core = 7.x
+; Information added by drupal.org packaging script on 2012-01-15
+version = "7.x-1.x-dev"
+core = "7.x"
+project = "nap"
+datestamp = "1326629850"
+
diff --git a/modules/uc_nap/uc_nap.info b/modules/uc_nap/uc_nap.info
index b6546e5..8fb518c 100755
--- a/modules/uc_nap/uc_nap.info
+++ b/modules/uc_nap/uc_nap.info
@@ -3,4 +3,12 @@ description = "Integrates Node Access Product with Ubercart."
 package = "Node Access Product"
 dependencies[] = nap
 dependencies[] = uc_product
-core = 7.x
\ No newline at end of file
+dependencies[] = uc_order
+dependencies[] = rules
+core = 7.x
+; Information added by drupal.org packaging script on 2012-01-15
+version = "7.x-1.x-dev"
+core = "7.x"
+project = "nap"
+datestamp = "1326629850"
+
diff --git a/modules/uc_nap/uc_nap.module b/modules/uc_nap/uc_nap.module
index 67a35be..deebf36 100755
--- a/modules/uc_nap/uc_nap.module
+++ b/modules/uc_nap/uc_nap.module
@@ -35,9 +35,10 @@ function uc_nap_disable() {
 }
 
 /**
- * Implements hook_order().
+ * Implements hook_uc_order().
  */
-function uc_nap_order($op, $order, $status) {
+function uc_nap_uc_order($op, $order, $status) {
+	
   if ($op == 'update' && $status == 'payment_received') {
 
     if (module_exists("uc_recurring")) {
@@ -76,13 +77,15 @@ function uc_nap_nap_form_is_product($form, $form_state, $form_id) {
   return !empty($form['#node']) ? uc_product_is_product($form['#node']) : FALSE;
 }
 
+
+
 /**
  * Implements hook_nap_save_purchase().
  */
 function uc_nap_nap_save_purchase($nap_purchases, $nap_transaction) {
-  if (module_exists('ca')) {
+  if (module_exists('rules')) {
     $order = uc_order_load($nap_transaction->txn_id);
-    ca_pull_trigger('uc_nap_purchase', $order);
+    rules_invoke_event('uc_nap_purchase', $order);
   }
 }
 
diff --git a/nap.api.php b/nap.api.php
index 71698d4..3e15de1 100644
--- a/nap.api.php
+++ b/nap.api.php
@@ -45,6 +45,6 @@ function hook_nap_handler() {
  * Use this to let this module know that the form passed in is a product form
  * and that nap should add it's bits and pieces.
  */
-function ec_nap_nap_form_is_product($form, $form_state, $form_id) {
+function hook_nap_form_is_product($form, $form_state, $form_id) {
   return ec_product_form_is_product($form_id, $form);
 }
diff --git a/nap.info b/nap.info
index 6712630..4fa1d0b 100755
--- a/nap.info
+++ b/nap.info
@@ -2,4 +2,10 @@ name = Node Access Product
 description = "Node Access Product.  Provides 'Node Access' options for products, whereby a user who completes a purchase of a product is given 'Node Access' to some content.  You must activate 'Node Access Product for e-Commerce' or 'Node Access Product for Ubercart' as well."
 package = "Node Access Product"
 core = 7.x
-dependencies[] = node_access_rebuild_bonus
\ No newline at end of file
+dependencies[] = node_access_rebuild_bonus
+; Information added by drupal.org packaging script on 2012-01-15
+version = "7.x-1.x-dev"
+core = "7.x"
+project = "nap"
+datestamp = "1326629850"
+
diff --git a/nap.module b/nap.module
index fb020c5..e84607f 100755
--- a/nap.module
+++ b/nap.module
@@ -40,6 +40,7 @@ function nap_init() {
       'error'
     );
   }
+
 }
 
 /**
@@ -148,11 +149,12 @@ function nap_list($form_state, $handler) {
         array(
           '!customer' => theme(
             'username',
-            user_load($user_row->uid)
+            (array)user_load($user_row->uid)
           ),
           '!date' => $user_row->purchase_date,
         )
       );
+       
       if (
         $user_row->expiry_date
         && $user_row->expiry_date != '0000-00-00 00:00:00'
@@ -744,19 +746,39 @@ function nap_form_alter(&$form, &$form_state, $form_id) {
   }
 }
 
+
+
 /**
- * Implements hook_nodeapi().
+ * Implements hook_node_update().
+ */
+function nap_node_update($node) {
+  if (
+      isset($node->nap_nodes)
+      || isset($node->nap_categories)
+      || isset($node->nap_view)
+  ) {
+  
+  nap_save(
+          $node->nid,
+          $node->vid,
+          $node->nap_nodes,
+          $node->nap_categories,
+          $node->nap_view,
+          $node->nap_view_args
+        );
+  }
+}
 
-function nap_nodeapi(&$node, $op, $teaser_or_form = NULL, $page = NULL) {
+/**
+ * Implements hook_node_insert().
+ */
+function nap_node_insert($node) {
   if (
       isset($node->nap_nodes)
       || isset($node->nap_categories)
       || isset($node->nap_view)
-    ) {
-    switch ($op) {
-      case 'update':
-      case 'insert':
-        nap_save(
+  ) {
+  nap_save(
           $node->nid,
           $node->vid,
           $node->nap_nodes,
@@ -764,21 +786,32 @@ function nap_nodeapi(&$node, $op, $teaser_or_form = NULL, $page = NULL) {
           $node->nap_view,
           $node->nap_view_args
         );
-        break;
-      case 'delete':
-        // Update the nap table with no entries.
-        nap_save($node->nid, $node->vid);
-        nap_create_update_queue(nap_get_grants($node->nid));
-        break;
-    }
   }
-} */
+}
+
+/**
+ * Implements hook_node_delete().
+ */
+function nap_node_delete($node) {
+  if (
+      isset($node->nap_nodes)
+      || isset($node->nap_categories)
+      || isset($node->nap_view)
+  ) {
+  // Update the nap table with no entries.
+  nap_save($node->nid, $node->vid);
+  nap_create_update_queue(nap_get_grants($node->nid));
+  }
+}
+
 
 /**
  * Implements hook_node_grants().
  */
 function nap_node_grants($account, $op) {
   $grants = array();
+  
+  
   if ($op == 'view') {
 
     $sql = "
@@ -894,7 +927,7 @@ function nap_cron() {
     WHERE entry_date < :now
     ORDER BY nid, entry_date DESC", array(':now' => $now));
   foreach ($max_result as $max_entry) {
-    if ($max_entry['nid'] != $last_node_id) {
+    if ($max_entry->nid != $last_node_id) {
       $last_node_id = $max_entry->nid;
       array_push($safe_entry_ids, $max_entry->entry_id);
     }
@@ -926,6 +959,7 @@ function nap_cron() {
  *   String of view arguments entered by node author.
  */
 function nap_save($nid, $vid, $nodes = array(), $categories = array(), $view = NULL, $view_args = NULL) {
+	
   if ($categories) {
     // Strip NULL/empty/FALSE values.
     $categories = array_filter($categories);
@@ -1162,7 +1196,7 @@ function nap_get_nids_from_tids($tids) {
     }
     // Term ID needs to be in $categories.
     $results = db_query(
-      "SELECT nid FROM {taxonomy_index} WHERE tid IN :cats",
+      "SELECT nid FROM {taxonomy_index} WHERE tid IN ( :cats )",
       array(':cats' => $categories)
     );
     foreach ($results as $nid_list) {
@@ -1448,7 +1482,7 @@ function nap_notify($op, $module) {
                     '!settings' => url(
                       $handlers[$module]['settings path'] . '/nap'
                     ),
-                    '!access' => url('admin/user/permissions'),
+                    '!access' => url('admin/people/permissions'),
                   )
                 )
                 . "</p>";
@@ -1478,6 +1512,10 @@ function nap_save_purchase($txn_id, $uid, $product_nodes, $purchase_date = NULL)
   for ($i = 0; $i < count($product_nodes); $i++) {
     // Easy referencing.
     $node = &$product_nodes[$i];
+    
+    if (!isset($node->nid)) 
+      continue;
+    
     $settings = nap_get_nap_settings($node->nid);
     if ($settings) {
 
@@ -1486,16 +1524,27 @@ function nap_save_purchase($txn_id, $uid, $product_nodes, $purchase_date = NULL)
         $loaded_node = node_load($node->nid);
         $node->vid = $loaded_node->vid;
       }
-
+      $expiry_date = (isset($node->nap_recurring_date) && $node->nap_recurring_date != 0)? $node->nap_recurring_date : NULL;
       $nap_purchase = (object)array(
         'txn_id' => $txn_id,
         'product_nid' => $node->nid,
         'product_vid' => $node->vid,
-        'expiry_date' => $node->nap_recurring_date,
+        'expiry_date' => $expiry_date,
       );
       $nap_purchases[] = $nap_purchase;
 
-      drupal_write_record('nap_purchases', $nap_purchase);
+      //drupal_write_record('nap_purchases', $nap_purchase);
+      
+      db_merge('nap_purchases')
+        ->key(array('txn_id' => $nap_purchase->txn_id,
+                    'product_nid' => $nap_purchase->product_nid))
+        ->fields(array(
+          'txn_id' => $nap_purchase->txn_id,
+          'product_nid' => $nap_purchase->product_nid,
+          'product_vid' => $nap_purchase->product_vid,
+          'expiry_date' => $nap_purchase->expiry_date,          
+        ))
+        ->execute();
 
     }
   }
@@ -1511,7 +1560,15 @@ function nap_save_purchase($txn_id, $uid, $product_nodes, $purchase_date = NULL)
       'purchase_date' => strftime('%Y-%m-%d %H:%M:%S', $purchase_date),
     );
 
-    drupal_write_record('nap_transactions', $nap_transaction);
+    
+    db_merge('nap_transactions')
+      ->key(array('txn_id' => $nap_transaction->txn_id))
+        ->fields(array(
+          'txn_id' => $nap_transaction->txn_id,
+          'uid' => $nap_transaction->uid,
+          'purchase_date' => $nap_transaction->purchase_date,                 
+        ))
+        ->execute();
 
     // Allow other modules to perform tasks based on this event/information.
     module_invoke_all('nap_save_purchase', $nap_purchases, $nap_transaction);
