diff --git comment_notify.module comment_notify.module
index 14ed668..809ed53 100644
--- comment_notify.module
+++ comment_notify.module
@@ -48,6 +48,15 @@ Webmaster of !site
 !mission
 !uri');
 
+define('OPTIN_MAILTEXT',
+'Hi !name,
+
+You wanted to get notifications for !node_title. If you go to !link1 you subscribe to new comments.
+
+Webmaster of !site
+!mission
+!uri');
+
 define('COMMENT_NOTIFY_DISABLED', 0);
 define('COMMENT_NOTIFY_NODE', 1);
 define('COMMENT_NOTIFY_COMMENT', 2);
@@ -192,6 +201,14 @@ function comment_notify_menu() {
     'type' => MENU_CALLBACK
   );
 
+  $items['comment_notify/enable/%'] = array(
+    'title' => 'Enable comment notification',
+    'page callback' => 'comment_notify_enable_page',
+    'page arguments' => array(2),
+    'access arguments' => array('access content'),
+    'type' => MENU_CALLBACK
+  );
+
   return $items;
 }
 
@@ -206,6 +223,16 @@ function comment_notify_disable_page($hash) {
 }
 
 /**
+ * Page callback to allow users to subscribe simply by visiting the page.
+ */
+function comment_notify_enable_page($hash) {
+  db_query("UPDATE {comment_notify} SET notify = 1 WHERE notify_hash = '%s'", $hash);
+
+  drupal_set_message(t('Your comment follow-up notification for this post was enabled. Thanks.'));
+  return ' ';
+}
+
+/**
  * Implementation of hook_comment().
  */
 function comment_notify_comment($comment, $op) {
@@ -248,6 +275,16 @@ function comment_notify_comment($comment, $op) {
         $notify = $comment['notify_type'];
         // If they don't have a preference, save one.
         $current = db_result(db_query("SELECT count(1) from {comment_notify_user_settings} WHERE uid = %d", $user->uid));
+
+        // Check whether the user need's to opt-in first.
+        $opt_in_roles = array_filter(variable_get('comment_notify_required_optin', array()));
+        $roles = array_intersect_key($opt_in_roles, $user->roles);
+        if (!empty($roles)) {
+          $notify = FALSE;
+          $comment['notify_hash'] = $notify_hash;
+          _comment_notify_mailoptin($comment);
+        }
+
         if ($current == 0 && $user->uid) {
           db_query("INSERT INTO {comment_notify_user_settings} (uid, comment_notify) VALUES (%d, %d)", $user->uid, $comment['notify_type']);
         }
@@ -523,6 +560,108 @@ function _comment_notify_mailalert($comment) {
 }
 
 /**
+ * Private function to send the optin mail.
+ *
+ *  @param $comment
+ *   The comment array as found in hook_comment $op = publish.
+ */
+function _comment_notify_mailoptin($comment) {
+  $comment = (object) $comment;
+  global $language;
+  global $base_url;
+  global $user;
+
+  $nid = $comment->nid;
+  $cid = $comment->cid;
+
+  // Check to see if a notification has already been sent for this
+  // comment so that edits to a comment don't trigger an additional
+  // notification.
+  if (db_result(db_query('SELECT cid from {comment_notify} WHERE cid = %d AND notified = %d', $cid, 1))) {
+    return;
+  }
+
+  $initial_language = $language;
+
+  if (function_exists('locale')) {
+    $languages = locale_language_list();
+    $languages = $languages['name'];
+  }
+
+  $node = node_load($nid);
+
+  // Render up the node and comment.
+  $node_teaser = node_view($node, TRUE, TRUE, FALSE);
+  $node_body = node_view($node, FALSE, TRUE, FALSE);
+  $comment_text = check_markup($comment->comment, $comment->format);
+
+  // No mails if this is not an enabled content type.
+  $enabled_types = variable_get('comment_notify_node_types', array($node->type => TRUE));
+  if (empty($enabled_types[$node->type])) {
+    return;
+  }
+
+  if (!isset($comment->mail)) {
+    $comment_account = user_load(array('name' => $comment->name));
+    $comment_mail = $comment_account->mail;
+  }
+  else {
+    $comment_mail = $comment->mail;
+  }
+
+  $mail = $comment_mail;
+  $message = array();
+  $language = language_default();
+  $recipient_user = drupal_anonymous_user();
+  // Make sure they have access to this node before showing a bunch of node information.
+  if (!node_access('view', $node, $recipient_user)) {
+    continue;
+  }
+
+  $message['subject'] = t('!site :: new comment for your post.', array('!site' => variable_get('site_name', 'drupal')));
+  $message['body'] = t(
+    variable_get('comment_notify_optin_mailtext', OPTIN_MAILTEXT),
+    array(
+      '!cid' => $cid,
+      '!commname' => $comment->name,
+      '!commtext' => drupal_html_to_text($comment_text),
+      '!commsubj' => $comment->subject,
+      '!comment_url' => url('node/'. $nid, array('absolute' => TRUE, 'fragment' => 'comment-'. $cid)),
+      '!node_title' =>  $node->title,
+      '!node_teaser' => drupal_html_to_text($node_teaser),
+      '!mission' => variable_get('site_mission', ''),
+      '!nid' =>  $nid,
+      '!node_body' =>  drupal_html_to_text($node_body),
+      '!name' => $comment->name,
+      '!site' => variable_get('site_name', 'drupal'),
+      '!uri' => $base_url,
+      '!uri_brief' => preg_replace('!^https?://!', '', $base_url),
+      '!date' => format_date(time()),
+      '!login_uri' => url('user', array('absolute' => TRUE)),
+      '!link1' => url('comment_notify/enable/'. $comment->notify_hash, array('absolute' => TRUE))
+    )
+  );
+  drupal_mail('comment_notify', 'comment_notify_optin', $mail, $language, $message);
+  $sent_to[] = $mail;
+
+  $user_mail = check_plain($mail);
+
+  // Add an entry to the watchdog log.
+  watchdog(
+    'comment_notify',
+    'Opt-In: !user_mail',
+    array('!user_mail' => $user_mail),
+    WATCHDOG_NOTICE,
+    l(t('source comment'), 'node/'. $nid, array(
+      'fragment' => 'comment-'. $comment->cid,
+    ))
+  );
+
+  // revert to previous (site default) locale
+  $language = $initial_language;
+}
+
+/**
  * Implementation of hook_mail().
  */
 function comment_notify_mail($key, &$message, $params) {
@@ -637,6 +776,14 @@ function comment_notify_settings() {
     '#options' => $available_options,
   );
 
+  $form['comment_notify_settings']['comment_notify_required_optin'] = array(
+    '#type' => 'checkboxes',
+    '#title' => t('Select which roles need to opt-in to be notified on new comments'),
+    '#default_value' => variable_get('comment_notify_required_optin', array()),
+    '#description' => t('If this is checked for a certain role the user with this role has to click a link on a mail when a notification should be sent.'),
+    '#options' => user_roles(),
+  );
+
   $form['comment_notify_settings']['node_notify_default_mailalert'] = array(
     '#type' => 'checkbox',
     '#title' => t('Subscribe users to their node follow-up notification emails by default'),
@@ -708,6 +855,38 @@ function comment_notify_settings() {
      '#rows' => 15
   );
 
+  $form['comment_notify_settings']['comment_notify_optin_mailtext'] = array(
+    '#type' => 'textarea',
+    '#title' => t('Default mail text for optin mails'),
+    '#description' => t(
+      'You can use the following variables to be replaced:
+      <ul>
+      <li>!cid = the comment id for the comment</li>
+      <li>!commname = the username who posted the comment</li>
+      <li>!commtext = the text of the posted comment</li>
+      <li>!commsubj = the subject of the posted comment</li>
+      <li>!comment_url = the full url of the post and comment - note: if you have paging enabled, this does not work correct - set your max comments per page so that all fit on one page or reverse order them</li>
+      <li>!nid = the node id the comment was posted on</li>
+      <li>!node_title = the title of the node that was commented on</li>
+      <li>!node_teaser = the teaser of the node that was commented on</li>
+      <li>!node_body = the body of the node that was commented on</li>
+      <li>!mission = site_mission text</li>
+      <li>!name = username receiving the alert</li>
+      <li>!site = your site</li>
+      <li>!uri = base_url of site</li>
+      <li>!uri_brief = base_url of site w/o http</li>
+      <li>!date = the current time</li>
+      <li>!login_uri  uri to login the user</li>
+      <li>!edit_uri = uri to edit user profile</li>
+      <li>!link1 the QUICKLINK to enable future follow-up notifications for the user</li>
+      </ul>'
+    ),
+    '#default_value' => variable_get('comment_notify_optin_mailtext', t(OPTIN_MAILTEXT)),
+    '#return_value' => 1,
+    '#cols' => 80,
+    '#rows' => 15
+  );
+
   $form['#validate'] = array('comment_notify_settings_validate');
 
   return system_settings_form($form);
