diff --git modules/mollom/mollom.module modules/mollom/mollom.module
index d1a0c19..0428178 100644
--- modules/mollom/mollom.module
+++ modules/mollom/mollom.module
@@ -577,43 +577,53 @@ function _mollom_protectable_forms() {
   static $forms = NULL;
 
   if (!$forms) {
-    if (module_exists('comment')) {
-      $forms['comment_form'] = array(
-        'name' => 'comment form',
-        'mode' => MOLLOM_MODE_ANALYSIS,
-      );
-    }
+    $forms = module_invoke_all('mollom');
+    drupal_alter('mollom', $forms);
+  }
 
-    if (module_exists('contact')) {
-      $forms['contact_mail_page'] = array(
-        'name' => 'site-wide contact form',
-        'mode' => MOLLOM_MODE_ANALYSIS,
-      );
+  return $forms;
+}
 
-      $forms['contact_mail_user'] = array(
-        'name' => 'per-user contact forms',
-        'mode' => MOLLOM_MODE_ANALYSIS,
-      );
-    }
+/**
+ * Return which forms to protect, implementing on-behalfs for core modules.
+ */
+function mollom_mollom() {
+  if (module_exists('comment')) {
+    $forms['comment_form'] = array(
+      'name' => 'comment form',
+      'mode' => MOLLOM_MODE_ANALYSIS,
+    );
+  }
 
-    $forms['user_register'] = array(
-      'name' => 'user registration form',
-      'mode' => MOLLOM_MODE_CAPTCHA,
+  if (module_exists('contact')) {
+    $forms['contact_mail_page'] = array(
+      'name' => 'site-wide contact form',
+      'mode' => MOLLOM_MODE_ANALYSIS,
     );
 
-    $forms['user_pass'] = array(
-      'name' => 'user password request form',
-      'mode' => MOLLOM_MODE_CAPTCHA,
+    $forms['contact_mail_user'] = array(
+      'name' => 'per-user contact forms',
+      'mode' => MOLLOM_MODE_ANALYSIS,
     );
+  }
 
-    // Add all the node types:
-    $types = node_get_types('names');
-    foreach ($types as $type => $name) {
-      $forms[$type .'_node_form'] = array(
-        'name' => drupal_strtolower($name) .' form',
-        'mode' => MOLLOM_MODE_ANALYSIS,
-      );
-    }
+  $forms['user_register'] = array(
+    'name' => 'user registration form',
+    'mode' => MOLLOM_MODE_CAPTCHA,
+  );
+
+  $forms['user_pass'] = array(
+    'name' => 'user password request form',
+    'mode' => MOLLOM_MODE_CAPTCHA,
+  );
+
+  // Add all the node types:
+  $types = node_get_types('names');
+  foreach ($types as $type => $name) {
+    $forms[$type .'_node_form'] = array(
+      'name' => drupal_strtolower($name) .' form',
+      'mode' => MOLLOM_MODE_ANALYSIS,
+    );
   }
 
   return $forms;
@@ -912,9 +922,18 @@ function mollom_validate_analysis(&$mollom_state, $form_state, &$edit) {
     $data = mollom_data_node_form($form_state['values']);
   }
   else {
-    $function = 'mollom_data_'. $form_id;
-    if (function_exists($function)) {
-      $data = $function($form_state['values']);
+    $forms = _mollom_protectable_forms();
+    $functions = array('mollom_data_'. $form_id);
+
+    if (isset($forms[$form_id]['data'])) {
+      array_unshift($functions, $forms[$form_id]['data']);
+    }
+
+    foreach ($functions as $function) {
+      if (function_exists($function)) {
+        $data = $function($form_state['values']);
+        break;
+      }
     }
   }
 
