diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js b/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js
index 57524a7cb404576bc19da11b30b54452833f5ab9..89bfd1342e9238e67ff3950cf75aa765d57770a5 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/get-totals.js
@@ -9,11 +9,11 @@ define(
         'jquery',
         '../model/quote',
         'Magento_Checkout/js/model/resource-url-manager',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/storage',
         'Magento_Checkout/js/model/totals'
     ],
-    function ($, quote, resourceUrlManager, messageList, storage, totals) {
+    function ($, quote, resourceUrlManager, errorProcessor, storage, totals) {
         "use strict";
         return function (callbacks, deferred) {
             deferred = deferred || $.Deferred();
@@ -36,9 +36,8 @@ define(
             ).error(
                 function (response) {
                     totals.isLoading(false);
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
                     deferred.reject();
+                    errorProcessor.process(response);
                 }
             );
 
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js b/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
index eabe01078de5e0bbeb9a788c30c21f6e313977ec..e68d89eebda1de5ae6355e622bd96211c1f6748e 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/place-order.js
@@ -8,11 +8,11 @@ define(
         'Magento_Checkout/js/model/url-builder',
         'mage/storage',
         'mage/url',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'Magento_Customer/js/model/customer',
         'underscore'
     ],
-    function (quote, urlBuilder, storage, url, messageList, customer, _) {
+    function (quote, urlBuilder, storage, url, errorProcessor, customer, _) {
         'use strict';
 
         return function (paymentData, redirectOnSuccess) {
@@ -50,8 +50,7 @@ define(
                 }
             ).fail(
                 function (response) {
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
index 4f1167970a41e3af06ac108be3e60aa44d63ad20..a2ba6ecb34cd0eef638a677d7bd557b9d450c37c 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/action/set-payment-information.js
@@ -7,10 +7,10 @@ define(
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/url-builder',
         'mage/storage',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'Magento_Customer/js/model/customer'
     ],
-    function (quote, urlBuilder, storage, messageList, customer) {
+    function (quote, urlBuilder, storage, errorProcessor, customer) {
         'use strict';
 
         return function () {
@@ -47,8 +47,7 @@ define(
                 }
             ).fail(
                 function (response) {
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js b/app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js
new file mode 100644
index 0000000000000000000000000000000000000000..85af889cf2b5a1d2eb35afd5f7ae0bc6fe8c91dd
--- /dev/null
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/error-processor.js
@@ -0,0 +1,24 @@
+/**
+ * Copyright © 2015 Magento. All rights reserved.
+ * See COPYING.txt for license details.
+ */
+define(
+    [
+        'mage/url',
+        'Magento_Ui/js/model/messageList'
+    ],
+    function (url, messageList) {
+        'use strict';
+
+        return {
+            process: function (response) {
+                if (response.status == 401) {
+                    window.location.replace(url.build('customer/account/login/'));
+                } else {
+                    var error = JSON.parse(response.responseText);
+                    messageList.addErrorMessage(error);
+                }
+            }
+        };
+    }
+);
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js
index 068891a5286964d5dedb4b8812669e45a6f3b5ca..19d7575249fbb7be05509f66620a9835bfe41e24 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/customer-address.js
@@ -10,9 +10,9 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/shipping-service',
         'Magento_Checkout/js/model/shipping-rate-registry',
-        'Magento_Ui/js/model/messageList'
+        'Magento_Checkout/js/model/error-processor'
     ],
-    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, messageList) {
+    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, errorProcessor) {
         "use strict";
         return {
             getRates: function(address) {
@@ -35,9 +35,8 @@ define(
 
                     ).fail(
                         function(response) {
-                            var error = JSON.parse(response.responseText);
-                            messageList.addErrorMessage(error);
-                            shippingService.setShippingRates([])
+                            shippingService.setShippingRates([]);
+                            errorProcessor.process(response);
                         }
                     ).always(
                         function () {
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js
index db5052ca0c39f44ddf2ed115ac1d7d94631f2c34..7c0f201cd0af4fc072a4b4d9b5883bcf83925939 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-rate-processor/new-address.js
@@ -9,9 +9,9 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/shipping-service',
         'Magento_Checkout/js/model/shipping-rate-registry',
-        'Magento_Ui/js/model/messageList'
+        'Magento_Checkout/js/model/error-processor'
     ],
-    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, messageList) {
+    function (resourceUrlManager, quote, storage, shippingService, rateRegistry, errorProcessor) {
         'use strict';
 
         return {
@@ -45,9 +45,8 @@ define(
                         }
                     ).fail(
                         function (response) {
-                            var error = JSON.parse(response.responseText);
-                            messageList.addErrorMessage(error);
                             shippingService.setShippingRates([]);
+                            errorProcessor.process(response);
                         }
                     ).always(
                         function () {
diff --git a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js
index 7233d429dc0691907a04b174452db883dbdc24df..e9e63e280773c84372f2a42bcf9428f67febba77 100644
--- a/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js
+++ b/app/code/Magento/Checkout/view/frontend/web/js/model/shipping-save-processor/default.js
@@ -11,9 +11,9 @@ define(
         'mage/storage',
         'Magento_Checkout/js/model/payment-service',
         'Magento_Checkout/js/model/payment/method-converter',
-        'Magento_Ui/js/model/messageList'
+        'Magento_Checkout/js/model/error-processor'
     ],
-    function (ko, quote, resourceUrlManager, storage, paymentService, methodConverter, messageList) {
+    function (ko, quote, resourceUrlManager, storage, paymentService, methodConverter, errorProcessor) {
         'use strict';
 
         return {
@@ -36,8 +36,7 @@ define(
                     }
                 ).fail(
                     function (response) {
-                        var error = JSON.parse(response.responseText);
-                        messageList.addErrorMessage(error);
+                        errorProcessor.process(response);
                     }
                 );
             }
diff --git a/app/code/Magento/Customer/view/frontend/web/js/model/customer.js b/app/code/Magento/Customer/view/frontend/web/js/model/customer.js
index 25654444d6cc5ee783b134afdf41c44eaac28bdf..c6a87925dea8ebb2d02e2efbd1ef95264c06fc1b 100644
--- a/app/code/Magento/Customer/view/frontend/web/js/model/customer.js
+++ b/app/code/Magento/Customer/view/frontend/web/js/model/customer.js
@@ -8,10 +8,9 @@ define(
         'jquery',
         'ko',
         'underscore',
-        'mage/storage',
         './address-list'
     ],
-    function($, ko, _, storage, addressList) {
+    function($, ko, _, addressList) {
         "use strict";
         var isLoggedIn = ko.observable(window.isCustomerLoggedIn),
             customerData = {};
diff --git a/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js b/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js
index 51e72540458efd1cd3a3f8fe564f148e9357a0b7..29f9240dec25c3f92a5b40ff654cce13d1bf4cf4 100644
--- a/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js
+++ b/app/code/Magento/GiftMessage/view/frontend/web/js/action/gift-options.js
@@ -8,9 +8,10 @@ define(
         '../model/url-builder',
         'mage/storage',
         'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/url'
     ],
-    function(urlBuilder, storage, messageList, url) {
+    function(urlBuilder, storage, messageList, errorProcessor, url) {
         "use strict";
         return function(giftMessage, remove) {
             url.setBaseUrl(giftMessage.getConfigValue('baseUrl'));
@@ -48,8 +49,7 @@ define(
                 }
             ).fail(
                 function(response) {
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js b/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js
index 80a6488fb285a34fcf91dc07693843ce731ed85f..8e52ec04063d8c6e0fe481bc8a35a7478a170bea 100644
--- a/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js
+++ b/app/code/Magento/SalesRule/view/frontend/web/js/action/cancel-coupon.js
@@ -14,11 +14,11 @@ define(
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/resource-url-manager',
         'Magento_Checkout/js/model/payment-service',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/storage',
         'Magento_Checkout/js/action/get-totals'
     ],
-    function (ko, $, quote, urlManager, paymentService, messageList, storage, getTotalsAction) {
+    function (ko, $, quote, urlManager, paymentService, errorProcessor, storage, getTotalsAction) {
         'use strict';
         return function (isApplied, isLoading) {
             var quoteId = quote.getQuoteId();
@@ -39,11 +39,10 @@ define(
                         );
                     });
                 }
-            ).error(
+            ).fail(
                 function (response) {
                     isLoading(false);
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };
diff --git a/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js b/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js
index a76500e4517208b0a166af5a7162b17ddcad9099..f723e038136d62cafd648952f27f3b9d23f1f5ca 100644
--- a/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js
+++ b/app/code/Magento/SalesRule/view/frontend/web/js/action/set-coupon-code.js
@@ -14,11 +14,11 @@ define(
         'Magento_Checkout/js/model/quote',
         'Magento_Checkout/js/model/resource-url-manager',
         'Magento_Checkout/js/model/payment-service',
-        'Magento_Ui/js/model/messageList',
+        'Magento_Checkout/js/model/error-processor',
         'mage/storage',
         'Magento_Checkout/js/action/get-totals'
     ],
-    function (ko, $, quote, urlManager, paymentService, messageList, storage, getTotalsAction) {
+    function (ko, $, quote, urlManager, paymentService, errorProcessor, storage, getTotalsAction) {
         'use strict';
         return function (couponCode, isApplied, isLoading) {
             var quoteId = quote.getQuoteId();
@@ -42,11 +42,10 @@ define(
                         });
                     }
                 }
-            ).error(
+            ).fail(
                 function (response) {
                     isLoading(false);
-                    var error = JSON.parse(response.responseText);
-                    messageList.addErrorMessage(error);
+                    errorProcessor.process(response);
                 }
             );
         };