diff --git a/includes/mollom.class.inc b/includes/mollom.class.inc
index b75020e..a5ed8d8 100644
--- a/includes/mollom.class.inc
+++ b/includes/mollom.class.inc
@@ -950,6 +950,13 @@ abstract class Mollom {
    *   - checks: An indexed array of strings denoting the checks to perform, one
    *     or more of: 'spam', 'quality', 'profanity', 'language', 'sentiment'.
    *     Defaults to 'spam'.
+   *   - type: An optional string identifier to request a special content
+   *     classification behavior. Possible values are:
+   *     - 'user': Enables classification of 'author*' request parameters as
+   *       primary content. postTitle and postBody may be left empty without
+   *       negative impact on the classification result. Use this for checking
+   *       user registration forms. Optionally pass additional user profile text
+   *       fields as postBody.
    *   - unsure: Integer denoting whether a "unsure" response should be allowed
    *     (1) for the 'spam' check (which should lead to CAPTCHA) or not (0).
    *     Defaults to 1.
diff --git a/mollom.api.php b/mollom.api.php
index e8f2a2b..449c443 100644
--- a/mollom.api.php
+++ b/mollom.api.php
@@ -330,6 +330,7 @@ function hook_mollom_form_list_alter(&$form_list) {
  *     - MOLLOM_MODE_ANALYSIS: Text analysis of submitted form values with
  *       fallback to CAPTCHA.
  *     - MOLLOM_MODE_CAPTCHA: CAPTCHA-only protection.
+ *   - type: Internal use only.
  *   - bypass access: (optional) A list of user permissions to check for the
  *     current user to determine whether to protect the form with Mollom or do
  *     not validate submitted form values. If the current user has at least one
diff --git a/mollom.module b/mollom.module
index 4a31aa2..773f56b 100644
--- a/mollom.module
+++ b/mollom.module
@@ -1712,6 +1712,9 @@ function mollom_validate_analysis(&$form, &$form_state) {
   }
   $data['checks'] = $form_state['mollom']['checks'];
   $data['strictness'] = $form_state['mollom']['strictness'];
+  if (isset($form_state['mollom']['type'])) {
+    $data['type'] = $form_state['mollom']['type'];
+  }
   if (in_array('spam', $data['checks']) && $form_state['mollom']['unsure'] == 'binary') {
     $data['unsure'] = 0;
   }
@@ -3165,6 +3168,7 @@ function mollom_form_comment_multiple_delete_confirm_submit($form, &$form_state)
 function user_mollom_form_list() {
   $forms['user_register_form'] = array(
     'mode' => MOLLOM_MODE_CAPTCHA,
+    'type' => 'user',
     'title' => t('User registration form'),
     'entity' => 'user',
     'bundle' => 'user',
diff --git a/tests/mollom.test b/tests/mollom.test
index 28bf91c..5f0434d 100644
--- a/tests/mollom.test
+++ b/tests/mollom.test
@@ -2392,6 +2392,8 @@ class MollomFormConfigurationTestCase extends MollomWebTestCase {
  * Tests protection of User module forms.
  */
 class MollomUserFormsTestCase extends MollomWebTestCase {
+//  protected $mollomClass = 'MollomDrupalTestLocal';
+
   public static function getInfo() {
     return array(
       'name' => 'User integration',
@@ -2502,7 +2504,6 @@ class MollomUserFormsTestCase extends MollomWebTestCase {
     $count_initial = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
 
     // Verify that a spam user registration is blocked.
-    /*
     $this->drupalGet('user/register');
     $this->assertNoCaptchaField();
     $edit = array(
@@ -2515,7 +2516,6 @@ class MollomUserFormsTestCase extends MollomWebTestCase {
     $count_new = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
     $this->assertEqual($count_initial, $count_new, 'Existing user count found.');
     $this->assertFalse(user_load_by_name($edit['name']), 'New user not found.');
-    */
 
     // Verify that a unsure registration triggers a CAPTCHA.
     $this->drupalGet('user/register');
@@ -2557,7 +2557,6 @@ class MollomUserFormsTestCase extends MollomWebTestCase {
     $count_initial = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
 
     // Verify that a spam user registration is blocked.
-    /*
     $this->drupalGet('user/register');
     $this->assertNoCaptchaField();
     $edit = array(
@@ -2570,7 +2569,6 @@ class MollomUserFormsTestCase extends MollomWebTestCase {
     $count_new = db_query("SELECT COUNT(uid) FROM {users}")->fetchField();
     $this->assertEqual($count_initial, $count_new, 'Existing user count found.');
     $this->assertFalse(user_load_by_name($edit['name']), 'New user not found.');
-    */
 
     // Verify that a unsure registration triggers no CAPTCHA and requires approval.
     $this->drupalGet('user/register');
@@ -4366,6 +4364,30 @@ class MollomModerationIntegrationTestCase extends MollomWebTestCase {
   }
 
   /**
+   * Creates a mollom_test post.
+   *
+   * @param array $edit
+   *   (optional) Custom form input for mollom_test form.
+   *
+   * @return stdClass
+   *   The Mollom data object for the created post.
+   */
+  protected function drupalCreateTestUser(array $edit = array()) {
+    $edit += array(
+      'name' => 'ham ' . $this->randomName(6),
+      'mail' => $this->randomName(6) . '@example.com',
+    );
+    $edit['pass[pass1]'] = $edit['pass[pass2]'] = user_password();
+    $this->drupalPost('user/register', $edit, t('Create new account'));
+    $this->assertText(t('Registration successful. You are now logged in.'));
+    $account = user_load_by_mail($edit['mail']);
+    $this->assertSame('Account status', $account->status, 1);
+    $data = mollom_data_load('user', $account->uid);
+    $this->assertTrue($data, 'Mollom data for user exists.');
+    return $data;
+  }
+
+  /**
    * Performs a Mollom moderation HTTP request against the child site.
    *
    * @param string $method
@@ -4594,4 +4616,85 @@ class MollomModerationIntegrationTestCase extends MollomWebTestCase {
       }
     }
   }
+
+  /**
+   * Tests that a stored users with stored content can be moderated.
+   */
+  function testModerateUser() {
+    // Allow registration by site visitors without administrator approval.
+    variable_set('user_register', USER_REGISTER_VISITORS);
+    // @todo Core: Submitting 'unsure' results in the account status to be
+    //   inactive upon submit, and user_register_form_submit() additionally
+    //   checks $account->status for the email verification.
+    variable_set('user_email_verification', FALSE);
+
+    $this->drupalCreateContentType(array('type' => 'article', 'name' => 'Article'));
+    // @todo 'view own unpublished content' permission required to prevent a
+    //   bogus access denied watchdog caused by a bug in Drupal core.
+    // @see http://drupal.org/node/1429442
+    user_role_grant_permissions(DRUPAL_AUTHENTICATED_RID, array('create article content', 'view own unpublished content'));
+
+    $this->drupalLogin($this->admin_user);
+    $this->setProtection('user_register_form', MOLLOM_MODE_ANALYSIS, NULL, array(
+      'mollom[unsure]' => 'moderate',
+      'mollom[discard]' => 0,
+      'mollom[moderation]' => 1,
+    ));
+    $this->drupalLogout();
+
+    $actions = array('approve', 'spam', 'invalid');
+    // @todo See note above; testing 'approve' is not easily possible.
+    $actions = array('spam', 'invalid');
+    foreach ($actions as $action) {
+      // Register a new user. (we are directly logged in)
+      $data = $this->drupalCreateTestUser();
+
+      // Create some posts.
+      $posts = array();
+      $edit = array(
+        'title' => $this->randomString(),
+        'body[und][0][value]' => $this->randomString(),
+      );
+      $this->drupalPost('node/add/article', $edit, t('Save'));
+      $node = $this->drupalGetNodeByTitle($edit['title']);
+      $posts[$node->nid] = $node;
+
+      // Send a moderation request for the post.
+      $path = 'mollom/moderate/' . $data->contentId . '/' . $action;
+      $this->mollomRequest('POST', $path);
+
+      $account = user_load($data->id, TRUE);
+      $new_data = mollom_data_load('user', $data->id);
+
+      // Verify that the post was published.
+      if ($action == 'approve') {
+        $this->assertMollomWatchdogMessages();
+        $this->assertResponse(200);
+        $this->assertSame('Publishing status', $record->status, 1);
+        $this->assertTrue($new_data, 'Mollom data for approved post still exists.');
+        $this->assertFalse($new_data->moderate, 'Post is flagged as moderated.');
+      }
+      // Verify that the post was deleted.
+      elseif ($action == 'spam' || $action == 'delete') {
+        $this->assertMollomWatchdogMessages();
+        $this->assertResponse(200);
+        $this->assertFalse($account, 'Test user not found.');
+        $this->assertFalse($new_data, 'Moderated/deleted user no longer exists.');
+        foreach ($posts as $id => $post) {
+          $node = node_load($id, TRUE);
+          $node_data = mollom_data_load('node', $id);
+          $this->assertFalse($node, 'Test post not found.');
+          $this->assertFalse($node_data, 'Post of moderated/deleted user no longer exists.');
+        }
+      }
+      // Verify that post still exists after invalid/unsupported action.
+      else {
+        $this->assertMollomWatchdogMessages(WATCHDOG_WARNING);
+        $this->assertResponse(404);
+        $this->assertTrue(!empty($account), 'Test user still exists.');
+        $this->assertTrue($new_data->moderate, 'User is not flagged as moderated.');
+      }
+    }
+  }
+
 }
diff --git a/tests/mollom_test_server.module b/tests/mollom_test_server.module
index c568e94..f55822a 100644
--- a/tests/mollom_test_server.module
+++ b/tests/mollom_test_server.module
@@ -452,7 +452,16 @@ function mollom_test_server_check_content($data) {
   // Fetch blacklist.
   $blacklist = variable_get('mollom_test_server_blacklist_' . $publicKey, array());
 
-  $post = implode('\n', array_intersect_key($data, array('postTitle' => 1, 'postBody' => 1)));
+  // Determine content keys to analyze.
+  $post_keys = array('postTitle' => 1, 'postBody' => 1);
+  $type = FALSE;
+  if (isset($data['type']) && in_array($data['type'], array('user'))) {
+    $type = $data['type'];
+    if ($type == 'user') {
+      $post_keys += array('authorName' => 1, 'authorMail' => 1);
+    }
+  }
+  $post = implode('\n', array_intersect_key($data, $post_keys));
 
   $update = isset($data['stored']);
 
