diff --git a/commerce_add_to_cart_extras.module b/commerce_add_to_cart_extras.module
index c85d79a..64f2a03 100644
--- a/commerce_add_to_cart_extras.module
+++ b/commerce_add_to_cart_extras.module
@@ -38,3 +38,64 @@ function commerce_add_to_cart_extras_form_alter(&$form, &$form_state, $form_id)
     $form['actions']['submit']['#value'] = t('Add to cart');
   }
 }
+
+function commerce_add_to_cart_extras_batch_config($products, $product_quantities, $combine, $display_plugin, $use_display_path, $path, $view_name, $view_current_display, $view_human_name, $view_current_page) {
+  $product_count = count($products);
+
+  $operations = array();
+ 
+  //for every product, assign some method to run on that product
+  foreach ($products as $product_id => $product) {
+    $operations[] = array('commerce_add_to_cart_extras_process_product', array($product, $product_quantities[$product->product_id], $combine, $display_plugin, $use_display_path, $path, $view_name, $view_current_display, $view_human_name, $view_current_page, 'details'=> t('(Adding @quantity @product to cart)', array('@quantity' => $product_quantities[$product->product_id],'@product' => $product->title))));
+  }
+
+  //Put all that information into our batch array
+  $batch = array(
+    'operations' => $operations,
+    'title' => t('Adding Items to Cart...'),
+    'init_message' => t('Initializing'),
+    'error_message' => t('An error occurred'),
+    'finished' => 'commerce_add_to_cart_extras_batch_finished'
+  );
+
+  return $batch;
+}
+
+function commerce_add_to_cart_extras_process_product($product, $quantity, $combine, $display_plugin, $use_display_path, $path, $view_name, $view_current_display, $view_human_name, $view_current_page, $details, &$context){
+  global $user;
+
+  $line_item = commerce_product_line_item_new($product, $quantity);
+  $line_item->data['context']['product_ids'] = array($product->product_id);
+  $line_item->data['context']['add_to_cart_combine'] = $combine;
+
+  // Add the display path to the line item's context data array if specified.
+  if ($display_plugin == 'page' && $use_display_path) {
+    $line_item->data['context']['display_path'] = $path;
+  }
+
+  // Store the View data in the context data array as well.
+  $line_item->data['context']['view'] = array(
+    'view_name' => $view_name,
+    'display_name' => $view_current_display,
+    'human_name' => $view_human_name,
+    'page' => $view_current_page,
+  );
+
+  commerce_cart_product_add($user->uid, $line_item, $combine);
+
+  // Optional message displayed under the progressbar.
+  $context['message'] = $details;
+}
+
+function commerce_add_to_cart_extras_batch_finished($success, $results, $operations){
+  if ($success) {
+    // Here we could do something meaningful with the results.
+    // We just display the number of nodes we processed...
+    drupal_set_message(t('@count items added to the cart.', array('@count' => count($results))));
+  } else {
+    // An error occurred.
+    // $operations contains the operations that remained unprocessed.
+    $error_operation = reset($operations);
+    drupal_set_message(t('An error occurred while processing @operation with arguments : @args', array('@operation' => $error_operation[0], '@args' => print_r($error_operation[0], TRUE))));
+  }
+}
diff --git a/commerce_add_to_cart_extras_handler_field_quantity.inc b/commerce_add_to_cart_extras_handler_field_quantity.inc
index fc8eda8..5827686 100644
--- a/commerce_add_to_cart_extras_handler_field_quantity.inc
+++ b/commerce_add_to_cart_extras_handler_field_quantity.inc
@@ -17,6 +17,7 @@ class commerce_add_to_cart_extras_handler_field_quantity extends views_handler_f
     $options['default_quantity'] = array('default' => 0);
     $options['combine'] = array('default' => TRUE);
     $options['display_path'] = array('default' => FALSE);
+    $options['use_batch'] = array('default' => FALSE);
 
     return $options;
   }
@@ -44,6 +45,11 @@ class commerce_add_to_cart_extras_handler_field_quantity extends views_handler_f
       '#title' => t("Link products added to the cart from this View to this View's path if displayed as a page."),
       '#default_value' => $this->options['display_path'],
     );
+    $form['use_batch'] = array(
+      '#type' => 'checkbox',
+      '#title' => t("Should the add to cart operation be batch processed. This is particularly useful when there is a significant number of items to be added."),
+      '#default_value' => $this->options['use_batch'],
+    );
   }
 
   /**
@@ -90,7 +96,7 @@ class commerce_add_to_cart_extras_handler_field_quantity extends views_handler_f
 
   function views_form_submit($form, &$form_state) {
     global $user;
-
+    
     $field_name = $this->options['id'];
     $product_quantities = array();
     foreach (element_children($form[$field_name]) as $row_id) {
@@ -103,31 +109,39 @@ class commerce_add_to_cart_extras_handler_field_quantity extends views_handler_f
     }
 
     $products = commerce_product_load_multiple(array_keys($product_quantities));
-    foreach ($products as $product_id => $product) {
-      $quantity = $product_quantities[$product_id];
-      $line_item = commerce_product_line_item_new($product, $quantity);
-      $line_item->data['context']['product_ids'] = array($product_id);
-      $line_item->data['context']['add_to_cart_combine'] = $this->options['combine'];
-
-      // Add the display path to the line item's context data array if specified.
-      if ($this->view->display[$this->view->current_display]->display_plugin == 'page' &&
-        $this->options['display_path']) {
-        $line_item->data['context']['display_path'] = $this->view->display[$this->view->current_display]->display_options['path'];
-      }
 
-      // Store the View data in the context data array as well.
-      $line_item->data['context']['view'] = array(
-        'view_name' => $this->view->name,
-        'display_name' => $this->view->current_display,
-        'human_name' => $this->view->human_name,
-        'page' => $this->view->current_page,
-      );
-
-      commerce_cart_product_add($user->uid, $line_item, $this->options['combine']);
+    // Check if batch processing is enabled
+    if($this->options['use_batch']){
+      batch_set(commerce_add_to_cart_extras_batch_config($products, $product_quantities,$this->options['combine'], $this->view->display[$this->view->current_display]->display_plugin, $this->options['display_path'], $this->view->display[$this->view->current_display]->display_options['path'], $this->view->name, $this->view->current_display, $this->view->human_name, $this->view->current_page));
     }
+    else{
+      foreach ($products as $product_id => $product) {
+        $quantity = $product_quantities[$product_id];
+        $line_item = commerce_product_line_item_new($product, $quantity);
+        $line_item->data['context']['product_ids'] = array($product_id);
+        $line_item->data['context']['add_to_cart_combine'] = $this->options['combine'];
+
+        // Add the display path to the line item's context data array if specified.
+        if ($this->view->display[$this->view->current_display]->display_plugin == 'page' &&
+          $this->options['display_path']) {
+          $line_item->data['context']['display_path'] = $this->view->display[$this->view->current_display]->display_options['path'];
+        }
+
+        // Store the View data in the context data array as well.
+        $line_item->data['context']['view'] = array(
+          'view_name' => $this->view->name,
+          'display_name' => $this->view->current_display,
+          'human_name' => $this->view->human_name,
+          'page' => $this->view->current_page,
+        );
+
+        commerce_cart_product_add($user->uid, $line_item, $this->options['combine']);
+      }
 
-    if (count($product_quantities)) {
-      drupal_set_message(t('The selected products have been added to <a href="!cart-url">your cart</a>.', array('!cart-url' => url('cart'))));
+      if (count($product_quantities)) {
+        drupal_set_message(t('The selected products have been added to <a href="!cart-url">your cart</a>.', array('!cart-url' => url('cart'))));
+      }
     }
   }
+
 }
