diff --git a/mollom.module b/mollom.module
index 6beb8f1..a6a8239 100644
--- a/mollom.module
+++ b/mollom.module
@@ -917,6 +917,35 @@ function mollom_form_alter(&$form, &$form_state, $form_id) {
       array_unshift($form['#submit'], 'mollom_data_delete_form_submit');
     }
   }
+
+  // Integrate with Views Bulk Operations.
+  if (isset($form_state['operation']) && $form_state['operation'] instanceof ViewsBulkOperationsAction && $form_state['operation']->id() === 'action::views_bulk_operations_delete_item') {
+    foreach ($form_state['build_info']['args'][0]->field as $field) {
+      if ($field instanceof views_bulk_operations_handler_field_operations && in_array($field->get_entity_type(), array('node', 'comment'))) {
+        mollom_data_delete_form_alter($form, $form_state);
+        array_unshift($form['actions']['submit']['#submit'], 'mollom_form_vbo_delete_confirm_submit');
+        break;
+      }
+    }
+  }
+}
+
+/**
+ * Form submit handler for mollom_form_alter(), for Views bulk Operations
+ * deletes.
+ */
+function mollom_form_vbo_delete_confirm_submit($form, &$form_state) {
+  if (!empty($form_state['values']['mollom']['feedback'])) {
+    foreach ($form_state['build_info']['args'][0]->field as $field) {
+      if ($field instanceof views_bulk_operations_handler_field_operations) {
+        list($allowed) = _mollom_actions_access_callbacks($field->get_entity_type(), entity_load($field->get_entity_type(), $form_state['selection']));
+        if (mollom_data_report_multiple($field->get_entity_type(), array_keys($allowed), $form_state['values']['mollom']['feedback'])) {
+          drupal_set_message(t('The items were successfully reported as inappropriate.'));
+        }
+        break;
+      }
+    }
+  }
 }
 
 /**
@@ -3816,8 +3845,8 @@ function _mollom_actions_access_callbacks($entity_type, $entities) {
       $report_access_callbacks[] = $info['report access callback'];
     }
     // Otherwise add any access permissions.
-    else if (isset($info['report access']) && !in_array($info['report access'], $access_permissions)) {
-      $access_permissions[] = $info['report access'];
+    elseif (isset($info['report access'])) {
+      $access_permissions += $info['report access'];
     }
     // Check for entity report access callbacks.
     if (isset($info['entity report access callback'])
@@ -3826,6 +3855,7 @@ function _mollom_actions_access_callbacks($entity_type, $entities) {
       $entity_access_callbacks[] = $info['entity report access callback'];
     }
   }
+  $access_permissions = array_unique($access_permissions);
 
   // Check access for this comment.
   foreach ($entities as $entity) {
@@ -3860,7 +3890,7 @@ function _mollom_actions_access_callbacks($entity_type, $entities) {
     }
 
     // If still here, then user has access to report this entity.
-    $allowed[] = $entity;
+    $allowed[$entity_id] = $entity;
   }
   return array($allowed, $nids, $cids);
 }
