diff --git a/prev_next.module b/prev_next.module
index cc203e2..6d4a196 100644
--- a/prev_next.module
+++ b/prev_next.module
@@ -81,7 +81,6 @@ function prev_next_cron() {
       //_prev_next_modify_pointing_nodes($row->nid);
       _prev_next_add($row->nid);
       // Update nodes that might point to this one.
-      
       // Note that we have indexed at least one node.
       $last_nid = $row->nid;
       $count++;
@@ -332,23 +331,52 @@ function _prev_next_modify_pointing_nodes($nid) {
                     FROM {prev_next_node}
                     WHERE prev_nid = :prev_nid",
                     array(':prev_nid' => $nid))->fetchField();
-  if ($prev) _prev_next_add($prev);
+  if ($prev) {
+    db_update('prev_next_node')
+      ->fields(array(
+        'prev_nid' => 0,
+      ))
+      ->condition('prev_nid', $nid)
+      ->execute();
+
+    _prev_next_add($prev);
+  }
 
   // Then for next
   $next = db_query("SELECT nid
                     FROM {prev_next_node}
                     WHERE next_nid = :next_nid",
                     array(':next_nid' => $nid))->fetchField();
-  // if ($next) _prev_next_add($nid);
-  if ($next) _prev_next_add($next);
+  if ($next) {
+    db_update('prev_next_node')
+      ->fields(array(
+        'next_nid' => 0,
+      ))
+      ->condition('next_nid', $nid)
+      ->execute();
+
+    _prev_next_add($next);
+  }
 }
 
 /**
  * Implements hook_node_insert().
  */
 function prev_next_node_insert($node) {
-  $types = _prev_next_node_types();
-  if (in_array($node->type, $types)) _prev_next_add($node->nid);
+  if ($node->status != NODE_NOT_PUBLISHED) {
+    $types = _prev_next_node_types();
+    if (in_array($node->type, $types)) {
+      _prev_next_add($node->nid);
+
+      // Update previous node's next_nid.
+      $prev_nid = prev_next_nid_prev($node->nid);
+      _prev_next_add($prev_nid);
+
+      // Update next node's prev_nid if there is one.
+      $next_nid = prev_next_nid_next($node->nid);
+      if ($next_nid) _prev_next_add($next_nid);
+    }
+  }
 }
 
 /**
@@ -356,7 +384,22 @@ function prev_next_node_insert($node) {
  */
 function prev_next_node_update($node) {
   $types = _prev_next_node_types();
-  if (in_array($node->type, $types)) _prev_next_modify($node->nid);
+  if (in_array($node->type, $types) || sizeof($types) == 0) {
+    if ($node->status == NODE_NOT_PUBLISHED) {
+      _prev_next_remove($node->nid);
+    }
+    else {
+      _prev_next_modify($node->nid);
+
+      // Update previous node's next_nid.
+      $prev_nid = prev_next_nid_prev($node->nid);
+      _prev_next_modify($prev_nid);
+
+      // Update next node's prev_nid.
+      $next_nid = prev_next_nid_next($node->nid);
+      _prev_next_modify($next_nid);
+    }
+  }
 }
 
 /**
