diff --git a/config/vufind/config.ini b/config/vufind/config.ini
index a38ca1006bd4bae815f430457c17bbd0b970a34b..a7ad4a8ab1ba325ecdbb876eea1f732dc91cad3b 100644
--- a/config/vufind/config.ini
+++ b/config/vufind/config.ini
@@ -995,6 +995,10 @@ RIS = false
 [BulkExport]
 enabled = true
 options = MARC:MARCXML:EndNote:EndNoteWeb:RefWorks:BibTeX:RIS
+; Export behavior to use when no bulkExportType setting is found in the matching
+; format section of export.ini; default is 'link' if not overridden below. See
+; export.ini for more details on available options.
+;defaultType = download
 
 ;AddThis is optional. It uses the Add This tool available from www.addthis.com
 ; and requires the username generated when an analytics account is registered.
diff --git a/config/vufind/export.ini b/config/vufind/export.ini
index 6866fa073586d530cff4024012f372394691397b..04a4702aac52a7f5d4901914b67b4ef32d79b420 100644
--- a/config/vufind/export.ini
+++ b/config/vufind/export.ini
@@ -25,6 +25,12 @@
 ;             {config...} setting above, except result will be URL-encoded.
 ; requiredMethods[] - a repeatable field indicating methods which must be available
 ;     on the record driver object in order to allow export in this format.
+; bulkExportType - [ "link" | "download" ] - link renders a download link in the UI,
+;     download offers to save the export-file directly; overrides the defaultType
+;     setting found in the [BulkExport] section of config.ini. This distinction
+;     currently only affects users with Javascript enabled; the 'download' option
+;     cannot be implemented in a user-friendly way when Javascript is disabled.
+
 [RefWorks]
 requiredMethods[] = getTitle
 redirectUrl = "{config|RefWorks|url|http://www.refworks.com}/express/expressimport.asp?vendor={encodedConfig|RefWorks|vendor|VuFind}&filter=RefWorks%20Tagged%20Format&url={encodedCallback}"
diff --git a/module/VuFind/src/VuFind/Controller/AjaxController.php b/module/VuFind/src/VuFind/Controller/AjaxController.php
index 7089d8e119cdf0c6f5746c52a2b71bb46f012f31..e62040caa03eede252059f55a124dadecc50c362 100644
--- a/module/VuFind/src/VuFind/Controller/AjaxController.php
+++ b/module/VuFind/src/VuFind/Controller/AjaxController.php
@@ -1351,6 +1351,7 @@ class AjaxController extends AbstractBase
                 'result' => $this->translate('Done'),
                 'result_additional' => $html,
                 'needs_redirect' => $export->needsRedirect($format),
+                'export_type' => $export->getBulkExportType($format),
                 'result_url' => $url
             ], self::STATUS_OK
         );
diff --git a/module/VuFind/src/VuFind/Export.php b/module/VuFind/src/VuFind/Export.php
index a1a6d6e79ce65b6d1d4e3d62d800bc190df1f251..8e073e67b48b89829b9ad6246e313bcac39c03cc 100644
--- a/module/VuFind/src/VuFind/Export.php
+++ b/module/VuFind/src/VuFind/Export.php
@@ -338,4 +338,24 @@ class Export
         return isset($this->exportConfig->$format->label)
             ? $this->exportConfig->$format->label : $format;
     }
+
+    /**
+     * Get the bulk export type for the specified export format.
+     *
+     * @param string $format Format identifier
+     *
+     * @return string
+     */
+    public function getBulkExportType($format)
+    {
+        // if exportType is set on per-format basis in export.ini then use it
+        if (isset($this->exportConfig->$format->bulkExportType)) {
+            return $this->exportConfig->$format->bulkExportType;
+        }
+
+        // else check if export type is set in config.ini
+        return isset($this->mainConfig->BulkExport->defaultType)
+            ? $this->mainConfig->BulkExport->defaultType : 'link';
+    }
+
 }
diff --git a/themes/blueprint/js/lightbox.js b/themes/blueprint/js/lightbox.js
index 4ba745d8c9debbdca4123e88c6b7aa01c4a98b18..467fd925e432a213060cd81cdeaff01c9cb8e0e9 100644
--- a/themes/blueprint/js/lightbox.js
+++ b/themes/blueprint/js/lightbox.js
@@ -519,6 +519,11 @@ function registerAjaxCartExport() {
             url: url,
             dataType: 'json',
             success: function(response, statusText, xhr, $form) {
+               if(response.data.export_type == 'download') {
+                   document.location.href = response.data.result_url;
+                   hideLightbox();
+                   return false;
+                } 
                 if (response.status == 'OK') {
                     $form.parent().empty().append(response.data.result_additional);
                 } else {
diff --git a/themes/bootstrap3/js/common.js b/themes/bootstrap3/js/common.js
index 9f0dc0306f706b8c1e8232a59d830bcdf323edeb..2bab168d847cc9f91aa93ec60a787ab9f8877e02 100644
--- a/themes/bootstrap3/js/common.js
+++ b/themes/bootstrap3/js/common.js
@@ -472,8 +472,10 @@ $(document).ready(function() {
       dataType:'json',
       data:Lightbox.getFormData($(evt.target)),
       success:function(data) {
-        if(data.data.needs_redirect) {
+        if(data.data.export_type == 'download' || data.data.needs_redirect) {
           document.location.href = data.data.result_url;
+          Lightbox.close();
+          return false;
         } else {
           Lightbox.changeContent(data.data.result_additional);
         }