diff -Naur exclude_node_title.orig/exclude_node_title.module exclude_node_title.new/exclude_node_title.module
--- exclude_node_title.orig/exclude_node_title.module	2012-02-18 12:24:06.000000000 +0100
+++ exclude_node_title.new/exclude_node_title.module	2012-03-07 17:02:40.808614157 +0100
@@ -76,15 +76,39 @@
 }
 
 /**
+ * Remove exclude_node_title flag for the given node.
+ */
+function exclude_node_title_clear_flag($node) {
+  $exclude_list = variable_get('exclude_node_title_nid_list', array());
+  $is_excluded = array_search($node->nid, $exclude_list);
+  if ($is_excluded !== FALSE) {
+    unset($exclude_list[$is_excluded]);
+    variable_set('exclude_node_title_nid_list', $exclude_list);
+  }
+}
+
+/**
+ * Set exclude_node_title flag for the given node.
+ */
+function exclude_node_title_set_flag($node) {
+  $exclude_list = variable_get('exclude_node_title_nid_list', array());
+  $is_excluded = array_search($node->nid, $exclude_list);
+  if ($is_excluded === FALSE) {
+    $exclude_list[] = $node->nid;
+    variable_set('exclude_node_title_nid_list', $exclude_list);
+  }
+}
+
+/**
  * Implementation of hook_nodeapi().
  */
 function exclude_node_title_nodeapi(&$node, $op) {
-  if ( (variable_get('exclude_node_title_remove_title', 0) == 0 && !(arg(0) == 'comment' && arg(1) == 'reply' && is_numeric(arg(2))))
-          || !user_access('use exclude node title')) {
-    return;
-  }
   switch ($op) {
     case 'view':
+      if ( (variable_get('exclude_node_title_remove_title', 0) == 0 && !(arg(0) == 'comment' && arg(1) == 'reply' && is_numeric(arg(2))))
+              || !user_access('use exclude node title')) {
+        return;
+      }
       if (in_array($node->nid, variable_get('exclude_node_title_nid_list', array()))) {
         $node->title = '';
       }
@@ -94,6 +118,19 @@
           $node->title = '';
         }
       }
+      break;
+    case 'delete':
+      exclude_node_title_clear_flag($node);
+      break;
+    case 'insert':
+    case 'update':
+      if (isset($node->exclude_node_title) &&
+       exclude_node_title_check_perm($node))
+        if ($node->exclude_node_title)
+          exclude_node_title_set_flag($node);
+        else
+          exclude_node_title_clear_flag($node);
+      break;
   }
 }
 
@@ -111,6 +148,18 @@
 }
 
 /**
+ * Check permission to change node title exclusion.
+ */
+function exclude_node_title_check_perm($node) {
+  global $user;
+  if (user_access('exclude any node title'))
+    return TRUE;
+  if (!user_access('exclude own node title'))
+    return FALSE;
+  return !strcmp($node->name, $user->name);
+}
+
+/**
  * Implementation of hook_form_alter().
  */
 function exclude_node_title_form_alter(&$form, &$form_state, $form_id) {
@@ -118,13 +167,9 @@
 //
 //  }
   if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) {
-    if (!user_access('exclude any node title')) {
-      global $user;
-      if (!user_access('exclude own node title') ||
-              ( user_access('exclude own node title') && strcmp($form['#node']->name, $user->name) ) ) {
-        return FALSE;
-      }
-    }
+    if (!exclude_node_title_check_perm($form['#node']))
+      return FALSE;
+
     $weight = $form['title']['#weight']+0.1;
     $form['exclude_node_title'] = array(
       '#type' => 'checkbox',
@@ -138,27 +183,6 @@
       $form['exclude_node_title']['#disabled'] = TRUE;
       $form['exclude_node_title']['#description'] = t('Title already hidden by content-type in Exclude Node Title !url page.', array('!url' => l(t('settings'), 'admin/settings/exclude_node_title')));
     }
-    $form['#submit'][] = 'exclude_node_title_node_edit_form_submit';
-  }
-}
-
-/**
- * Implementation of hook_form_submit().
- */
-function exclude_node_title_node_edit_form_submit($form, &$form_state) {
-  if (isset($form_state['values']['exclude_node_title']) && isset($form_state['values']['nid'])) {
-    $exclude_list = variable_get('exclude_node_title_nid_list', array());
-    $is_excluded = array_search($form_state['values']['nid'], $exclude_list);
-    if ($form_state['values']['exclude_node_title'] == 1 && $is_excluded === FALSE) {
-      $exclude_list[] = $form_state['values']['nid'];
-      variable_set('exclude_node_title_nid_list', $exclude_list);
-      return;
-    }
-    elseif ($form_state['values']['exclude_node_title'] == 0 && $is_excluded !== FALSE) {
-      unset($exclude_list[$is_excluded]);
-      variable_set('exclude_node_title_nid_list', $exclude_list);
-      return;
-    }
   }
 }
 
@@ -171,4 +195,4 @@
     $exclude_node_title_content_type = variable_get('exclude_node_title_content_type_values', array());
   }
   return $exclude_node_title_content_type;
-}
\ No newline at end of file
+}
