diff --git a/webform_localization.module b/webform_localization.module
index d3909b5..cfc9b53 100644
--- a/webform_localization.module
+++ b/webform_localization.module
@@ -806,6 +806,113 @@ function webform_localization_field_attach_prepare_translation_alter(&$entity, $
 }
 
 /**
+ * Implements hook_form_alter().
+ */
+function webform_localization_form_alter(&$form, &$form_state, $form_id) {
+  // n.b. We are not using hook_form_BASE_FORM_ID_alter(), as we need
+  // to interact closely with other hook_form_alter() implementations.
+  // @see webform_localization_module_implements_alter()
+  if (strpos($form_id, 'webform_client_form_') !== 0) {
+    return;
+  }
+
+  // Enhance webform's mollom support, to handle our 'single_webform' option.
+  if (module_exists('mollom')) {
+    _webform_localization_mollom_form_alter($form, $form_state, $form_id);
+  }
+}
+
+/**
+ * Interaction with mollom_form_alter() for 'single_webform' localization.
+ * @see webform_localization_module_implements_alter()
+ *
+ * If the translation source node's webform is protected by mollom, and
+ * uses our 'single_webform' setting, then we must also protect the other
+ * nodes in the translation set.
+ *
+ * This is because each node in the translation set will still have a
+ * unique client form_id (based on the nid, not the tnid), but mollom will
+ * only know about one of those form_ids.
+ */
+function _webform_localization_mollom_form_alter(&$form, &$form_state, $form_id) {
+  // Establish that the current node has a (different) translation source.
+  // (If this is the translation source, mollom will already know about it).
+  $node = $form['#node'];
+  if (empty($node->tnid) || $node->tnid == $node->nid) {
+    return;
+  }
+
+  // Prime the static mollom form cache (for manipulation).
+  mollom_form_cache();
+  $mollom_cache = &drupal_static('mollom_form_cache');
+  $protected = &$mollom_cache['protected'];
+
+  // If the source node's webform is not protected by mollom, we can bail
+  // out immediately.
+  $source_form_id = 'webform_client_form_' . $node->tnid;
+  if (!array_key_exists($source_form_id, $protected)) {
+    return;
+  }
+
+  // Check that the 'single_webform' option is configured for the source.
+  $source_wl_options = webform_localization_get_config($node->tnid);
+  if (empty($source_wl_options['single_webform'])) {
+    return;
+  }
+
+  // Protect this form using the settings for the single webform.
+  // Firstly we take care of the mollom_form_cache() static cache.
+  $protected[$form_id] = $protected[$source_form_id];
+
+  // Then, if necessary, we update the mollom_form_load() cache.
+  $mollom_form = mollom_form_load($form_id);
+  if (!$mollom_form) {
+    $source_mollom_form = mollom_form_load($source_form_id);
+    $mollom_form = $source_mollom_form;
+    $mollom_form['form_id'] = $form_id;
+    $cid = 'mollom:form:' . $form_id;
+    cache_set($cid, $mollom_form);
+  }
+}
+
+/**
+ * Implements hook_module_implements_alter().
+ *
+ * We need our hook_form_alter() to run before mollom's, so that we can
+ * prime and modify its cache before mollom uses it.
+ *
+ * @see webform_localization_form_alter()
+ * @see mollom_form_alter()
+ */
+function webform_localization_module_implements_alter(&$implementations, $hook) {
+  if ($hook != 'form_alter') {
+    return;
+  }
+
+  // If mollom isn't enabled, do nothing.
+  if (!module_exists('mollom')) {
+    return;
+  }
+
+  // If our code will run before mollom's, do nothing.
+  $pos = array_flip(array_keys($implementations));
+  if ($pos['webform_localization'] < $pos['mollom']) {
+    return;
+  }
+
+  // Make it so our hook implementation runs before mollom's.
+  $webform_localization = array(
+    'webform_localization' => $implementations['webform_localization'],
+  );
+  $implementations = array_diff_key($implementations, $webform_localization);
+  $implementations = array_merge(
+    array_slice($implementations, 0, $pos['mollom'], TRUE),
+    $webform_localization,
+    array_slice($implementations, $pos['mollom'], NULL, TRUE)
+  );
+}
+
+/**
  * Gets webform localization options that match a node ID.
  *
  * @staticvar array $webform_localization_options
