diff --git a/apachesolr.admin.inc b/apachesolr.admin.inc
index c4f9524..902cb26 100644
--- a/apachesolr.admin.inc
+++ b/apachesolr.admin.inc
@@ -391,6 +391,12 @@ function apachesolr_index_action_form() {
       '#id' => form_clean_id('edit-'. implode('-', array('action', $key))),
     );
   }
+  // Modules (e.g. apachesolr_search) that actually index nodes should
+  // add themselves in here.
+  $form['indexing_modules'] = array(
+    '#type' => 'value',
+    '#value' => array(),
+  );
 
   $form['submit'] = array(
     '#type' => 'submit',
@@ -409,7 +415,12 @@ function apachesolr_index_action_form() {
 function apachesolr_index_action_form_submit($form, &$form_state) {
   switch ($form_state['values']['action']) {
     case 'remaining':
-      apachesolr_batch_index_remaining();
+      if ($form_state['values']['indexing_modules']) {
+        apachesolr_batch_index_remaining($form_state['values']['indexing_modules']);
+      }
+      else {
+        drupal_set_message(t('No module that implements indexing is enabled.'));
+      }
       break;
 
     case 'reindex':
@@ -811,10 +822,10 @@ function apachesolr_mlt_delete_block_form_submit($form, &$form_state) {
 /**
  * Submit a batch job to index the remaining, unindexed content.
  */
-function apachesolr_batch_index_remaining() {
+function apachesolr_batch_index_remaining($module_list) {
   $batch = array(
     'operations' => array(
-      array('apachesolr_batch_index_nodes', array()),
+      array('apachesolr_batch_index_nodes', array($module_list)),
     ),
     'finished' => 'apachesolr_batch_index_finished',
     'title' => t('Indexing'),
@@ -829,7 +840,7 @@ function apachesolr_batch_index_remaining() {
 /**
  * Batch Operation Callback
  */
-function apachesolr_batch_index_nodes(&$context) {
+function apachesolr_batch_index_nodes(&$context, $module_list) {
   if (empty($context['sandbox'])) {
     try {
       // Get the $solr object
@@ -843,21 +854,25 @@ function apachesolr_batch_index_nodes(&$context) {
       watchdog('Apache Solr', $e->getMessage(), NULL, WATCHDOG_ERROR);
       return FALSE;
     }
-
-    $status = apachesolr_index_status('apachesolr_search');
+    $context['sandbox']['max'] = 0;
+    foreach ($module_list as $module) {
+      $status = apachesolr_index_status($module);
+      $context['sandbox']['max'] += $status['remaining'];
+    }
     $context['sandbox']['progress'] = 0;
-    $context['sandbox']['max'] = $status['remaining'];
   }
 
   // We can safely process the apachesolr_cron_limit nodes at a time without a
   // timeout or out of memory error.
   $limit = variable_get('apachesolr_cron_limit', 50);
 
-  // With each pass through the callback, retrieve the next group of nids.
-  $rows = apachesolr_get_nodes_to_index('apachesolr_search', $limit);
-  apachesolr_index_nodes($rows, 'apachesolr_search');
+  foreach ($module_list as $module) {
+    // With each pass through the callback, retrieve the next group of nids.
+    $rows = apachesolr_get_nodes_to_index($module, $limit);
+    apachesolr_index_nodes($rows, $module);
 
-  $context['sandbox']['progress'] += count($rows);
+    $context['sandbox']['progress'] += count($rows);
+  }
   $context['message'] = t('Indexed @current of @total nodes', array('@current' => $context['sandbox']['progress'], '@total' => $context['sandbox']['max']));
 
   // Inform the batch engine that we are not finished, and provide an
diff --git a/apachesolr_search.module b/apachesolr_search.module
index e87c798..e602790 100644
--- a/apachesolr_search.module
+++ b/apachesolr_search.module
@@ -1101,6 +1101,13 @@ function apachesolr_search_form_search_block_form_alter(&$form, $form_state) {
 }
 
 /**
+ * Implementation of hook_form_[form_id]_alter().
+ */
+function apachesolr_search_form_apachesolr_index_action_form_alter(&$form, $form_state) {
+  $form['indexing_modules']['#value'][] = 'apachesolr_search';
+}
+
+/**
  * Process a block search form submission.
  *
  * @see search_box_form_submit()
