diff --git a/bin/backend/controls/articles/ArticleList.js b/bin/backend/controls/articles/ArticleList.js
index fe840c577f129c8f1e8d0ef03802f79b1a92a21c..4f408f9dcbad739aa1f01fc9e9be46b46b041ac9 100644
--- a/bin/backend/controls/articles/ArticleList.js
+++ b/bin/backend/controls/articles/ArticleList.js
@@ -196,7 +196,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         unserialize: function (list) {
             const self = this;
             let data = {};
-
+            
             if (typeOf(list) === 'string') {
                 try {
                     data = JSON.stringify(list);
@@ -489,6 +489,31 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             this.$priceFactors = newList;
         },
 
+        /**
+         * add a price factor
+         *
+         * {
+         *      calculation      : 2,
+         *      calculation_basis: 2,
+         *      description      : Form.elements.title.value,
+         *      identifier       : "",
+         *      index            : priority,
+         *      nettoSum         : data.nettoSum,
+         *      nettoSumFormatted: data.nettoSumFormatted,
+         *      sum              : data.sum,
+         *      sumFormatted     : data.sumFormatted,
+         *      title            : Form.elements.title.value,
+         *      value            : data.sum,
+         *      valueText        : data.sumFormatted,
+         *      vat              : Form.elements.vat.value,
+         *      visible          : 1
+         * }
+         * @param priceFactor
+         */
+        addPriceFactor: function (priceFactor) {
+            this.$priceFactors.push(priceFactor);
+        },
+
         /**
          * Sorting
          */
diff --git a/bin/backend/controls/articles/ArticleSummary.Window.html b/bin/backend/controls/articles/ArticleSummary.Window.html
index c105bd51802bf560badbcd00cf92a57c5f841818..7dea36f806a80bd39db678dd4e6c9a836cf0dc62 100644
--- a/bin/backend/controls/articles/ArticleSummary.Window.html
+++ b/bin/backend/controls/articles/ArticleSummary.Window.html
@@ -1,4 +1,14 @@
 <table class="data-table data-table-flexbox quiqqer-invoice-backend-temporaryInvoice-summaryWin-priceFactors">
+    <thead>
+    <tr>
+        <th>
+            <button name="add-pricefactor" disabled class="qui-button" style="float: right">
+                <span class="fa fa plus"></span>
+                <span>Preisfaktor hinzufügen</span>
+            </button>
+        </th>
+    </tr>
+    </thead>
     <tbody>
     {{#priceFactors}}
     <tr data-index="{{index}}">
diff --git a/bin/backend/controls/articles/ArticleSummary.js b/bin/backend/controls/articles/ArticleSummary.js
index 132018ec75c220cb0a15e0459a4dcbb6974b6324..14bce3f13b2fe9dad2eab5165aa78be312144a1b 100644
--- a/bin/backend/controls/articles/ArticleSummary.js
+++ b/bin/backend/controls/articles/ArticleSummary.js
@@ -60,8 +60,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
             const showPosSummary = this.getAttribute('showPosSummary');
 
             this.$Elm = new Element('div', {
-                'class': 'quiqqer-erp-backend-temporaryErp-summary',
-                html   : Mustache.render(template, {
+                'data-qui': 'package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary',
+                'class'   : 'quiqqer-erp-backend-temporaryErp-summary',
+                html      : Mustache.render(template, {
                     showPosSummary: showPosSummary,
                     labelPosInfo  : QUILocale.get(lg, 'article.summary.tpl.labelPosInfo'),
                     labelNet      : QUILocale.get(lg, 'article.summary.tpl.labelNet'),
@@ -147,6 +148,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
             List.addEvent('onArticleSelect', this.$refreshArticleSelect);
         },
 
+        // region summary
+
         /**
          * Open the summary with price factors
          */
@@ -155,23 +158,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
                 return;
             }
 
-            const self = this;
-
-            require(['qui/controls/windows/Popup'], function (Popup) {
-                new Popup({
-                    title    : QUILocale.get('quiqqer/erp', 'article.summary.window.title'),
-                    buttons  : false,
-                    maxHeight: 600,
-                    maxWidth : 600,
-                    events   : {
-                        onCreate: function (Win) {
-                            Win.Loader.show();
-
-                            self.$refreshSummaryContent(Win).then(function () {
-                                Win.Loader.hide();
-                            });
-                        }
-                    }
+            require([
+                'package/quiqqer/erp/bin/backend/controls/articles/windows/PriceFactors'
+            ], (PriceFactorWindow) => {
+                new PriceFactorWindow({
+                    ArticleList: this.getAttribute('List')
                 }).open();
             });
         },
@@ -226,6 +217,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleSummary', [
             });
         },
 
+        //endregion
+
         /**
          * event: onArticleSelect
          *
diff --git a/bin/load.js b/bin/load.js
index 1a2c28369faffdfddcdc5de2a7710e9cd655ccb7..e57192d8e7311d3c76bfcfbdf83fdcbdbe90f538 100644
--- a/bin/load.js
+++ b/bin/load.js
@@ -3,32 +3,30 @@ document.addEvent('domready', function () {
 
     require([
         'qui/QUI',
-        'package/quiqqer/erp/bin/backend/controls/Panel'
-    ], function (QUI, Panel) {
-        var loadExecute = 0;
+        'package/quiqqer/erp/bin/backend/controls/Panel',
+        'package/quiqqer/erp/bin/backend/controls/articles/windows/PriceFactors',
+        'qui/controls/buttons/Separator',
+        'Locale'
+    ], function (QUI, Panel, PriceFactorsWindow, Separator, QUILocale) {
+        let loadExecute = 0;
 
-        var load = function () {
+        const load = function () {
             loadExecute++;
 
             if (loadExecute === 10) {
                 return;
             }
-            var ColumnElm = document.getElement('.qui-column');
+
+            const ColumnElm = document.getElement('.qui-column');
 
             if (!ColumnElm) {
                 load.delay(100);
                 return;
             }
 
-            // require([
-            //     'package/quiqqer/customer/bin/backend/controls/CreateCustomerWindow'
-            // ], function (Win) {
-            //     new Win().open();
-            // });
-
-            var Column = QUI.Controls.getById(ColumnElm.get('data-quiid'));
+            const Column = QUI.Controls.getById(ColumnElm.get('data-quiid'));
 
-            var panels = Column.getChildren(),
+            let panels = Column.getChildren(),
                 length = Object.getLength(panels);
 
             if (length === 0) {
@@ -36,7 +34,7 @@ document.addEvent('domready', function () {
                 return;
             }
 
-            for (var i in panels) {
+            for (let i in panels) {
                 if (!panels.hasOwnProperty(i)) {
                     continue;
                 }
@@ -50,5 +48,49 @@ document.addEvent('domready', function () {
         };
 
         QUI.addEvent('quiqqerLoaded', load);
+
+
+        // extend panels
+        QUI.addEvent('quiqqerOrderActionButtonCreate', function (Panel, Actions) {
+            Actions.appendChild(new Separator());
+
+            Actions.appendChild({
+                name    : 'priceFactors',
+                text    : QUILocale.get('quiqqer/erp', 'panel.btn.priceFactors'),
+                icon    : 'fa fa-outdent',
+                disabled: true,
+                events  : {
+                    onClick: function () {
+                        const quiId = Panel.getElm().getElement(
+                            '[data-qui="package/quiqqer/erp/bin/backend/controls/articles/ArticleList"]'
+                        ).get('data-quiid');
+
+                        new PriceFactorsWindow({
+                            ArticleList: QUI.Controls.getById(quiId)
+                        }).open();
+                    }
+                }
+            });
+
+            Actions.appendChild(new Separator());
+
+            QUI.fireEvent('quiqqerOrderActionButtonPriceFactors', [
+                Panel,
+                Actions
+            ]);
+
+            // factors
+            const PriceFactors = Actions.getChildren().filter(function (Item) {
+                return Item.getAttribute('name') === 'priceFactors';
+            })[0];
+
+            Panel.addEvent('categoryEnter', function (Panel, Btn) {
+                if (Btn.getAttribute('name') === 'articles') {
+                    PriceFactors.enable();
+                } else {
+                    PriceFactors.disable();
+                }
+            });
+        });
     });
 });
diff --git a/locale.xml b/locale.xml
index ffcb8b8e4ca5cac0ee3bf63c65dd71a63d1c9cca..adf7548303d57743feba82256907828fa26dc556 100644
--- a/locale.xml
+++ b/locale.xml
@@ -1291,6 +1291,15 @@ Allowed characters: Letters, numbers and _ ä ö ü ß]]></en>
             <en><![CDATA[Product attributes]]></en>
         </locale>
 
+        <locale name="panel.btn.priceFactors">
+            <de><![CDATA[Preisfaktoren bearbeiten]]></de>
+            <en><![CDATA[Edit pricefactors]]></en>
+        </locale>
+        <locale name="pricefactors.summary.window.title">
+            <de><![CDATA[Preisfaktoren bearbeiten]]></de>
+            <en><![CDATA[Edit pricefactors]]></en>
+        </locale>
+
         <locale name="controls.QuantityUnitWindow.title">
             <de><![CDATA[Mengeneinheit]]></de>
             <en><![CDATA[Quantity unit]]></en>
@@ -1307,5 +1316,45 @@ Allowed characters: Letters, numbers and _ ä ö ü ß]]></en>
                 You have selected a variant parent. Please choose a variant.
             ]]></en>
         </locale>
+
+        <locale name="calculationBasis">
+            <de><![CDATA[Berechnungs-Grundlage]]></de>
+            <en><![CDATA[Calculation basis]]></en>
+        </locale>
+        <locale name="calculationBasis.netto">
+            <de><![CDATA[Netto]]></de>
+            <en><![CDATA[Netto]]></en>
+        </locale>
+        <locale name="calculationBasis.calculationBasisCalcPrice">
+            <de><![CDATA[Kalkulierter Preis]]></de>
+            <en><![CDATA[Calculated price]]></en>
+        </locale>
+        <locale name="calculationBasis.calculationBasisCalcBrutto">
+            <de><![CDATA[
+            Kalkulierter Brutto Preis (Geht von dem Nettopreis aus, welcher alle Preisfaktoren beinhaltet, wie z.B. Auswahllisten)
+            ]]></de>
+            <en><![CDATA[
+            Calculated brutto price (Expects from the netto price which includes all price factors, like attribute lists)
+            ]]></en>
+        </locale>
+
+        <locale name="title.price">
+            <de><![CDATA[Preis]]></de>
+            <en><![CDATA[Price]]></en>
+        </locale>
+        <locale name="title.title">
+            <de><![CDATA[Titel]]></de>
+            <en><![CDATA[Title]]></en>
+        </locale>
+        <locale name="title.priority">
+            <de><![CDATA[Priorität]]></de>
+            <en><![CDATA[Priority]]></en>
+        </locale>
+        <locale name="title.vat">
+            <de><![CDATA[MwSt.]]></de>
+            <en><![CDATA[Vat]]></en>
+        </locale>
+
+
     </groups>
 </locales>
diff --git a/src/QUI/ERP/Accounting/Calc.php b/src/QUI/ERP/Accounting/Calc.php
index 8a0835245c7784e5a81d2991b486f8999d128543..548274aa87f19e1f63a0d9f3b1b57b88c2caa1ac 100644
--- a/src/QUI/ERP/Accounting/Calc.php
+++ b/src/QUI/ERP/Accounting/Calc.php
@@ -14,7 +14,6 @@
 use QUI\ERP\Accounting\Invoice\InvoiceTemporary;
 use QUI\ERP\Money\Price;
 use QUI\Interfaces\Users\User as UserInterface;
-use QUI\ERP\Currency\Handler as CurrencyHandler;
 
 use function array_map;
 use function array_sum;
@@ -72,7 +71,7 @@ class Calc
     /**
      * Basis brutto
      * include all price factors (from netto calculated price)
-     * warning: its not brutto VAT
+     * warning: it's not brutto VAT
      *
      * geht vnn der netto basis aus, welche alle price faktoren schon beinhaltet
      * alle felder sind in diesem price schon enthalten