diff --git a/comment_alter.install b/comment_alter.install
index cd009b3..22c6b89 100644
--- a/comment_alter.install
+++ b/comment_alter.install
@@ -39,3 +39,12 @@ function comment_alter_schema() {
   );
   return $schema;
 }
+
+/**
+ * Implements hook_uninstall().
+ */
+function comment_alter_uninstall() {
+  foreach (node_type_get_types() as $node_type) {
+    variable_del('comment_alter_title_' . $node_type->type);
+  }
+}
diff --git a/comment_alter.module b/comment_alter.module
index 4af977b..3bef62e 100644
--- a/comment_alter.module
+++ b/comment_alter.module
@@ -33,6 +33,24 @@ function comment_alter_form_field_ui_field_edit_form_alter(&$form, &$form_state,
 }
 
 /**
+ * Implements hook_form_BASE_FORM_ID_alter().
+ */
+function comment_alter_form_node_type_form_alter(&$form, &$form_state, $form_id) {
+  $form['submission']['comment_alter_title'] = array(
+    '#type' => 'checkbox',
+    '#title' => t('Enable altering node title from comments.'),
+    '#default_value' => variable_get('comment_alter_title_' . $form['#node_type']->type, 0),
+  );
+}
+
+/**
+ * Implements hook_node_type_delete().
+ */
+function comment_alter_node_type_delete($info) {
+  variable_del('comment_alter_title_' . $info->type);
+}
+
+/**
  * Returns the comment-alterable fields for a content type.
  *
  * @param string $content_type
@@ -50,6 +68,9 @@ function comment_alter_get_alterable_fields($content_type) {
         $comment_alter_fields[$content_type][] = $field_name;
       }
     }
+    if (variable_get('comment_alter_title_' . $content_type, 0)) {
+      $comment_alter_fields[$content_type][] = 'title';
+    }
   }
   return $comment_alter_fields[$content_type];
 }
@@ -105,6 +127,8 @@ function comment_alter_form_comment_form_alter(&$form, &$form_state, $form_id) {
     // previous one), second-level keys (and values) are the columns which do
     // have their form elements.
     $alterable_columns = array();
+    // Although (node) 'title' may appear as $field_name here, it will be simply
+    // skipped because field_attach_form() has not added it to the $full_form.
     foreach ($comment_alter_fields as $field_name) {
       if (!empty($full_form[$field_name]) && $full_form[$field_name]['#access']) {
         $field_language = $full_form[$field_name]['#language'];
@@ -147,6 +171,16 @@ function comment_alter_form_comment_form_alter(&$form, &$form_state, $form_id) {
         }
       }
     }
+    // Add the node title "field" if needed.
+    if (in_array('title', $comment_alter_fields)) {
+      $form['comment_alter_node_title'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Title'), // FIXME
+        '#required' => TRUE,
+        '#default_value' => $form['#node']->title,
+      );
+      $alterable_fields['title'] = 'comment_alter_node_title';
+    }
     if (!empty($alterable_fields)) {
       // Push down the information gathered to _comment_alter_submit_node_fields()
       $form['comment_alter'] = array(
@@ -223,6 +258,10 @@ function _comment_alter_convert_form($form, $form_state) {
 function _comment_alter_validate_node_fields($form, &$form_state) {
   list ($new_form, $new_form_state) = _comment_alter_convert_form($form, $form_state);
   foreach ($form_state['values']['comment_alter']['fields'] as $field_name => $field_alias) {
+    // Skip validating node title.
+    if ($field_name == 'title') {
+      continue;
+    }
     field_attach_form_validate('node', $form_state['node'], $new_form, $new_form_state, array('field_name' => $field_name));
   }
 }
@@ -243,6 +282,12 @@ function _comment_alter_submit_node_fields($form, &$form_state) {
   if (isset($values['comment_alter'])) {
     $changed_fields = array();
     foreach ($values['comment_alter']['fields'] as $field => $field_alias) {
+      if ($field == 'title') {
+        if ($form['comment_alter_node_title']['#default_value'] != $values['comment_alter_node_title']) {
+          $changed_fields['title'] = 'title';
+        }
+        continue;
+      }
       $field_alias_old = $field_alias . '_old';
       // Multiple-value fields should not have an 'add_more' delta (this comes
       // from the Field API's Form API stuff: 'add_more' delta is the 'Add more'
@@ -293,6 +338,11 @@ function _comment_alter_submit_node_fields($form, &$form_state) {
       // Run field_attach_submit for all the changed fields
       list ($new_form, $new_form_state) = _comment_alter_convert_form($form, $form_state);
       foreach ($form_state['values']['comment_alter']['fields'] as $field_name => $field_alias) {
+        // Handle node title differently, as it is not a field.
+        if ($field_name == 'title') {
+          $node->title = $values['comment_alter_node_title'];
+          continue;
+        }
         field_attach_submit('node', $node, $new_form, $new_form_state, array('field_name' => $field_name));
       }
       // Creating a new node revision regardless the node type settings.
@@ -468,6 +519,16 @@ function comment_alter_field_extra_fields() {
     $comment_alter_fields = comment_alter_get_alterable_fields($type->type);
     $weight = 0;
     foreach ($comment_alter_fields as $field_name) {
+      // Node title is not a field, so handle it differently.
+      if ($field_name == 'title') {
+        $return['comment']['comment_node_' . $type->type]['form']['comment_alter_node_title'] = array(
+          'label' => t('Title'), // FIXME
+          'description' => t('Description'), // FIXME
+          'weight' => $weight,
+        );
+        $weight++;
+        continue;
+      }
       $field = field_info_instance('node', $field_name, $type->type);
       // Comment_alterable node fields must be amongst the comment fields
       // themselves in order to be able to properly weight/reorderd them, put
