diff --git a/userpoints_nodeaccess.module b/userpoints_nodeaccess.module
index 6a19de1..f67e70b 100644
--- a/userpoints_nodeaccess.module
+++ b/userpoints_nodeaccess.module
@@ -43,7 +43,7 @@ function userpoints_nodeaccess_is_protected($nid) {
 }
 
 function userpoints_nodeaccess_has_access($nid, $uid) {
-  return db_query("SELECT 1 FROM {userpoints_nodeaccess} WHERE nid = :nid AND uid = :uid", array(':nid' => $nid, ':uid' => $uid))->fetchField();
+  return node_load($nid)->uid == $uid || db_query("SELECT 1 FROM {userpoints_nodeaccess} WHERE nid = :nid AND uid = :uid", array(':nid' => $nid, ':uid' => $uid))->fetchField();
 }
 
 /**
@@ -465,3 +465,46 @@ function userpoints_nodeaccess_description_callback($operation, $entity) {
   }
   return t('Gained access to %title.', $arguments);
 }
+
+function userpoints_nodeaccess_entity_delete($entity, $type) {
+  if ($type == 'user' || $type == 'node') {
+    list($id) = entity_extract_ids($type, $entity);
+    db_delete('userpoints_nodeaccess')->condition($type[0] .'id', $id)->execute();
+    if ($type == 'node') {
+      db_delete('userpoints_nodeaccess_points')->condition('nid', $id)->execute();
+    }
+  }
+}
+/**
+ * Implements hook_forms().
+ */
+function userpoints_nodeaccess_forms($form_id, $args) {
+  $forms = array();
+  if (!empty($args) && is_numeric($args[0]) && $form_id == 'userpoints_nodeaccess_trade_access_form_' . $args[0]) {
+    $forms[$form_id]['callback'] = 'userpoints_nodeaccess_trade_access_form';
+  }
+  return $forms;
+}
+
+
+function userpoints_nodeaccess_field_extra_fields() {
+  $extra = array();
+  foreach (node_type_get_types() as $type) {
+    if (variable_get('userpoints_nodeaccess_enabled_' . $type->type, variable_get('userpoints_nodeaccess_enabled', TRUE))) {
+      $map = array(
+        'userpoints_nodeaccess_information' =>  t('Userpoints nodeaccess information'),
+        'userpoints_nodeaccess_form' => t('Userpoints nodeaccess buy form'),
+        'userpoints_nodeaccess_no_access' => t('Userpoints nodeaccess no access'), 
+      );
+      $weight++;
+      foreach ($map as $key => $label) {
+        $extra['node'][$type->type]['display'][$key] = array(
+          'label' => $label,
+          'weight' => $weight++,
+        );
+      }
+    }
+  }
+  return $extra;
+}
+
diff --git a/userpoints_nodeaccess_views/userpoints_nodeaccess_handler_field_buyaccess.inc b/userpoints_nodeaccess_views/userpoints_nodeaccess_handler_field_buyaccess.inc
index 405d11d..d2e8cde 100644
--- a/userpoints_nodeaccess_views/userpoints_nodeaccess_handler_field_buyaccess.inc
+++ b/userpoints_nodeaccess_views/userpoints_nodeaccess_handler_field_buyaccess.inc
@@ -71,6 +71,6 @@ class userpoints_nodeaccess_handler_field_buyaccess extends views_handler_field
       return '<span class="userpoints-nodeaccess userpoints-nodeaccess-needmore">' . t('Need @points more !points', array_merge(userpoints_translation(), array('@points' => $difference)));
     }
 
-    return drupal_render(drupal_get_form('userpoints_nodeaccess_trade_access_form', $nid, $type));
+    return drupal_render(drupal_get_form('userpoints_nodeaccess_trade_access_form_' . $nid, $nid, $type));
   }
 }
