diff --git a/exclude_node_title.admin.inc b/exclude_node_title.admin.inc
index db28a32..c1a5a9e 100755
--- a/exclude_node_title.admin.inc
+++ b/exclude_node_title.admin.inc
@@ -34,19 +34,21 @@ function exclude_node_title_admin_settings() {
 
   $form['exclude_node_title_content_type'] = array(
     '#type' => 'fieldset',
-    '#title' => t('Exclude title by content-type'),
-    '#description' => t('Exclude node title of nodes of the following content types.'),
+    '#title' => t('Exclude title by content-types'),
+    '#description' => t('Define title excluding settings for each content type.'),
     '#collapsible' => TRUE,
     '#collapsed' => FALSE,
   );
   
-  $node_types = _node_types_build()->names;  
-  $form['exclude_node_title_content_type']['exclude_node_title_content_type_values'] = array(
-    '#type' => 'checkboxes',
-    '#title' => t('Content-types'),
-    '#default_value' => variable_get('exclude_node_title_content_type_values', array()),
-    '#options' => $node_types,
-  );
+  $node_types = _node_types_build()->names;
+  foreach ($node_types as $node_type => $node_type_label) {
+    $form['exclude_node_title_content_type']['exclude_node_title_content_type_value_' . $node_type] = array(
+      '#type' => 'radios',
+      '#title' => $node_type_label,
+      '#default_value' => variable_get('exclude_node_title_content_type_value_' . $node_type, 'none'),
+      '#options' => array('none' => t('None'), 'all' => t('All nodes'), 'user' => t('User defined nodes')),
+    );
+  }
 
   $form['#submit'][] = 'exclude_node_title_admin_submit';
   return system_settings_form($form);
diff --git a/exclude_node_title.install b/exclude_node_title.install
index c78f698..7ae894c 100755
--- a/exclude_node_title.install
+++ b/exclude_node_title.install
@@ -19,11 +19,33 @@ function exclude_node_title_install() {
 }
 
 /**
+ * Moves content type settings from previous versions.
+ */
+function exclude_node_title_update_7130(&$sandbox) {
+  
+  // Find out which node types are using title excluding
+  foreach (node_load_multiple(variable_get('exclude_node_title_nid_list', array())) as $node) {
+    variable_set('exclude_node_title_content_type_value_' . $node->type, 'user');
+  }
+  
+  // Find out which node types´ titles were completely hidden for all nodes
+  foreach(variable_get('exclude_node_title_content_type_values', array()) as $node_type => $all) {
+    if ($all) variable_set('exclude_node_title_content_type_value_' . $node_type, 'all');
+  }
+  
+  // Delete old variable (before 7.x-1.4)
+  variable_del('exclude_node_title_content_type_values');
+  
+}
+
+/**
  * Implements hook_uninstall().
  */
 function exclude_node_title_uninstall() {
   variable_del('exclude_node_title_nid_list');
   variable_del('exclude_node_title_remove_title');
-  variable_del('exclude_node_title_content_type_values');
   variable_del('exclude_node_title_search');
+  foreach (_node_types_build()->names as $key => $val) {
+    variable_del('exclude_node_title_content_type_value_' . $key);
+  }
 }
diff --git a/exclude_node_title.module b/exclude_node_title.module
index a1b9639..7710af2 100755
--- a/exclude_node_title.module
+++ b/exclude_node_title.module
@@ -49,26 +49,9 @@ function exclude_node_title_menu() {
  */
 function exclude_node_title_preprocess_page(&$vars) {
   if (arg(0) == 'node' && is_numeric(arg(1)) && user_access('use exclude node title')) {
-    if (in_array(arg(1), variable_get('exclude_node_title_nid_list', array()))) {
-      // remove title on a per node id basis
+    if (_exclude_node_title(arg(1))) {
       $vars['title'] = '';
     }
-    else {
-      // remove title on a per node type basis
-      if (isset($vars['node']) && is_object($vars['node'])) {
-        $node_type = $vars['node']->type;
-      }
-      elseif ( is_numeric(arg(1)) ) {
-        $node = node_load(arg(1));
-        $node_type = $node->type;
-        unset($node); // memory cleanup
-      }
-      $exclude_node_title_content_type = variable_get('exclude_node_title_content_type_values', array());
-      if (!empty($exclude_node_title_content_type) && !empty($exclude_node_title_content_type[$node_type])) {
-        $vars['title'] = '';
-      }
-      unset($exclude_node_title_content_type, $node_type); // memory cleanup
-    }
   }
   elseif (arg(0) == 'search' && variable_get('exclude_node_title_search', 0)) {
     $vars['title'] = '';
@@ -80,18 +63,9 @@ function exclude_node_title_preprocess_page(&$vars) {
  */ 
 function exclude_node_title_node_view($node, $view_mode) {
   if (variable_get('exclude_node_title_remove_title', 0) == 1 && user_access('use exclude node title')) {
-    if (in_array($node->nid, variable_get('exclude_node_title_nid_list', array()))) {
+    if (_exclude_node_title($node)) {
       $node->title = '';
     }
-    else {
-      static $exclude_node_title_content_type; // perform static caching of variable
-      if (!isset($exclude_node_title_content_type)) {
-        $exclude_node_title_content_type = variable_get('exclude_node_title_content_type_values', array());
-      }
-      if ($exclude_node_title_content_type[$node->type]) {
-        $node->title = '';
-      }
-    }
   }
 }
 
@@ -100,6 +74,8 @@ function exclude_node_title_node_view($node, $view_mode) {
  */
 function exclude_node_title_form_alter(&$form, &$form_state, $form_id) {
   if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] . '_node_form' == $form_id) {
+    
+    // make sure user have permissions correct
     if (!user_access('exclude any node title')) {
       global $user;
       if (!user_access('exclude own node title') ||
@@ -107,15 +83,21 @@ function exclude_node_title_form_alter(&$form, &$form_state, $form_id) {
         return FALSE;
       }
     }
-    $weight = $form['title']['#weight']+0.1;
-    $form['exclude_node_title'] = array(
-      '#type' => 'checkbox',
-      '#title' => t('Exclude title from display'),
-      '#required' => FALSE,
-      '#default_value' => (!empty($form['nid']['#value']) ? in_array($form['nid']['#value'], variable_get('exclude_node_title_nid_list', array())) : FALSE ),
-      '#weight' => $weight,
-    );
-    $form['#submit'][] = 'exclude_node_title_node_edit_form_submit';
+    
+    // don't bother to add form element if the content type isn't configured
+    // to be excluded by user...
+    if (variable_get('exclude_node_title_content_type_value_' . $form['#node']->type) == 'user') {
+      $weight = $form['title']['#weight']+0.1;
+      $form['exclude_node_title'] = array(
+        '#type' => 'checkbox',
+        '#title' => t('Exclude title from display'),
+        '#required' => FALSE,
+        '#default_value' => (!empty($form['nid']['#value']) ? in_array($form['nid']['#value'], variable_get('exclude_node_title_nid_list', array())) : FALSE ),
+        '#weight' => $weight,
+      );
+      $form['#submit'][] = 'exclude_node_title_node_edit_form_submit';
+    }
+    
   }
 }
 
@@ -138,3 +120,67 @@ function exclude_node_title_node_edit_form_submit($form, &$form_state) {
     }
   }
 }
+
+/**
+ * Implements hook_field_attach_delete_bundle().
+ */
+function exclude_node_title_field_attach_delete_bundle($entity_type, $bundle, $instances) {
+  // when deleting a content type, we make sure and clean our variable :)
+  if ($entity_type == 'node') {
+    variable_del('exclude_node_title_content_type_value_' . $bundle);
+  }
+}
+
+/**
+ * Tells if node should get hidden or not.
+ * @param $param
+ *   Can be a node object or integer value (nid)
+ * @return
+ *   Returns boolean TRUE if should be hidden, FALSE when not
+ */
+function _exclude_node_title($param) {
+  
+  // we accept only integer and object
+  if (!is_object($param) && !is_numeric($param)) {
+    return FALSE;
+  }
+  
+  // if numeric, load the node with nid
+  if (is_numeric($param)) {
+    $node = node_load(intval($param));
+  }
+  else {
+    $node = $param;
+    unset($param); // memory cleanup
+  }
+  $node_type = $node->type;
+  $nid = $node->nid;
+  unset($node); // memory cleanup
+  
+  // get exclude settings
+  static $exclude_settings;
+  if (!isset($exclude_settings)) {
+    foreach (_node_types_build()->names as $key => $val) {
+      $exclude_settings[$key] = variable_get('exclude_node_title_content_type_value_' . $key, 'none');
+    }
+  }
+  
+  switch ($exclude_settings[$node_type]) {
+    case 'all':
+      return TRUE;
+    case 'user':
+      
+      // we look for the nid list
+      if (in_array($nid, variable_get('exclude_node_title_nid_list', array()))) {
+        return TRUE;
+      }
+      return FALSE;
+      
+    case 'none':
+    default:
+      return FALSE;
+      break;
+  }
+  
+}
+
