diff --git a/bin/backend/controls/articles/ArticleList.js b/bin/backend/controls/articles/ArticleList.js
index 76da549ae566c47ea69d4954b8596d5a95df4f62..1a3041e029bea453d426b19507d242e5ad84d60e 100644
--- a/bin/backend/controls/articles/ArticleList.js
+++ b/bin/backend/controls/articles/ArticleList.js
@@ -59,7 +59,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             this.$user     = {};
             this.$sorting  = false;
 
-            this.$calculationTimer = null;
+            this.$calculationTimer     = null;
+            this.$isIncalculationFrame = false;
 
             this.$calculations = {
                 currencyData: {},
@@ -374,6 +375,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         $executeCalculation: function () {
             var self = this;
 
+            if (this.$isIncalculationFrame) {
+                self.fireEvent('calc', [self, self.$calculations]);
+
+                return Promise.resolve(self.$calculations);
+            }
+
             if (this.$calculationRunning) {
                 return new Promise(function (resolve) {
                     var trigger = function () {
@@ -393,8 +400,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                 });
 
                 QUIAjax.get('package_quiqqer_erp_ajax_products_calc', function (result) {
-                    self.$calculations       = result;
-                    self.$calculationRunning = false;
+                    self.$calculations         = result;
+                    self.$isIncalculationFrame = true;
+                    self.$calculationRunning   = false;
+
+                    // performance double request -> quiqqer/invoice#104
+                    setTimeout(function () {
+                        self.$isIncalculationFrame = false;
+                    }, 100);
+
                     self.fireEvent('calc', [self, result]);
                     resolve(result);
                 }, {