diff --git a/.eslintrc.json b/.eslintrc.json
index 38cee1aa3be474e9a3d6d7e449b1fdee822518c1..fc5c94a71805430c29fff261917a2fc32407eb06 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -21,7 +21,8 @@
     "no-console": ["warn", { "allow": ["warn", "error"] }],
     "no-unneeded-ternary": "warn",
 
-    "block-spacing" : ["warn", "always"],
+    "block-spacing": ["warn", "always"],
+    "comma-spacing": ["warn", { "before": false, "after": true }],
     "indent": ["error", 2],
     "keyword-spacing": ["warn", { "before": true, "after": true }],
     "linebreak-style": ["error", "unix"],
diff --git a/themes/bootstrap3/js/cart.js b/themes/bootstrap3/js/cart.js
index 6e3e1fc7f460ce32be6df259200d907774e5059d..79b81fd33dc342bc852eea697a1e858acabbd475 100644
--- a/themes/bootstrap3/js/cart.js
+++ b/themes/bootstrap3/js/cart.js
@@ -70,7 +70,7 @@ VuFind.register('cart', function Cart() {
     updateCount();
     return true;
   }
-  function removeItem(id,source) {
+  function removeItem(id, source) {
     var cartItems = _getItems();
     var cartSources = _getSources();
     // Find
@@ -88,11 +88,11 @@ VuFind.register('cart', function Cart() {
           break;
         }
       }
-      cartItems.splice(cartIndex,1);
+      cartItems.splice(cartIndex, 1);
       // Remove unused sources
       if (!saveSource) {
         var oldSources = cartSources.slice(0);
-        cartSources.splice(sourceIndex,1);
+        cartSources.splice(sourceIndex, 1);
         // Adjust source index characters
         for (var j = cartItems.length; j--;) {
           var si = cartItems[j].charCodeAt(0) - 65;
@@ -174,11 +174,11 @@ VuFind.register('cart', function Cart() {
         var $parent = $(this).parent();
         $parent.find('.cart-add.correct,.cart-remove.correct').removeClass('correct hidden');
         $parent.find('.cart-add').click(function cartAddClick() {
-          addItem(currentId,currentSource);
+          addItem(currentId, currentSource);
           $parent.find('.cart-add,.cart-remove').toggleClass('hidden');
         });
         $parent.find('.cart-remove').click(function cartRemoveClick() {
-          removeItem(currentId,currentSource);
+          removeItem(currentId, currentSource);
           $parent.find('.cart-add,.cart-remove').toggleClass('hidden');
         });
       });
@@ -188,7 +188,7 @@ VuFind.register('cart', function Cart() {
       _registerUpdate($form);
     }
     $("#updateCart, #bottom_updateCart").popover({content: '', html: true, trigger: 'manual'});
-  };
+  }
 
   // Reveal
   return {
diff --git a/themes/bootstrap3/js/common.js b/themes/bootstrap3/js/common.js
index 41e07f33b560c98cef62a46b44e30369e3ab4add..5b6c6555a4c8b520e968bd0fee97ab0a6704567d 100644
--- a/themes/bootstrap3/js/common.js
+++ b/themes/bootstrap3/js/common.js
@@ -90,7 +90,7 @@ function deparam(url) {
       continue;
     }
     if (name.substring(name.length - 2) === '[]') {
-      name = name.substring(0,name.length - 2);
+      name = name.substring(0, name.length - 2);
       if (!request[name]) {
         request[name] = [];
       }
diff --git a/themes/bootstrap3/js/hierarchyTree.js b/themes/bootstrap3/js/hierarchyTree.js
index 4035c78d77c2e3f49c50ab70b12488a4d9880ef8..3acdf3e48b30b4b228c0d52db2c220ab6a282511 100644
--- a/themes/bootstrap3/js/hierarchyTree.js
+++ b/themes/bootstrap3/js/hierarchyTree.js
@@ -182,7 +182,7 @@ $(document).ready(function hierarchyTreeReady() {
       }
     })
     .jstree({
-      plugins: ['search','types'],
+      plugins: ['search', 'types'],
       core: {
         data: function jsTreeCoreData(obj, cb) {
           $.ajax({
diff --git a/themes/bootstrap3/js/lightbox.js b/themes/bootstrap3/js/lightbox.js
index 089307b53d664690c5c98aab0300e62c0cbd1a88..b3d42e2fa6ca8c5055b62c36de91d18cbfae12b7 100644
--- a/themes/bootstrap3/js/lightbox.js
+++ b/themes/bootstrap3/js/lightbox.js
@@ -23,7 +23,7 @@ VuFind.register('lightbox', function Lightbox() {
       _lightboxTitle = '';
     }
     _modal.modal('handleUpdate');
-  };
+  }
   function _emit(msg, _details) {
     var details = _details || {};
     // Fallback to document.createEvent() if creating a new CustomEvent fails (e.g. IE 11)
@@ -62,7 +62,7 @@ VuFind.register('lightbox', function Lightbox() {
     _html('<div class="flash-message alert alert-' + type + '">' + message + '</div>'
         + '<button class="btn btn-default" data-dismiss="modal">' + VuFind.translate('close') + '</button>');
     _modal.modal('show');
-  };
+  }
   function flashMessage(message, _type) {
     var type = _type || 'info';
     _modalBody.find('.flash-message,.fa.fa-spinner').remove();
@@ -176,10 +176,10 @@ VuFind.register('lightbox', function Lightbox() {
         showAlert(VuFind.translate('error_occurred'), 'danger');
       });
     return _xhr;
-  };
+  }
   function reload() {
     ajax({ url: _currentUrl || _originalUrl });
-  };
+  }
 
   /**
    * Evaluate a callback
diff --git a/themes/bootstrap3/js/pubdate_vis.js b/themes/bootstrap3/js/pubdate_vis.js
index 9863e90040aafe47bcbf6b20d6a4d9f225bd0b8e..97b417ff54a3990fb5bd124c52b6cf24579346f8 100644
--- a/themes/bootstrap3/js/pubdate_vis.js
+++ b/themes/bootstrap3/js/pubdate_vis.js
@@ -92,7 +92,7 @@ function loadVis(facetFields, searchParams, baseURL, zooming) {
         for (var i = 0; i < val.data.length; i++) {
           if (val.data[i][0] < val.min - 5 || val.data[i][0] > parseInt(val.max, 10) + 5) {
             //remove this
-            val.data.splice(i,1);
+            val.data.splice(i, 1);
             i--;
           }
         }
@@ -109,13 +109,13 @@ function loadVis(facetFields, searchParams, baseURL, zooming) {
       var plot = $.plot(placeholder, [val], options);
       if (hasFilter) {
         // mark pre-selected area
-        plot.setSelection({ x1: val.min , x2: val.max});
+        plot.setSelection({ x1: val.min, x2: val.max});
       }
       // selection handler
       placeholder.bind("plotselected", function plotselected(event, ranges) {
         var from = Math.floor(ranges.xaxis.from);
         var to = Math.ceil(ranges.xaxis.to);
-        window.location.href = val.removalURL + '&daterange[]=' + key + '&' + key + 'to=' + PadDigits(to,4) + '&' + key + 'from=' + PadDigits(from,4);
+        window.location.href = val.removalURL + '&daterange[]=' + key + '&' + key + 'to=' + PadDigits(to, 4) + '&' + key + 'from=' + PadDigits(from, 4);
       });
 
       if (hasFilter) {