diff --git a/captcha.module b/captcha.module
index 87124d0..d9c9f21 100644
--- a/captcha.module
+++ b/captcha.module
@@ -430,6 +430,67 @@ function captcha_form_alter(&$form, &$form_state, $form_id) {
 }
 
 /**
+ * Implements hook_form_FORM_ID_alter().
+ */
+function captcha_form_node_type_form_alter(&$form) {
+  // Show extra checkbox for overriding comment location when CAPTCHA is enabled.
+  // (From a UX standpoint it would be better to make an extra option in the
+  // 'comment_form_location' box, but this would mean overriding variables
+  // used by core - which creates challenges when en/disabling this module...)
+  $form['comment']['comment_form_location_captcha'] = array(
+    '#type' => 'select',
+    '#title' => t('Show reply form on a different page when displaying CAPTCHAs'),
+    '#description' => t('If the above option is checked, this setting may override the form location when CAPTCHAs are shown, so pages can still be cached. The default option is to only move the form for anonymous users who see CAPTCHAs, because only pages for anonymous users are usually cached. If the above option is unchecked, this setting has no effect. '),
+    '#default_value' => variable_get('comment_form_location_captcha_' . $form['#node_type']->type, 1),
+    '#options' => array(
+      0 => t('Do not override \'show on the same page\' option'),
+      1 => t('Show on separate page for anonymous users'),
+      2 => t('Show on separate page for all users'),
+    ),
+    '#weight' => 21,
+  );
+  // Make sure we display this option below the original checkbox
+  $form['comment']['comment_form_location']['#weight'] = 20;
+}
+
+/**
+ * Implementats hook_node_view_alter().
+ */
+function captcha_node_view_alter(&$build) {
+  if (variable_get('comment_form_location_' . $build['#node']->type, COMMENT_FORM_BELOW) == COMMENT_FORM_BELOW
+      && user_access('post comments') && !user_access('skip CAPTCHA')) {
+
+    $move = variable_get('comment_form_location_captcha_' . $build['#node']->type, 1);
+    if ($move && ($move == 2 || user_is_anonymous())) {
+
+      // If there's a captcha on this comment form, we should move it
+      // to a separate page.
+      module_load_include('inc', 'captcha');
+      $captcha_point = captcha_get_form_id_setting('comment_node_' . $build['#node']->type . '_form');
+      if ($captcha_point !== NULL && $captcha_point->captcha_type) {
+
+        // Override the node link (see comment_node_view())
+        if (isset($build['links']['comment']['#links']['comment-add'])) {
+          $build['links']['comment']['#links']['comment-add']['href'] = 'comment/reply/' . $build['#node']->nid;
+        }
+        elseif (empty($build['#node']->comment_count)) {
+          // No link was added (to jump down the page when there is no 'down')
+          // but we need it now that we're jumping to a separate page.
+          $build['links']['comment']['#links']['comment-add'] = array(
+            'title' => t('Add new comment'),
+            'attributes' => array('title' => t('Share your thoughts and opinions related to this posting.')),
+            'href' => 'comment/reply/' . $build['#node']->nid,
+            'fragment' => 'comment-form',
+          );
+        }
+        // delete form
+        $build['comments']['comment_form'] = array();
+      }
+    }
+  }
+}
+
+/**
  * CAPTCHA validation function to tests strict equality.
  * @param $solution the solution of the test.
  * @param $response the response to the test.
