diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..b8d20acb6c365ad8036a7b36d47dabd876d08efa
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,3 @@
+include:
+  - project: 'quiqqer/stabilization/semantic-release'
+    file: '/ci-templates/.gitlab-ci.yml'
diff --git a/LICENCE b/LICENSE
similarity index 100%
rename from LICENCE
rename to LICENSE
diff --git a/bin/backend/controls/articles/Article.js b/bin/backend/controls/articles/Article.js
index fd0d73961b4f5e46f61ae49c25eea8496a20131c..1b1d7b52c19dc131592730bf47c6aa1587e7bf23 100644
--- a/bin/backend/controls/articles/Article.js
+++ b/bin/backend/controls/articles/Article.js
@@ -49,7 +49,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
     return new Class({
 
         Extends: QUIControl,
-        Type   : 'package/quiqqer/erp/bin/backend/controls/articles/Article',
+        Type: 'package/quiqqer/erp/bin/backend/controls/articles/Article',
 
         Binds: [
             '$onEditTitle',
@@ -72,41 +72,41 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         ],
 
         options: {
-            id          : false,
-            articleNo   : '',
-            description : '',
-            discount    : '-',
-            position    : 0,
-            price       : 0,
-            quantity    : 1,
+            id: false,
+            articleNo: '',
+            description: '',
+            discount: '-',
+            position: 0,
+            price: 0,
+            quantity: 1,
             quantityUnit: '',
-            title       : '',
-            unitPrice   : 0,
-            vat         : '',
-            'class'     : 'QUI\\ERP\\Accounting\\Article',
-            params      : false, // mixed value for API Articles
-            currency    : false,
+            title: '',
+            unitPrice: 0,
+            vat: '',
+            'class': 'QUI\\ERP\\Accounting\\Article',
+            params: false, // mixed value for API Articles
+            currency: false,
 
             showSelectCheckbox: false,  // select this article via checkbox instead of click
 
             // Determine article fields that can be edited
             editFields: {
-                articleNo          : true,
+                articleNo: true,
                 titleAndDescription: true,
-                quantity           : true,
-                quantityUnit       : true,
-                unitPrice          : true,
-                vat                : true,
-                discount           : true
+                quantity: true,
+                quantityUnit: true,
+                unitPrice: true,
+                vat: true,
+                discount: true
             },
 
             customFields: {},   // Custom fields (=fields where user can select/input a value)
 
             User: false,        // special user object (see this.addUser)
 
-            deletable  : true,   // show "delete" button
+            deletable: true,   // show "delete" button
             replaceable: true,   // show "replace" button
-            calcByList : true     // calculate article prices by the associated ArticleList
+            calcByList: true     // calculate article prices by the associated ArticleList
         },
 
         initialize: function (options) {
@@ -172,20 +172,20 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 let FieldDataClone = Object.clone(FieldData);
 
                 CustomFieldValues[fieldId] = {
-                    title    : FieldDataClone.title,
+                    title: FieldDataClone.title,
                     valueText: nl2br(FieldDataClone.valueText)
                 };
             }
 
             this.$Elm.set({
-                html      : Mustache.render(template, {
+                html: Mustache.render(template, {
                     showSelectCheckbox: showSelectCheckbox,
-                    customFields      : Object.values(CustomFieldValues),
-                    buttonReplace     : QUILocale.get(lg, 'articleList.article.button.replace'),
-                    buttonDelete      : QUILocale.get(lg, 'articleList.article.button.delete'),
+                    customFields: Object.values(CustomFieldValues),
+                    buttonReplace: QUILocale.get(lg, 'articleList.article.button.replace'),
+                    buttonDelete: QUILocale.get(lg, 'articleList.article.button.delete'),
                 }),
                 'tabindex': -1,
-                styles    : {
+                styles: {
                     outline: 'none'
                 }
             });
@@ -329,15 +329,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             }).inject(this.$Total, 'after');
 
             this.$Loader = new Element('div', {
-                html  : '<span class="fa fa-spinner fa-spin"></span>',
+                html: '<span class="fa fa-spinner fa-spin"></span>',
                 styles: {
                     background: '#fff',
-                    display   : 'none',
-                    left      : 0,
-                    padding   : 10,
-                    position  : 'absolute',
-                    top       : 0,
-                    width     : '100%'
+                    display: 'none',
+                    left: 0,
+                    padding: 10,
+                    position: 'absolute',
+                    top: 0,
+                    width: '100%'
                 }
             }).inject(this.$Position);
 
@@ -361,9 +361,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
                 new QUIButton({
                     'class': 'quiqqer-erp-backend-erpArticle-text-btn-editor',
-                    title  : QUILocale.get(lg, 'erp.articleList.article.button.editor'),
-                    icon   : 'fa fa-edit',
-                    events : {
+                    title: QUILocale.get(lg, 'erp.articleList.article.button.editor'),
+                    icon: 'fa fa-edit',
+                    events: {
                         onClick: this.$onEditDescription
                     }
                 }).inject(this.$Text);
@@ -488,7 +488,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     }
 
                     Node.set({
-                        html : text,
+                        html: text,
                         title: text
                     });
                 };
@@ -516,7 +516,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 if (typeof this.$bruttoCalc !== 'undefined' &&
                     typeof this.$bruttoCalc.display_unitPrice !== 'undefined') {
                     this.$UnitPriceBrutto.set('html', this.$bruttoCalc.display_unitPrice);
-                    this.$UnitPriceBrutto.set('data-value', this.$bruttoCalc.unitPrice);
+                    //this.$UnitPriceBrutto.set('data-value', this.$bruttoCalc.unitPrice);
+                    this.$UnitPriceBrutto.set('data-value', this.$bruttoCalc.calculated.basisPrice);
                 }
 
                 if (typeof this.$bruttoCalc !== 'undefined' &&
@@ -541,8 +542,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             let Calc;
 
             const self = this,
-                  attr = self.getAttributes(),
-                  pos  = parseInt(attr.position);
+                attr = self.getAttributes(),
+                pos = parseInt(attr.position);
 
             let calcByList = false;
 
@@ -553,12 +554,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                 Calc = new Promise(function (resolve, reject) {
                     QUIAjax.get('package_quiqqer_erp_ajax_products_calc', resolve, {
                         'package': 'quiqqer/erp',
-                        onError  : reject,
-                        articles : JSON.encode({
+                        onError: reject,
+                        articles: JSON.encode({
                             articles: [attr]
                         }),
-                        user     : JSON.encode(self.$user),
-                        currency : self.getAttribute('currency')
+                        user: JSON.encode(self.$user),
+                        currency: self.getAttribute('currency')
                     });
                 });
             }
@@ -633,8 +634,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
                 Currency.getCurrency(currency).then((currency) => {
                     this.$Formatter = QUILocale.getNumberFormatter({
-                        style                : 'currency',
-                        currency             : currency.code,
+                        style: 'currency',
+                        currency: currency.code,
                         minimumFractionDigits: currency.precision,
                         maximumFractionDigits: currency.precision
                     });
@@ -644,8 +645,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     console.error(err);
 
                     this.$Formatter = QUILocale.getNumberFormatter({
-                        style                : 'currency',
-                        currency             : 'EUR',
+                        style: 'currency',
+                        currency: 'EUR',
                         minimumFractionDigits: 2,
                         maximumFractionDigits: 2
                     });
@@ -838,7 +839,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         setDiscount: function (discount) {
             const self = this;
             let value = '',
-                type  = '';
+                type = '';
 
             if (discount === '' || !discount) {
                 discount = '-';
@@ -947,14 +948,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
          */
         openDeleteDialog: function () {
             new QUIConfirm({
-                icon       : 'fa fa-trash',
-                texticon   : 'fa fa-trash',
-                title      : QUILocale.get(lg, 'dialog.delete.article.title'),
+                icon: 'fa fa-trash',
+                texticon: 'fa fa-trash',
+                title: QUILocale.get(lg, 'dialog.delete.article.title'),
                 information: QUILocale.get(lg, 'dialog.delete.article.information'),
-                text       : QUILocale.get(lg, 'dialog.delete.article.text'),
-                maxHeight  : 400,
-                maxWidth   : 600,
-                events     : {
+                text: QUILocale.get(lg, 'dialog.delete.article.text'),
+                maxHeight: 400,
+                maxWidth: 600,
+                events: {
                     onSubmit: this.remove.bind(this)
                 }
             }).open();
@@ -987,14 +988,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             const self = this;
 
             new QUIConfirm({
-                title    : QUILocale.get(lg, 'dialog.edit.description.title', {
-                    articleNo   : this.getAttribute('articleNo'),
+                title: QUILocale.get(lg, 'dialog.edit.description.title', {
+                    articleNo: this.getAttribute('articleNo'),
                     articleTitle: this.getAttribute('title')
                 }),
-                icon     : 'fa fa-edit',
+                icon: 'fa fa-edit',
                 maxHeight: 600,
-                maxWidth : 800,
-                events   : {
+                maxWidth: 800,
+                events: {
                     onOpen: function (Win) {
                         Win.Loader.show();
 
@@ -1006,8 +1007,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
                         Content.set({
                             html: '' +
-                                  '<label><input type="text" name="title" /></label>' +
-                                  '<div class="quiqqer-erp-dialog-edit-article-description-editor"></div>'
+                                '<label><input type="text" name="title" /></label>' +
+                                '<div class="quiqqer-erp-dialog-edit-article-description-editor"></div>'
                         });
 
                         const Title = Content.getElement('[name="title"]');
@@ -1028,47 +1029,47 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                                     [
                                         [
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "Source"
                                             },
                                             {
                                                 type: "separator"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "Bold"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "Italic"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "Underline"
                                             },
                                             {
                                                 type: "separator"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "FontSize"
                                             },
                                             {
                                                 type: "separator"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "RemoveFormat"
                                             },
                                             {
                                                 type: "separator"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "NumberedList"
                                             },
                                             {
-                                                type  : "button",
+                                                type: "button",
                                                 button: "BulletedList"
                                             }
                                         ]
@@ -1160,7 +1161,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     events: {
                         onSubmit: function (Win, value, title) {
                             self.setQuantityUnit({
-                                id   : value,
+                                id: value,
                                 title: title
                             });
 
@@ -1301,18 +1302,18 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
             return new Promise(function (resolve) {
                 const Edit = new Element('input', {
-                    type  : type,
-                    value : value,
+                    type: type,
+                    value: value,
                     styles: {
-                        border    : 0,
-                        left      : 0,
+                        border: 0,
+                        left: 0,
                         lineHeight: 20,
-                        textAlign : 'right',
-                        padding   : 5,
-                        margin    : 5,
-                        position  : 'absolute',
-                        top       : 0,
-                        width     : 'calc(100% - 10px)'
+                        textAlign: 'right',
+                        padding: 5,
+                        margin: 5,
+                        position: 'absolute',
+                        top: 0,
+                        width: 'calc(100% - 10px)'
                     }
                 }).inject(Container);
 
@@ -1396,7 +1397,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
                     if (!PreviousArticle) {
                         PreviousArticle = Cell.getParent('.quiqqer-erp-backend-erpItems-items')
-                                              .getLast('.article');
+                            .getLast('.article');
                     }
 
                     Next = PreviousArticle.getLast('.cell-editable');
@@ -1421,7 +1422,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
 
                     if (!NextArticle) {
                         NextArticle = Cell.getParent('.quiqqer-erp-backend-erpItems-items')
-                                          .getElement('.article');
+                            .getElement('.article');
                     }
 
                     Next = NextArticle.getElement('.cell-editable');
@@ -1472,7 +1473,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
                     }
 
                     const result = {
-                        id   : i,
+                        id: i,
                         title: title
                     };
 
@@ -1497,8 +1498,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             return new Promise(function (resolve) {
                 QUIAjax.get('package_quiqqer_erp_ajax_calcNettoPrice', resolve, {
                     'package': 'quiqqer/erp',
-                    price    : value,
-                    vat      : self.getAttribute('vat'),
+                    price: value,
+                    vat: self.getAttribute('vat'),
                     formatted: formatted ? 1 : 0
                 });
             });
@@ -1517,8 +1518,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
             return new Promise(function (resolve) {
                 QUIAjax.get('package_quiqqer_erp_ajax_calcBruttoPrice', resolve, {
                     'package': 'quiqqer/erp',
-                    price    : value,
-                    vat      : self.getAttribute('vat'),
+                    price: value,
+                    vat: self.getAttribute('vat'),
                     formatted: formatted ? 1 : 0
                 });
             });
@@ -1533,9 +1534,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/Article', [
         $sanitizeArticleDescription: function (description) {
             return new Promise((resolve, reject) => {
                 QUIAjax.get('package_quiqqer_erp_ajax_utils_sanitizeArticleDescription', resolve, {
-                    'package'  : 'quiqqer/erp',
+                    'package': 'quiqqer/erp',
                     description: description,
-                    onError    : reject
+                    onError: reject
                 });
             });
         }
diff --git a/bin/backend/controls/articles/ArticleList.js b/bin/backend/controls/articles/ArticleList.js
index bc4d5084d49827dcdf62ed6954e7d4f67a072f14..a8487494839c608ae00962e7b73ece78622105fa 100644
--- a/bin/backend/controls/articles/ArticleList.js
+++ b/bin/backend/controls/articles/ArticleList.js
@@ -36,7 +36,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
     return new Class({
 
         Extends: QUIControl,
-        Type   : 'package/quiqqer/erp/bin/backend/controls/articles/ArticleList',
+        Type: 'package/quiqqer/erp/bin/backend/controls/articles/ArticleList',
 
         Binds: [
             '$onArticleDelete',
@@ -53,7 +53,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         ],
 
         options: {
-            currency  : false, // bool || string -> EUR, USD ...
+            currency: false, // bool || string -> EUR, USD ...
             nettoinput: true
         },
 
@@ -69,14 +69,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
             this.$calculations = {
                 currencyData: {},
-                isEuVat     : 0,
-                isNetto     : true,
-                nettoSubSum : 0,
-                nettoSum    : 0,
-                subSum      : 0,
-                sum         : 0,
-                vatArray    : [],
-                vatText     : []
+                isEuVat: 0,
+                isNetto: true,
+                nettoSubSum: 0,
+                nettoSum: 0,
+                subSum: 0,
+                sum: 0,
+                vatArray: [],
+                vatText: []
             };
 
             this.$Container = null;
@@ -103,15 +103,15 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
             this.$Elm.set({
                 html: Mustache.render(template, {
-                    titleArticleNo   : QUILocale.get(lg, 'products.articleNo'),
-                    titleDescription : QUILocale.get(lg, 'products.description'),
-                    titleQuantity    : QUILocale.get(lg, 'products.quantity'),
+                    titleArticleNo: QUILocale.get(lg, 'products.articleNo'),
+                    titleDescription: QUILocale.get(lg, 'products.description'),
+                    titleQuantity: QUILocale.get(lg, 'products.quantity'),
                     titleQuantityUnit: QUILocale.get(lg, 'products.quantityUnit'),
-                    titleUnitPrice   : QUILocale.get(lg, 'products.unitPrice'),
-                    titlePrice       : QUILocale.get(lg, 'products.price'),
-                    titleVAT         : QUILocale.get(lg, 'products.table.vat'),
-                    titleDiscount    : QUILocale.get(lg, 'products.discount'),
-                    titleSum         : QUILocale.get(lg, 'products.sum')
+                    titleUnitPrice: QUILocale.get(lg, 'products.unitPrice'),
+                    titlePrice: QUILocale.get(lg, 'products.price'),
+                    titleVAT: QUILocale.get(lg, 'products.table.vat'),
+                    titleDiscount: QUILocale.get(lg, 'products.discount'),
+                    titleSum: QUILocale.get(lg, 'products.sum')
                 })
             });
 
@@ -125,11 +125,11 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             const SwitchDesc = this.$Elm.getElement('.quiqqer-erp-backend-erpItems-container-switch-desc');
 
             this.$Switch = new QUISwitch({
-                switchTextOn     : 'netto',
-                switchTextOnIcon : false,
-                switchTextOff    : 'brutto',
+                switchTextOn: 'netto',
+                switchTextOnIcon: false,
+                switchTextOff: 'brutto',
                 switchTextOffIcon: false,
-                events           : {
+                events: {
                     onChange: function () {
                         self.$Loader.show();
                         self.setAttribute('nettoinput', !!self.$Switch.getStatus());
@@ -177,7 +177,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             });
 
             return {
-                articles    : articles,
+                articles: articles,
                 priceFactors: this.$priceFactors
             };
         },
@@ -319,12 +319,12 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
             Child.setAttribute('List', this);
 
             Child.addEvents({
-                onDelete          : this.$onArticleDelete,
-                onSelect          : this.$onArticleSelect,
-                onUnSelect        : this.$onArticleUnSelect,
-                onReplace         : this.$onArticleReplace,
+                onDelete: this.$onArticleDelete,
+                onSelect: this.$onArticleSelect,
+                onUnSelect: this.$onArticleUnSelect,
+                onReplace: this.$onArticleReplace,
                 onEditCustomFields: this.$onArticleEditCustomFields,
-                onCalc            : this.$executeCalculation
+                onCalc: this.$executeCalculation
             });
 
             if (this.$Container) {
@@ -416,7 +416,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          */
         $executeCalculation: function () {
             const self = this;
-
+            
             if (this.$isIncalculationFrame) {
                 this.fireEvent('calc', [
                     this,
@@ -461,13 +461,13 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
                     resolve(result);
                 }, {
-                    'package'   : 'quiqqer/erp',
-                    articles    : JSON.encode({articles: articles}),
+                    'package': 'quiqqer/erp',
+                    articles: JSON.encode({articles: articles}),
                     priceFactors: JSON.encode(this.getPriceFactors()),
-                    user        : JSON.encode(this.$user),
-                    currency    : this.getAttribute('currency'),
-                    nettoInput  : this.getAttribute('nettoinput') ? 1 : 0,
-                    onError     : function (err) {
+                    user: JSON.encode(this.$user),
+                    currency: this.getAttribute('currency'),
+                    nettoInput: this.getAttribute('nettoinput') ? 1 : 0,
+                    onError: function (err) {
                         console.error(err);
                         reject();
                     }
@@ -639,8 +639,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         enableSorting: function () {
             const self = this;
 
-            const Elm      = this.getElm(),
-                  elements = Elm.getElements('.article');
+            const Elm = this.getElm(),
+                elements = Elm.getElements('.article');
 
             elements.each(function (Node) {
                 const Article = QUI.Controls.getById(Node.get('data-quiid'));
@@ -652,14 +652,14 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
                 new Element('div', {
                     'class': 'quiqqer-erp-sortableClone-placeholder',
-                    html   : Mustache.render(templateSortablePlaceholder, attributes)
+                    html: Mustache.render(templateSortablePlaceholder, attributes)
                 }).inject(Node);
             });
 
 
             this.$Sortables = new Sortables(this.$Container, {
                 revert: {
-                    duration  : 500,
+                    duration: 500,
                     transition: 'elastic:out'
                 },
 
@@ -671,16 +671,16 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     }
 
                     const size = Target.getSize(),
-                          pos  = Target.getPosition(self.$Container);
+                        pos = Target.getPosition(self.$Container);
 
                     return new Element('div', {
                         styles: {
                             background: 'rgba(0,0,0,0.5)',
-                            height    : size.y,
-                            position  : 'absolute',
-                            top       : pos.y,
-                            width     : size.x,
-                            zIndex    : 1000
+                            height: size.y,
+                            position: 'absolute',
+                            top: pos.y,
+                            width: size.x,
+                            zIndex: 1000
                         }
                     });
                 },
@@ -689,9 +689,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     element.addClass('quiqqer-erp-sortableClone');
 
                     self.$Container.setStyles({
-                        height  : self.$Container.getSize().y,
+                        height: self.$Container.getSize().y,
                         overflow: 'hidden',
-                        width   : self.$Container.getSize().x
+                        width: self.$Container.getSize().x
                     });
                 },
 
@@ -699,9 +699,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
                     element.removeClass('quiqqer-erp-sortableClone');
 
                     self.$Container.setStyles({
-                        height  : null,
+                        height: null,
                         overflow: null,
-                        width   : null
+                        width: null
                     });
 
                     self.$recalculatePositions();
@@ -718,9 +718,9 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         disableSorting: function () {
             this.$sorting = false;
 
-            const self     = this,
-                  Elm      = this.getElm(),
-                  elements = Elm.getElements('.article');
+            const self = this,
+                Elm = this.getElm(),
+                elements = Elm.getElements('.article');
 
             Elm.getElements('.quiqqer-erp-sortableClone-placeholder').destroy();
 
@@ -756,8 +756,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
          */
         $onArticleSetPosition: function (Article) {
             Article.getElm()
-                   .getElement('.quiqqer-erp-backend-erpArticlePlaceholder-pos')
-                   .set('html', Article.getAttribute('position'));
+                .getElement('.quiqqer-erp-backend-erpArticlePlaceholder-pos')
+                .set('html', Article.getAttribute('position'));
         },
 
         /**
@@ -766,8 +766,8 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
         $recalculatePositions: function () {
             let i, len, Article;
 
-            const Elm      = this.getElm(),
-                  elements = Elm.getElements('.article');
+            const Elm = this.getElm(),
+                elements = Elm.getElements('.article');
 
             for (i = 0, len = elements.length; i < len; i++) {
                 Article = QUI.Controls.getById(elements[i].get('data-quiid'));
@@ -791,7 +791,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
             let i, len, Current;
 
-            let self     = this,
+            let self = this,
                 articles = [],
                 position = 1;
 
@@ -876,7 +876,7 @@ define('package/quiqqer/erp/bin/backend/controls/articles/ArticleList', [
 
             const AddProductControl = new AddProductWindow({
                 fieldValues: FieldValues,
-                editAmount : false
+                editAmount: false
             });
 
             const productId = EditArticle.getAttribute('id');
diff --git a/src/QUI/ERP/Output/Output.php b/src/QUI/ERP/Output/Output.php
index 47c91f7effce486f34842d0f597816989881c596..08835efcfe19838cdd75559315f168bcb98a11d5 100644
--- a/src/QUI/ERP/Output/Output.php
+++ b/src/QUI/ERP/Output/Output.php
@@ -164,7 +164,7 @@ public static function getDocumentPdfDownloadUrl($entityId, string $entityType):
         $url = URL_OPT_DIR . 'quiqqer/erp/bin/output/frontend/download.php?';
         $url .= http_build_query([
             'id' => $entityId,
-            't'  => $entityType
+            't' => $entityType
         ]);
 
         return $url;
@@ -217,7 +217,7 @@ public static function sendPdfViaMail(
         $pdfFile = $OutputTemplate->getPDFDocument()->createPDF();
 
         // Re-name PDF
-        $pdfDir   = QUI::getPackage('quiqqer/erp')->getVarDir();
+        $pdfDir = QUI::getPackage('quiqqer/erp')->getVarDir();
         $mailFile = $pdfDir . $OutputProvider::getDownloadFileName($entityId) . '.pdf';
         rename($pdfFile, $mailFile);
 
@@ -247,8 +247,10 @@ public static function sendPdfViaMail(
 
         // Additional attachments
         foreach ($attachedMediaFiles as $MediaFile) {
-            if (!($MediaFile instanceof QUI\Projects\Media\File) &&
-                !($MediaFile instanceof QUI\Projects\Media\Image)) {
+            if (
+                !($MediaFile instanceof QUI\Projects\Media\File) &&
+                !($MediaFile instanceof QUI\Projects\Media\Image)
+            ) {
                 continue;
             }
 
@@ -307,7 +309,7 @@ public static function getOutputTemplateProviderByPackage(string $package)
      */
     public static function getTemplates(string $entityType = null): array
     {
-        $templates       = [];
+        $templates = [];
         $outputProviders = [];
 
         if (empty($entityType)) {
@@ -322,12 +324,12 @@ public static function getTemplates(string $entityType = null): array
 
         foreach (self::getAllOutputTemplateProviders() as $provider) {
             /** @var OutputTemplateProviderInterface $class */
-            $class   = $provider['class'];
+            $class = $provider['class'];
             $package = $provider['package'];
 
             /** @var OutputProviderInterface $OutputProvider */
             foreach ($outputProviders as $OutputProvider) {
-                $entityType            = $OutputProvider::getEntityType();
+                $entityType = $OutputProvider::getEntityType();
                 $defaultOutputTemplate = self::getDefaultOutputTemplateForEntityType($entityType);
 
                 foreach ($class::getTemplates($entityType) as $providerTemplateId) {
@@ -342,12 +344,12 @@ public static function getTemplates(string $entityType = null): array
                         $defaultOutputTemplate['id'] === $providerTemplateId;
 
                     $providerTemplate = [
-                        'id'              => $providerTemplateId,
-                        'title'           => $templateTitle,
-                        'provider'        => $package,
+                        'id' => $providerTemplateId,
+                        'title' => $templateTitle,
+                        'provider' => $package,
                         'isSystemDefault' => $provider['isSystemDefault'],
-                        'isDefault'       => $isDefault,
-                        'entityType'      => $entityType,
+                        'isDefault' => $isDefault,
+                        'entityType' => $entityType,
                         'entityTypeTitle' => $OutputProvider::getEntityTypeTitle()
                     ];
 
@@ -381,13 +383,13 @@ public static function getTemplates(string $entityType = null): array
     public static function getDefaultOutputTemplateForEntityType(string $entityType): array
     {
         $fallBackTemplate = [
-            'id'                => 'system_default',
-            'provider'          => 'quiqqer/erp-accounting-templates',
+            'id' => 'system_default',
+            'provider' => 'quiqqer/erp-accounting-templates',
             'hideSystemDefault' => false
         ];
 
         try {
-            $Conf             = QUI::getPackage('quiqqer/erp')->getConfig();
+            $Conf = QUI::getPackage('quiqqer/erp')->getConfig();
             $defaultTemplates = $Conf->get('output', 'default_templates');
 
             if (empty($defaultTemplates)) {
@@ -419,7 +421,7 @@ public static function getDefaultOutputTemplateProviderForEntityType(string $ent
         $defaultEntityTypeTemplate = self::getDefaultOutputTemplateForEntityType($entityType);
 
         foreach (self::getAllOutputTemplateProviders() as $provider) {
-            if ($provider['package'] === $defaultEntityTypeTemplate['provider']) {
+            if (isset($defaultEntityTypeTemplate['provider']) && $provider['package'] === $defaultEntityTypeTemplate['provider']) {
                 return $provider['class'];
             }
         }
@@ -427,7 +429,7 @@ public static function getDefaultOutputTemplateProviderForEntityType(string $ent
         // Fallback: Choose next available provider
         foreach (self::getAllOutputTemplateProviders() as $provider) {
             /** @var OutputTemplateProviderInterface $class */
-            $class             = $provider['class'];
+            $class = $provider['class'];
             $providerTemplates = $class::getTemplates($entityType);
 
             if (!empty($providerTemplates)) {
@@ -445,7 +447,7 @@ public static function getDefaultOutputTemplateProviderForEntityType(string $ent
      */
     protected static function getAllOutputProviders(): array
     {
-        $packages        = QUI::getPackageManager()->getInstalled();
+        $packages = QUI::getPackageManager()->getInstalled();
         $providerClasses = [];
 
         foreach ($packages as $installedPackage) {
@@ -469,7 +471,7 @@ protected static function getAllOutputProviders(): array
                     }
 
                     $providerClasses[] = [
-                        'class'   => $class,
+                        'class' => $class,
                         'package' => $installedPackage['name']
                     ];
                 }
@@ -488,7 +490,7 @@ protected static function getAllOutputProviders(): array
      */
     protected static function getAllOutputTemplateProviders(): array
     {
-        $packages        = QUI::getPackageManager()->getInstalled();
+        $packages = QUI::getPackageManager()->getInstalled();
         $providerClasses = [];
 
         foreach ($packages as $installedPackage) {
@@ -512,8 +514,8 @@ protected static function getAllOutputTemplateProviders(): array
                     }
 
                     $providerClasses[] = [
-                        'class'           => $class,
-                        'package'         => $installedPackage['name'],
+                        'class' => $class,
+                        'package' => $installedPackage['name'],
                         'isSystemDefault' => $installedPackage['name'] === 'quiqqer/erp-accounting-templates'
                     ];
                 }