diff --git a/mollom.admin.inc b/mollom.admin.inc
index 5946ad8..fa297e1 100644
--- a/mollom.admin.inc
+++ b/mollom.admin.inc
@@ -49,6 +49,7 @@ function mollom_admin_form_list() {
     $row = array();
     $row[] = $mollom_form['title'];
     if ($mollom_form['mode'] == MOLLOM_MODE_ANALYSIS) {
+      // @todo Output unsure mode in summary listing.
       $row[] = t('!protection-mode (@discard)', array(
         '!protection-mode' => $modes[$mollom_form['mode']],
         '@discard' => $mollom_form['discard'] ? t('discard') : t('retain'),
@@ -294,13 +295,37 @@ function mollom_admin_configure_form($form, &$form_state, $mollom_form = NULL) {
           ),
         );
 
+        $form['mollom']['unsure'] = array(
+          '#type' => 'radios',
+          '#title' => t('When text analysis is unsure'),
+          '#default_value' => $mollom_form['unsure'],
+          // @todo Add 'accept' and 'discard' actions for unsure posts.
+          '#options' => array(
+            'captcha' => t('Show a CAPTCHA'),
+            'moderate' => t('Retain the post for manual moderation'),
+          ),
+          '#required' => $mollom_form['mode'] == MOLLOM_MODE_ANALYSIS,
+          // Only possible for forms protected via text analysis.
+          '#states' => array(
+            'visible' => array(
+              ':input[name="mollom[mode]"]' => array('value' => (string) MOLLOM_MODE_ANALYSIS),
+              ':input[name="mollom[checks][spam]"]' => array('checked' => TRUE),
+            ),
+          ),
+        );
+        // Only possible for forms supporting moderation of unpublished posts.
+        $form['mollom']['unsure']['moderate']['#access'] = !empty($mollom_form['moderation callback']);
+        // Until more options are supported, the entire field/widget only makes
+        // sense for forms that support moderation of unpublished posts.
+        $form['mollom']['unsure']['#access'] = !empty($mollom_form['moderation callback']);
+
         $form['mollom']['discard'] = array(
           '#type' => 'radios',
           '#title' => t('When text analysis identifies spam'),
           '#default_value' => $mollom_form['discard'],
           '#options' => array(
-            1 => t('Automatically discard the post'),
             0 => t('Retain the post for manual moderation'),
+            1 => t('Discard the post'),
           ),
           '#required' => $mollom_form['mode'] == MOLLOM_MODE_ANALYSIS,
           // Only possible for forms supporting moderation of unpublished posts.
@@ -309,6 +334,7 @@ function mollom_admin_configure_form($form, &$form_state, $mollom_form = NULL) {
           '#states' => array(
             'visible' => array(
               ':input[name="mollom[mode]"]' => array('value' => (string) MOLLOM_MODE_ANALYSIS),
+              ':input[name="mollom[checks][spam]"]' => array('checked' => TRUE),
             ),
           ),
         );
diff --git a/mollom.install b/mollom.install
index 7680669..ac98b1d 100644
--- a/mollom.install
+++ b/mollom.install
@@ -238,6 +238,13 @@ function mollom_schema() {
         'not null' => FALSE,
         'serialize' => TRUE,
       ),
+      'unsure' => array(
+        'description' => 'Action to perform when text analysis is unsure.',
+        'type' => 'varchar',
+        'length' => 24,
+        'not null' => TRUE,
+        'default' => 'captcha',
+      ),
       'discard' => array(
         'description' => 'Whether to discard (1) or retain (0) bad posts.',
         'type' => 'int',
@@ -1025,3 +1032,19 @@ function mollom_update_7205() {
     }
   }
 }
+
+/**
+ * Add {mollom_form}.unsure field.
+ */
+function mollom_update_7206() {
+  if (!db_field_exists('mollom_form', 'unsure')) {
+    db_add_field('mollom_form', 'unsure', array(
+      'description' => 'Action to perform when text analysis is unsure.',
+      'type' => 'varchar',
+      'length' => 24,
+      'not null' => TRUE,
+      'default' => 'captcha',
+    ));
+  }
+}
+
diff --git a/mollom.module b/mollom.module
index 22ab9ce..fe2eb7c 100644
--- a/mollom.module
+++ b/mollom.module
@@ -932,6 +932,7 @@ function mollom_form_info($form_id, $module, $form_list = NULL) {
     'checks' => array(),
     'enabled_fields' => array(),
     'strictness' => 'normal',
+    'unsure' => 'captcha',
     'discard' => 1,
     'moderation' => 0,
     // Meta information.
@@ -1747,14 +1748,19 @@ function mollom_validate_analysis(&$form, &$form_state) {
           'arguments' => array('%teaser' => $teaser),
         ), WATCHDOG_INFO);
 
-        // Only throw a validation error and retrieve a CAPTCHA, if we check
-        // this post for the first time. Otherwise, mollom_validate_captcha()
-        // issued the CAPTCHA and needs to validate it prior to throwing any
-        // errors.
-        if (!$form_state['mollom']['require_captcha']) {
-          $form_state['mollom']['require_captcha'] = TRUE;
-          form_set_error('mollom][captcha', t('To complete this form, please complete the word verification below.'));
-          mollom_form_add_captcha($form['mollom'], $form_state);
+        if ($form_state['mollom']['unsure'] == 'moderate') {
+          $form_state['mollom']['require_moderation'] = TRUE;
+        }
+        else {
+          // Only throw a validation error and retrieve a CAPTCHA, if we check
+          // this post for the first time. Otherwise, mollom_validate_captcha()
+          // issued the CAPTCHA and needs to validate it prior to throwing any
+          // errors.
+          if (!$form_state['mollom']['require_captcha']) {
+            $form_state['mollom']['require_captcha'] = TRUE;
+            form_set_error('mollom][captcha', t('To complete this form, please complete the word verification below.'));
+            mollom_form_add_captcha($form['mollom'], $form_state);
+          }
         }
         break;
 
diff --git a/tests/mollom.test b/tests/mollom.test
index 5845284..c2dcf2e 100644
--- a/tests/mollom.test
+++ b/tests/mollom.test
@@ -3570,9 +3570,70 @@ class MollomAnalysisTestCase extends MollomWebTestCase {
   }
 
   /**
-   * Tests retaining bad posts and moderating them.
+   * Tests retaining unsure posts and moderating them.
    */
-  function testRetain() {
+  function testRetainUnsure() {
+    $this->drupalLogin($this->admin_user);
+    // Verify that mollom_basic_elements_test_form cannot be configured to put
+    // posts into moderation queue.
+    $this->setProtection('mollom_basic_elements_test_form');
+    $this->drupalGet('admin/config/content/mollom/manage/mollom_basic_elements_test_form');
+    $this->assertNoFieldByName('mollom[unsure]');
+
+    // Configure mollom_test_form to retain unsure posts.
+    $this->setProtection('mollom_test_form', MOLLOM_MODE_ANALYSIS, NULL, array(
+      'mollom[unsure]' => 'moderate',
+    ));
+    $this->drupalLogout();
+
+    // Verify that an unsure post gets unpublished.
+    $edit = array(
+      'title' => $this->randomString(),
+      'body' => 'unsure',
+    );
+    $this->drupalPost('mollom-test/form', $edit, 'Submit');
+    $mid = $this->assertTestSubmitData();
+    $data = $this->assertMollomData('mollom_test', $mid);
+    $record = mollom_test_load($mid);
+    $this->assertEqual($record->status, 0, t('Unpublished test post found.'));
+    $this->assertSame('spamScore', $data->spamScore, 0.5);
+    $this->assertSame('spamClassification', $data->spamClassification, 'unsure');
+    $this->assertSame('moderate', $data->moderate, 1);
+
+    // Verify that editing the post does neither change the session data, nor
+    // the publishing status.
+    $edit = array(
+      'title' => $this->randomString(),
+      'body' => 'unsure unsure',
+    );
+    $this->drupalPost(NULL, $edit, 'Submit');
+    $mid = $this->assertTestSubmitData($mid);
+    $data = $this->assertMollomData('mollom_test', $mid);
+    $record = mollom_test_load($mid);
+    $this->assertEqual($record->status, 0, t('Unpublished test post found.'));
+    $this->assertSame('spamScore', $data->spamScore, 0.5);
+    $this->assertSame('spamClassification', $data->spamClassification, 'unsure');
+    $this->assertSame('moderate', $data->moderate, 1);
+
+    // Verify that publishing the post changes the session data accordingly.
+    $this->drupalLogin($this->admin_user);
+    $edit = array(
+      'status' => TRUE,
+    );
+    $this->drupalPost('mollom-test/form/' . $mid, $edit, 'Submit');
+    $mid = $this->assertTestSubmitData($mid);
+    $data = $this->assertMollomData('mollom_test', $mid);
+    $record = mollom_test_load($mid);
+    $this->assertEqual($record->status, 1, t('Published test post found.'));
+    $this->assertSame('spamScore', $data->spamScore, 0.5);
+    $this->assertSame('spamClassification', $data->spamClassification, 'unsure');
+    $this->assertSame('moderate', $data->moderate, 0);
+  }
+
+  /**
+   * Tests retaining spam posts and moderating them.
+   */
+  function testRetainSpam() {
     $this->drupalLogin($this->admin_user);
     // Verify that mollom_basic_test_form cannot be configured to put posts into
     // moderation queue.
