diff --git a/src/Form/CategoryForm.php b/src/Form/CategoryForm.php
index 2a80113..d9effdc 100644
--- a/src/Form/CategoryForm.php
+++ b/src/Form/CategoryForm.php
@@ -94,6 +94,25 @@ class CategoryForm extends EntityForm {
   /**
    * {@inheritdoc}
    */
+  public function validateForm(array &$form, FormStateInterface $form_state) {
+    $recipients_chosen = FALSE;
+    $mass_contact_category = $this->entity;
+    foreach ($this->groupingMethodManager->getDefinitions() as $definition) {
+      if (!$plugin = $mass_contact_category->getGroupingCategories($definition['id'])) {
+        $plugin = $this->groupingMethodManager->createInstance($definition['id'], []);
+      }
+      if ($form['recipients'][$plugin->getPluginId()]['categories']['#value']) {
+        $recipients_chosen = TRUE;
+      }
+    }
+    if (!($recipients_chosen)) {
+      $form_state->setErrorByName('', $this->t('Atleast one recipient is required.'), 'error');
+    }
+  }
+
+  /**
+   * {@inheritdoc}
+   */
   public function save(array $form, FormStateInterface $form_state) {
     /** @var \Drupal\mass_contact\Entity\MassContactCategoryInterface $mass_contact_category */
     $mass_contact_category = $this->entity;
diff --git a/src/MassContact.php b/src/MassContact.php
index 2fd26d6..86dfe9f 100644
--- a/src/MassContact.php
+++ b/src/MassContact.php
@@ -231,10 +231,22 @@ class MassContact implements MassContactInterface {
     $recipients = [];
     if (!empty($categories)) {
       foreach ($categories as $category) {
+        $category_recipients = [];
         foreach ($category->getRecipients() as $plugin_id => $config) {
           $grouping = $category->getGroupingCategories($plugin_id);
-          $recipients += $grouping->getRecipients($config['categories']);
+          if (empty($config['categories'])) {
+            // If no values were chosen for this grouping in this category,
+            // some other grouping should have been chosen to determine
+            // recipients. We choose users that satisfy requirements across
+            // groupings for a category, so return all the users so that the
+            // other grouping method(s) chosen will determine the recipients.
+            $category_recipients[$plugin_id] = $this->getAllActiveUsers();
+          }
+          else {
+            $category_recipients[$plugin_id] = $grouping->getRecipients($config['categories']);
+          }
         }
+        $recipients += count($category_recipients) > 1 ? call_user_func_array('array_intersect', $category_recipients) : reset($category_recipients);
       }
 
       // Filter out users that have opted out only if sender has chosen to
@@ -279,4 +291,13 @@ class MassContact implements MassContactInterface {
     }
   }
 
+  /**
+   * Gets all active users on the site.
+   */
+  public function getAllActiveUsers() {
+    $query = $this->entityTypeManager->getStorage('user')->getQuery();
+    $query->condition('status', 1);
+    return $query->execute();
+  }
+
 }
diff --git a/src/Plugin/MassContact/GroupingMethod/Role.php b/src/Plugin/MassContact/GroupingMethod/Role.php
index f3ef7f6..113bc02 100644
--- a/src/Plugin/MassContact/GroupingMethod/Role.php
+++ b/src/Plugin/MassContact/GroupingMethod/Role.php
@@ -146,7 +146,7 @@ class Role extends GroupingBase implements ContainerFactoryPluginInterface {
         'OR' => $this->t('Any'),
         'AND' => $this->t('All'),
       ],
-      '#description' => $this->t('Choose <em>any</em> to return recipients with any of the categories, choose <em>all</em> to return recipients matching all of the categories.'),
+      '#description' => $this->t('Choose <em>any</em> to return recipients with any of the roles, choose <em>all</em> to return recipients with all of the roles.'),
       '#default_value' => $this->configuration['conjunction'],
     ];
   }
