diff --git a/rb_batch/rb_batch.inc b/rb_batch/rb_batch.inc
index 4099e2a..afd41d8 100644
--- a/rb_batch/rb_batch.inc
+++ b/rb_batch/rb_batch.inc
@@ -9,28 +9,6 @@
  */
 
 /**
- * Implements hook_rules_rules_plugin_info().
- *
- * Declares neccessary meta-data about the this plugin.
- */
-function rb_batch_rules_plugin_info() {
-  return array(
-    'batched rule set' => array(
-      'label' => t('Batched rule set'),
-      'module' => 'rb_batch',
-      'class' => 'BatchedRuleSet',
-      'component' => TRUE,
-      'embeddable' => FALSE,
-      'extenders' => array(
-        'RulesPluginUIInterface' => array(
-          'class' => 'BatchedRuleSetUI',
-        ),
-      ),
-    ),
-  );
-}
-
-/**
  * A set of rules to execute upon defined variables, within the possibility
  * of executing each rule as batch operation.
  */
@@ -104,3 +82,90 @@ function rb_batch_action_batch_context($message, $finished) {
    * @see rb_batch.module
    */
 }
+
+
+/**
+ * A batched loop element.
+ */
+class RulesBatchLoop extends RulesLoop {
+
+  protected $itemName = 'batch_loop';
+  protected $listItemInfo;
+
+  public function evaluate(RulesState $state) {
+    try {
+      $param_info = $this->pluginParameterInfo();
+      $list = $this->getArgument('list', $param_info['list'], $state);
+      $item_var_info = $this->listItemInfo();
+      $item_var_name = $this->settings['item:var'];
+
+      if (isset($this->settings['list:select'])) {
+        rules_log('Looping over the list items of %selector', array('%selector' => $this->settings['list:select']), RulesLog::INFO, $this);
+      }
+
+      $batch = array(
+        'operations' => array(),
+        'finished' => 'rb_batch_loop_finished',
+        'file' => drupal_get_path('module', 'rb_batch') . '/rb_batch.inc',
+      );
+
+      // Loop over the list and set a batch operation for each list item.
+      foreach ($list as $key => $item) {
+        // Use a separate state so variables are available in the loop only.
+        $state2 = clone $state;
+        $state2->addVariable($item_var_name, $list[$key], $item_var_info);
+
+        $batch['operations'][] = array(
+          'rb_batch_loop_op',
+          array($this, $state2),
+        );
+      }
+      batch_set($batch);
+    }
+    catch (RulesEvaluationException $e) {
+      rules_log($e->msg, $e->args, $e->severity);
+      rules_log('Unable to evaluate %name.', array('%name' => $this->getPluginName()), RulesLog::WARN, $this);
+    }
+  }
+
+  /**
+   * Evaluate a single batch item.
+   *
+   * @param RulesState
+   *   the state populated with the list item from the batch loop.
+   */
+  public function evaluate_single(RulesState $state) {
+    foreach ($this->children as $action) {
+      $action->evaluate($state);
+    }
+  }
+
+  public function label() {
+    return !empty($this->label) ? $this->label : t('Batch Loop');
+  }
+}
+
+/**
+ * Batch operation for calling a rule.
+ *
+ * @param RulesBatchLoop $plugin
+ * @param RulesState $state
+ * @param $context
+ *   array of batch context
+ */
+function rb_batch_loop_op($plugin, $state, &$context) {
+
+  $plugin->evaluate_single($state);
+
+  // @TODO: get a message text via action:
+  // $context['message'] = check_plain($title);
+  // @TODO: get result text via action:
+  // $context['results'][] = t('Updated contentqueue cache for component @title (nid:@nid)', array('@nid' => $nid, '@title' => $title));
+}
+
+
+/**
+ * Finish callback.
+ */
+function rb_batch_loop_finished($success, $results, $operations) {
+}
diff --git a/rb_batch/rb_batch.info b/rb_batch/rb_batch.info
index 3512b0d..7e4c8d2 100644
--- a/rb_batch/rb_batch.info
+++ b/rb_batch/rb_batch.info
@@ -2,5 +2,5 @@ name = Batched Rules
 description = Provides a batched rule set component to rules.
 package = Rules
 core = 7.x
-files[] = rb_batch.rules.inc
+files[] = rb_batch.inc
 dependencies[] = rules
diff --git a/rb_batch/rb_batch.module b/rb_batch/rb_batch.module
index 869a463..af77205 100644
--- a/rb_batch/rb_batch.module
+++ b/rb_batch/rb_batch.module
@@ -4,10 +4,41 @@
  * @file
  * Provides a batched rule set component to rules.
  *
- * @see rb_batch.rules.inc
+ * @see rb_batch.inc
  */
 
 /**
+ * Implements hook_rules_rules_plugin_info().
+ *
+ * Declares neccessary meta-data about the this plugin.
+ */
+function rb_batch_rules_plugin_info() {
+  return array(
+    'batched rule set' => array(
+      'label' => t('Batched rule set'),
+      'module' => 'rb_batch',
+      'class' => 'BatchedRuleSet',
+      'component' => TRUE,
+      'embeddable' => FALSE,
+      'extenders' => array(
+        'RulesPluginUIInterface' => array(
+          'class' => 'BatchedRuleSetUI',
+        ),
+      ),
+    ),
+    'batch_loop' => array(
+      'class' => 'RulesBatchLoop',
+      'embeddable' => 'RulesActionContainer',
+      'extenders' => array(
+        'RulesPluginUIInterface' => array(
+          'class' => 'RulesLoopUI',
+        ),
+      ),
+    ),
+  );
+}
+
+/**
  * Batch operation which will take over execution of each rule.
  */
 function rb_batch_operation_rule_evaluate($rule, RulesState $initial_state, &$context) {
