diff --git activity.admin.inc activity.admin.inc
index f083fae..8bb6975 100644
--- activity.admin.inc
+++ activity.admin.inc
@@ -680,18 +680,61 @@ function activity_access_rebuild_process(&$context) {
 }
 
 /**
- * Set a batch process to regenerate activity for a specific hook and op pair.
- *
- * @param $aid
- *  The actions.aid for this template.
- *
- * @return none
+ * Give a form before we regenerate in order to target specific nodes if desired.
  */
-function activity_batch_regenerate($batches) {
+function activity_batch_regenerate_form(&$form_state, $batches) {
+  $form['batches'] = array('#type' => 'value', '#value' => $batches);
+  $form['nids'] = array(
+    '#type' => 'textfield',
+    '#description' => t('Comma separated list of node ids. (Optional)'),
+  );
+  $form['submit'] = array(
+    '#type' => 'submit',
+    '#value' => 'Regenerate',
+  );
+  return $form;
+}
+
+function activity_batch_regenerate_form_submit($form, &$form_state) {
+  if (!empty($form_state['values']['nids'])) {
+    $nid_limiters = explode(',', $form_state['values']['nids']);
+  }
+  
   $batch_set = FALSE;
+  $batches = $form_state['values']['batches'];
   foreach ($batches as $aid => $batch) {
     $trigger_assignment = db_fetch_object(db_query("SELECT hook, op FROM {trigger_assignments} WHERE aid = '%s'", $aid));
     if (!empty($trigger_assignment)) {
+      // Refine the batch before sending for processing
+      switch ($trigger_assignment->hook) {
+        case "nodeapi":
+          // Obtain the node type for this particular regeneration
+          $parameters = unserialize(db_result(db_query("SELECT a.parameters FROM {actions} a WHERE aid = '%s'", $aid)));
+          $types = $parameters['activity_types'];
+          // Create a list of NIDs for this node type
+          foreach ($types as $type) {
+            $result = db_query("SELECT nid FROM {node} WHERE type = '%s'", $type);
+            while ($row = db_fetch_array($result)) {
+              $nids[] = $row['nid'];
+            }
+          }
+          $nids = array_flip($nids);
+          // Remove all nodes from the batch that are not of this node type
+          foreach ($batch as $key => $item) {
+            if (!array_key_exists($item['id'], $nids)) {
+              unset($batch[$key]);
+            }
+            
+            // Limit even further if nids are given.
+            if (!empty($nid_limiters)) {
+              if (!array_key_exists($item['id'], $nid_limiters)) {
+                unset($batch[$key]);
+              }
+            }
+          }
+          break;
+      }
+      
       $batch_set = TRUE;
       $batch = array(
         'title' => t('Regenerating @description Activity', array('@description' => db_result(db_query("SELECT description from {actions} WHERE aid = '%s'", $aid)))),
@@ -804,4 +847,4 @@ function activity_batch_regenerate_step($aid, $batch, $hook, $op, &$batch_contex
     // If finished, delete the sandbox.
     unset($batch_context['sandbox']);
   }
-}
\ No newline at end of file
+}
diff --git activity.module activity.module
index c3d276e..ff80656 100644
--- activity.module
+++ activity.module
@@ -235,8 +235,8 @@ function activity_menu() {
   );
   $items['admin/build/activity/batch/%activity_batch/%'] = array(
     'title' => 'Batch Update',
-    'page callback' => 'activity_batch_regenerate',
-    'page arguments' => array(4),
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('activity_batch_regenerate_form', 4),
     'access callback' => 'activity_batch_access',
     'access arguments' => array(4, 5),
     'file' => 'activity.admin.inc',
