diff --git signature_forum.install signature_forum.install
index be73e8e..3c1a7c6 100644
--- signature_forum.install
+++ signature_forum.install
@@ -22,9 +22,38 @@ function signature_forum_schema() {
         'type' => 'text',
         'not null' => FALSE,
         'default' => NULL),
+      'status' => array(
+        'type' => 'int',
+        'description' => 'A boolean indicator for whether or not a signature should be displayed by default: 1 means display, 0 means not displayed.',
+        'size' => 'tiny',
+        'not null' => FALSE,
+        'default' => 0),
     ),
     'primary key' => array('uid'),
   );
+  $schema['signature_comments'] = array(
+    'fields' => array(
+      'cid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'description' => 'The comment id from {comments}.cid',
+        'not null' => TRUE,
+        'disp-width' => '11'),
+      'type' => array(
+        'description' => 'The type of comment to attach settings.',
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => ''),
+      'status' => array(
+        'type' => 'int',
+        'description' => 'A boolean indicator for whether or not a signature should be displayed: 1 means display, 0 means not displayed.',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'disp-width' => '11'),
+    ),
+    'primary key' => array('cid', 'type'),
+  );
 
   return $schema;
 }
@@ -34,11 +63,31 @@ function signature_forum_schema() {
  */
 function signature_forum_install() {
   drupal_install_schema('signature_forum');
+  drupal_install_schema('signature_comments');
   db_query("INSERT INTO {users_signature} (uid, signature)
     SELECT uid, signature
     FROM {users}
     WHERE signature<>''");
   db_query("UPDATE {users} SET signature=''");
+  signature_forum_build_signature_status();
+}
+
+/**
+ * Set all existing comments to not have a signature to avoid duplicate signatures.
+ */
+function signature_forum_build_signature_status() {
+  // Deal with nodecomments and standard nodes.
+  if (module_exists('nodecomment')) {
+    db_query("INSERT INTO {signature_comments} (cid, status)
+      SELECT nid, 0
+      FROM {node}"); 
+  }
+  // Deal with standard Drupal comments.
+  else {
+    db_query("INSERT INTO {signature_comments} (cid, status)
+      SELECT cid, 0
+      FROM {comments}");
+  }
 }
 
 /**
@@ -61,3 +110,41 @@ function signature_forum_uninstall() {
   drupal_uninstall_schema('signature_forum');
   variable_del('signature_forum_settings');
 }
+
+/**
+ * Implementation of hook_update_n()
+ */
+function signature_forum_update_6100() {
+  $schema['signature_comments'] = array(
+    'fields' => array(
+      'cid' => array(
+        'type' => 'int',
+        'unsigned' => TRUE,
+        'description' => 'The comment id from {comments}.cid',
+        'not null' => TRUE,
+        'disp-width' => '11'),
+      'type' => array(
+        'description' => 'The type of comment to attach settings.',
+        'type' => 'varchar',
+        'length' => 32,
+        'not null' => TRUE,
+        'default' => ''),
+      'status' => array(
+        'type' => 'int',
+        'description' => 'A boolean indicator for whether or not a signature should be displayed: 1 means display, 0 means not displayed.',
+        'size' => 'tiny',
+        'not null' => TRUE,
+        'disp-width' => '11'),
+    ),
+    'primary key' => array('cid', 'type'),
+  );
+  $ret = array();
+  db_add_field($ret, 'users_signature', 'status', array(
+        'type' => 'int',
+        'description' => 'A boolean indicator for whether or not a signature should be displayed by default: 1 means display, 0 means not displayed.',
+        'size' => 'tiny',
+        'not null' => FALSE));
+  db_create_table($ret, 'signature_comments', $schema['signature_comments']);
+  signature_forum_build_signature_status();
+  return $ret;
+}
diff --git signature_forum.module signature_forum.module
index 8b7c0bd..a58d3bc 100644
--- signature_forum.module
+++ signature_forum.module
@@ -165,7 +165,28 @@ function signature_forum_admin_settings() {
     '#options' => $roles,
     '#description' => t('Members of these roles will have their signatures shown in every post.')
   );
-
+  $form['signature_defaults'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Per-post settings'),
+    '#collapsible' => TRUE,
+    '#collapsed' => TRUE,
+    '#description' => t('Users will see a checkbox below the comment form allowing them to choose whether or not to use their signature. If signatures are not enabled for a content type, this setting will have no effect.'),
+  );
+  foreach (node_get_types('names') as $type => $name) {
+    $form['signature_defaults']['signature_forum_default_for_'. $type] = array(
+      '#type' => 'checkbox',
+      '#title' => $name,
+      '#return_value' => 1,
+      '#default_value' => (isset($settings['signature_forum_default_for_'. $type]) ? $settings['signature_forum_default_for_'. $type] : TRUE),
+    );
+  }
+  $form['signature_defaults']['signature_forum_allow_user_default'] = array(
+    '#type' => 'radios',
+    '#title' => t('Allow users to choose their own global default'),
+    '#default_value' => isset($settings['signature_forum_allow_user_default']) ? $settings['signature_forum_allow_user_default'] : 0,
+    '#options' => array(t('No'), t('Yes')),
+    '#description' => t("This will add an option in a user's profile settings where they can choose whether their signature should be used by default."),
+  );
   $form['signature_other'] = array(
     '#type' => 'fieldset',
     '#title' => t('Other options'),
@@ -211,6 +232,8 @@ function signature_forum_defaults() {
     'signature_forum_min_content_length_action' => MIN_CONTENT_ACTION_DO_NOT_DISPLAY,
     'signature_forum_min_content_length_filter' => FILTER_FORMAT_DEFAULT,
     'signature_forum_show_once_options' => SHOW_ONCE_OPTIONS_ALWAYS,
+    // do not automatically allow users to choose their own default signature attachment setting
+    'signature_forum_allow_user_default' => 1,
     // Do not automatically insert signatures into nodes if Advanced Forum is
     // installed (as AF does this in the theme layer).
     'signature_forum_auto_insert' => (module_exists('advanced_forum') ? FALSE : TRUE),
@@ -232,6 +255,9 @@ function signature_forum_admin_settings_submit($form, &$form_state) {
   foreach ($form_state['values'] as $form_value_key => $form_value_value) {
     if (drupal_substr($form_value_key, 0, drupal_strlen('signature_forum_show_for_')) == 'signature_forum_show_for_') {
       $settings[$form_value_key] = $form_value_value;
+    } 
+    elseif (drupal_substr($form_value_key, 0, drupal_strlen('signature_forum_default_for_')) == 'signature_forum_default_for_') {
+      $settings[$form_value_key] = $form_value_value;
     }
   }
   if ($form_state['values']['delete_signatures']) {
@@ -262,6 +288,7 @@ function signature_forum_admin_settings_submit($form, &$form_state) {
   $settings['signature_forum_show_once_options'] = $form_state['values']['show_once_options'];
   $settings['signature_forum_show_once_roles'] = $form_state['values']['show_once_roles'];
   $settings['signature_forum_auto_insert'] = $form_state['values']['auto_insert'];
+  $settings['signature_forum_allow_user_default'] = $form_state['values']['signature_forum_allow_user_default'];
   variable_set('signature_forum_settings', $settings);
   drupal_set_message(t('The configuration options have been saved.'));
 }
@@ -280,17 +307,18 @@ function signature_forum_user($op, &$edit, &$account, $category = NULL) {
       }
       // If the user has a signature set update it, otherwise create a new entry.
       if (db_result(db_query("SELECT uid FROM {users_signature} WHERE uid = %d", $account->uid)) != FALSE) {
-        db_query("UPDATE {users_signature} SET signature='%s' WHERE uid = %d", array($edit['signature'], $account->uid));
+        db_query("UPDATE {users_signature} SET signature = '%s', status = %d WHERE uid = %d", array($edit['signature'], $edit['signature_default_status'], $account->uid));
       }
       else {
-        db_query("INSERT INTO {users_signature} (uid, signature) VALUES (%d, '%s')", array($account->uid, $edit['signature']));
+        db_query("INSERT INTO {users_signature} (uid, signature, status) VALUES (%d, '%s', %d)", array($account->uid, $edit['signature'], $edit['signature_default_status']));
       }
       unset($edit['signature']);
       break;
     case 'load':
-      $signature = db_result(db_query("SELECT signature FROM {users_signature} WHERE uid = %d", $account->uid));
+      $signature = db_fetch_object(db_query("SELECT signature, status FROM {users_signature} WHERE uid = %d", $account->uid));
       // Bug #190446 OG puts $account->signature into comments
-      $account->signature_forum = $signature;
+      $account->signature_forum = isset($signature->signature) ? $signature->signature : '';
+      $account->signature_default_status = isset($signature->status) ? $signature->status : 1;
       break;
     case 'validate':
       $settings = variable_get('signature_forum_settings', signature_forum_defaults());
@@ -324,7 +352,44 @@ function signature_forum_form_alter(&$form, &$form_state, $form_id) {
     else {
       $account = $form['_account']['#value'];
       $form['signature_settings']['signature']['#default_value'] = $account->signature_forum;
+      if ($settings['signature_forum_allow_user_default']) {
+        $form['signature_settings']['signature_default_status'] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Show signature by default'),
+          '#description' => t('Whenever you add a comment you can choose not to use your signature. Use this to turn off your signature by default.'),
+          '#default_value' => $account->signature_default_status,
+        );
+      }
+    }
+  }
+  // Add option to disable/enable signature for this comment, if this option is available.
+  elseif (((($form_id == 'forum_reply_node_form' || (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id)) && $settings['signature_forum_show_for_'. $form['type']['#value']] == 1 ) || $form_id == 'comment_form')  && variable_get('user_signatures', FALSE)) {
+    global $user;
+    // Get default value for whether to use signature are we editing a standard
+    // drupal comment?
+    if (isset($form['cid']) && $form['cid']['#value'] > 0) {
+      $use_signature = signature_forum_get_status($form['cid']['#value'], 'comment');
+    }
+    // Are we editing a nodecomment? Type is necessary to avoid catching drupal
+    // default comments.
+    elseif ($form['nid']['#value'] > 0 && isset($form['type']['#value'])) {
+      $use_signature = signature_forum_get_status($form['nid']['#value'], 'node');
+    }
+    // We're not editing, so check if the user has set a global default.
+    elseif (isset($user->signature_default_status)) {
+      $use_signature = $user->signature_default_status;
+    }
+    // Get the default for this node type.
+    else {
+      // Get site-wide default setting.
+      $use_signature = $settings['signature_forum_default_for_' . $form['type']['#value']];
     }
+    $form['signature_forum'] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Attach signature'),
+      '#description' => t('Signature can be changed in <a href="@signature_link">account settings</a>.', array('@signature_link' => url('user/' . $user->uid . '/edit'))),
+      '#default_value' => $use_signature,      
+    );
   }
 }
 
@@ -338,6 +403,12 @@ function signature_forum_nodeapi(&$node, $op, $teaser, $page) {
       $node->content['body']['#value'] .= signature_forum_get_signature($node);
     }
   }
+  // Save signature setting for this node.
+  elseif ($op == 'insert' || $op == 'update') {
+    $cid = $node->nid;
+    $status = $node->signature_forum;
+    signature_forum_save_comment_status($cid, 'node', $status);
+  }
 }
 
 /**
@@ -350,6 +421,11 @@ function signature_forum_comment(&$comment, $op) {
       $comment->comment .= signature_forum_get_signature($comment);
     }
   }
+  elseif ($op == 'insert' || $op == 'update') {
+    $cid = $comment['cid'];
+    $status = $comment['signature_forum'];
+    signature_forum_save_comment_status($cid, 'comment', $status);
+  }
 }
 
 /**
@@ -421,6 +497,7 @@ function signature_forum_get_signature($a1) {
     }
     $node_type = $a1->type;
   }
+
   // If signatures are not shown for this node type.
   if (!$settings['signature_forum_show_for_'. $node_type]) {
     return;
@@ -446,6 +523,20 @@ function signature_forum_get_signature($a1) {
     return theme('signature_forum', '');
   }
 
+  // Check if signature is disabled for this comment/node 
+  if (isset($a1->cid)) {
+    $id = $a1->cid;
+    $type = 'comment';
+  }
+  else {
+    $id = $a1->nid;
+    $type = 'node';
+  }
+  $signature_status = signature_forum_get_status($id, $type);
+  if (!$signature_status) {
+    return theme('signature_forum', '');
+  }
+
   if (isset($cache[$a1->uid])) {
     // If the signature is in the cache it has been displayed before.
     if ($settings['signature_forum_show_once_options'] == SHOW_ONCE_OPTIONS_ALWAYS || signature_forum_user_exception($a1->uid, 'show_once')) {
@@ -594,3 +685,28 @@ function signature_forum_theme() {
     ),
   );
 }
+
+/** 
+ * Save the signature status for a comment
+ * @param $cid 
+ *  An integer containing the id of a comment or node
+ * @param $status
+ *  A Boolean for whether or not the signature should be attached to this comment or node
+ */
+function signature_forum_save_comment_status($cid, $type, $status = 0) {
+  db_query("UPDATE {signature_comments} SET status = %d WHERE cid = %d AND type = '%s'", array($status, $cid, $type));
+  if (!db_affected_rows()) {
+    db_query("INSERT INTO {signature_comments} (cid, type, status) VALUES (%d, '%s', %d)", array($cid, $type, $status));
+  }
+}
+
+/**
+ * Get the status for whether signature should be used for a particular node or comment
+ * @param $cid
+ *  An integer containing the id of a comment or node
+ * @return 
+ *  TRUE if signature should be used, FALSE if it should be hidden.
+ */
+function signature_forum_get_status($cid, $type) {
+  return db_result(db_query("SELECT status from {signature_comments} WHERE cid = %d AND type = '%s'", $cid, $type));
+}
