diff --git a/bin/backend/controls/panels/Invoice.js b/bin/backend/controls/panels/Invoice.js
index e35add58cd8607722bb10ab0117659d63eca4776..18d8909623366dce646fa4a2581ddb912910b386 100644
--- a/bin/backend/controls/panels/Invoice.js
+++ b/bin/backend/controls/panels/Invoice.js
@@ -16,11 +16,13 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
     'qui/controls/elements/Sandbox',
     'utils/Lock',
     'Locale',
+    'Ajax',
     'Mustache',
 
     'css!package/quiqqer/invoice/bin/backend/controls/panels/Invoice.css'
 
-], function (QUI, QUIPanel, QUIButton, QUIConfirm, Invoices, Comments, CustomerFileSelect, Sandbox, Locker, QUILocale, Mustache) {
+], function (QUI, QUIPanel, QUIButton, QUIConfirm, Invoices, Comments,
+             CustomerFileSelect, Sandbox, Locker, QUILocale, QUIAjax, Mustache) {
     "use strict";
 
     var lg = 'quiqqer/invoice';
@@ -46,7 +48,8 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
             '$onInject',
             '$onDestroy',
             '$showLockMessage',
-            'openInvoiceFiles'
+            'openInvoiceFiles',
+            '$openXmlCategory'
         ],
 
         options: {
@@ -260,6 +263,30 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
             });
 
             this.getContent().addClass('quiqqer-invoice-invoice');
+
+
+            // invoice.xml panel api
+            QUIAjax.get('package_quiqqer_invoice_ajax_invoices_panel_getCategories', (categories) => {
+                let cat, title;
+
+                for (let category in categories) {
+                    cat = categories[category];
+                    title = cat.title;
+
+                    this.addCategory({
+                        icon  : cat.icon,
+                        name  : cat.name,
+                        title : QUILocale.get(title[0], title[1]),
+                        text  : QUILocale.get(title[0], title[1]),
+                        events: {
+                            onClick: this.$openXmlCategory
+                        }
+                    });
+
+                }
+            }, {
+                'package': 'quiqqer/invoice'
+            });
         },
 
         /**
@@ -531,31 +558,31 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
                             data = {};
                         }
 
-                        data.textInvoiceStatus    = QUILocale.get(lg, 'invoice.settings.processingStatus.title');
+                        data.textInvoiceStatus = QUILocale.get(lg, 'invoice.settings.processingStatus.title');
                         data.textInvoiceRecipient = QUILocale.get(lg, 'cutomerData');
-                        data.textCustomer         = QUILocale.get(lg, 'customer');
-                        data.textCompany          = QUILocale.get(lg, 'company');
-                        data.textStreet           = QUILocale.get(lg, 'street');
-                        data.textZip              = QUILocale.get(lg, 'zip');
-                        data.textCity             = QUILocale.get(lg, 'city');
+                        data.textCustomer = QUILocale.get(lg, 'customer');
+                        data.textCompany = QUILocale.get(lg, 'company');
+                        data.textStreet = QUILocale.get(lg, 'street');
+                        data.textZip = QUILocale.get(lg, 'zip');
+                        data.textCity = QUILocale.get(lg, 'city');
 
                         data.textInvoiceDelivery = QUILocale.get(lg, 'deliveryAddress');
                         data.textDeliveryCompany = QUILocale.get(lg, 'company');
-                        data.textDeliveryStreet  = QUILocale.get(lg, 'street');
-                        data.textDeliveryZip     = QUILocale.get(lg, 'zip');
-                        data.textDeliveryCity    = QUILocale.get(lg, 'city');
+                        data.textDeliveryStreet = QUILocale.get(lg, 'street');
+                        data.textDeliveryZip = QUILocale.get(lg, 'zip');
+                        data.textDeliveryCity = QUILocale.get(lg, 'city');
                         data.textDeliveryCountry = QUILocale.get(lg, 'country');
 
-                        data.textInvoiceData   = QUILocale.get(lg, 'erp.panel.invoice.data.title');
-                        data.textInvoiceDate   = QUILocale.get(lg, 'erp.panel.invoice.data.date');
-                        data.textProjectName   = QUILocale.get(lg, 'erp.panel.invoice.data.projectName');
-                        data.textOrderedBy     = QUILocale.get(lg, 'erp.panel.invoice.data.orderedBy');
-                        data.textEditor        = QUILocale.get(lg, 'erp.panel.invoice.data.editor');
+                        data.textInvoiceData = QUILocale.get(lg, 'erp.panel.invoice.data.title');
+                        data.textInvoiceDate = QUILocale.get(lg, 'erp.panel.invoice.data.date');
+                        data.textProjectName = QUILocale.get(lg, 'erp.panel.invoice.data.projectName');
+                        data.textOrderedBy = QUILocale.get(lg, 'erp.panel.invoice.data.orderedBy');
+                        data.textEditor = QUILocale.get(lg, 'erp.panel.invoice.data.editor');
                         data.textContactPerson = QUILocale.get(lg, 'erp.panel.invoice.data.contactPerson');
 
-                        data.textInvoicePayment       = QUILocale.get(lg, 'erp.panel.invoice.data.payment');
+                        data.textInvoicePayment = QUILocale.get(lg, 'erp.panel.invoice.data.payment');
                         data.textInvoicePaymentMethod = QUILocale.get(lg, 'erp.panel.invoice.data.paymentMethod');
-                        data.textTermOfPayment        = QUILocale.get(lg, 'erp.panel.invoice.data.termOfPayment');
+                        data.textTermOfPayment = QUILocale.get(lg, 'erp.panel.invoice.data.termOfPayment');
 
                         data.textInvoiceText = QUILocale.get(lg, 'erp.panel.invoice.data.invoiceText');
 
@@ -567,17 +594,18 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
                             html: Mustache.render(template, data)
                         });
 
-                        var Form    = Container.getElement('form');
+                        var Form = Container.getElement('form');
                         var address = {};
 
                         try {
                             address = JSON.decode(data.invoice_address);
 
-                            Form.elements.customer.value  = address.salutation + ' ' + address.firstname + ' ' + address.lastname;
-                            Form.elements.company.value   = address.company;
+                            Form.elements.customer.value =
+                                address.salutation + ' ' + address.firstname + ' ' + address.lastname;
+                            Form.elements.company.value = address.company;
                             Form.elements.street_no.value = address.street_no;
-                            Form.elements.zip.value       = address.zip;
-                            Form.elements.city.value      = address.city;
+                            Form.elements.zip.value = address.zip;
+                            Form.elements.city.value = address.city;
                         } catch (e) {
                             console.error(e);
                         }
@@ -615,10 +643,10 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
                                     deliveryAddress.firstname + ' ' +
                                     deliveryAddress.lastname;
 
-                                Form.elements['delivery-company'].value   = deliveryAddress.company;
+                                Form.elements['delivery-company'].value = deliveryAddress.company;
                                 Form.elements['delivery-street_no'].value = deliveryAddress.street_no;
-                                Form.elements['delivery-zip'].value       = deliveryAddress.zip;
-                                Form.elements['delivery-city'].value      = deliveryAddress.city;
+                                Form.elements['delivery-zip'].value = deliveryAddress.zip;
+                                Form.elements['delivery-city'].value = deliveryAddress.city;
                             } catch (e) {
                                 console.error(e);
                             }
@@ -799,7 +827,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
             this.getCategory('invoiceFiles').setActive();
 
             const InvoiceAttributes = this.getAttribute('data');
-            let InvoiceData         = InvoiceAttributes.data;
+            let InvoiceData = InvoiceAttributes.data;
 
             if (InvoiceData) {
                 InvoiceData = JSON.decode(InvoiceData);
@@ -1132,6 +1160,29 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/Invoice', [
                     });
                 });
             });
+        },
+
+        //region category stuff
+
+        $openXmlCategory: function (Category) {
+            this.Loader.show();
+
+            QUIAjax.get('package_quiqqer_invoice_ajax_invoices_panel_getCategory', (html) => {
+                this.$closeCategory().then((Container) => {
+                    Container.set('html', html);
+
+                    return QUI.parse(Container);
+                }).then(() => {
+                    return this.$openCategory();
+                }).then(() => {
+                    this.Loader.hide();
+                });
+            }, {
+                'package': 'quiqqer/invoice',
+                category : Category.getAttribute('name')
+            });
         }
+
+        //endregion
     });
 });
diff --git a/bin/backend/controls/panels/TemporaryInvoice.js b/bin/backend/controls/panels/TemporaryInvoice.js
index 4fac674a817c29e5d07f8876d9bdfa41d72ca4b3..db841c05c1ea49ddfc86a9b3c90ede8c39e081f0 100644
--- a/bin/backend/controls/panels/TemporaryInvoice.js
+++ b/bin/backend/controls/panels/TemporaryInvoice.js
@@ -23,6 +23,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
     'package/quiqqer/customer/bin/backend/controls/customer/userFiles/Select',
     'utils/Lock',
     'Locale',
+    'Ajax',
     'Mustache',
     'Users',
     'Editors',
@@ -35,7 +36,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
 
 ], function (QUI, QUIPanel, QUIButton, QUIButtonMultiple, QUISeparator, QUIConfirm, QUIFormUtils,
              AddressSelect, Invoices, Dialogs, Comments, TextArticle,
-             Payments, AddressWindow, CustomerFileSelect, Locker, QUILocale, Mustache, Users, Editors,
+             Payments, AddressWindow, CustomerFileSelect, Locker, QUILocale, QUIAjax, Mustache, Users, Editors,
              templateData, templatePost, templateMissing) {
     "use strict";
 
@@ -66,7 +67,8 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
             'toggleSort',
             '$showLockMessage',
             'print',
-            'openInvoiceFiles'
+            'openInvoiceFiles',
+            '$openXmlCategory'
         ],
 
         options: {
@@ -88,16 +90,16 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
 
             this.parent(options);
 
-            this.$AdditionalText     = null;
-            this.$ArticleList        = null;
+            this.$AdditionalText = null;
+            this.$ArticleList = null;
             this.$ArticleListSummary = null;
-            this.$AddProduct         = null;
-            this.$ArticleSort        = null;
-            this.$AddressDelivery    = null;
+            this.$AddProduct = null;
+            this.$ArticleSort = null;
+            this.$AddressDelivery = null;
 
-            this.$AddSeparator  = null;
+            this.$AddSeparator = null;
             this.$SortSeparator = null;
-            this.$locked        = false;
+            this.$locked = false;
 
             this.$serializedList = {};
 
@@ -157,7 +159,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
          * Refresh the invoice data
          */
         doRefresh: function () {
-            const self    = this;
+            const self = this;
             let invoiceId = this.getAttribute('invoiceId');
 
             return Invoices.getTemporaryInvoice(invoiceId).then(function (data) {
@@ -413,15 +415,15 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                     '[data-qui="package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice.UserData"]'
                 ).get('data-quiid');
 
-                let editorIdQUIId    = Content.getElement('[name="editorId"]').get('data-quiid');
+                let editorIdQUIId = Content.getElement('[name="editorId"]').get('data-quiid');
                 let orderedByIdQUIId = Content.getElement('[name="orderedBy"]').get('data-quiid');
-                let currencyIdQUIId  = Content.getElement('[name="currency"]').get('data-quiid');
-                let CurrencyRate     = Content.getElement('[name="currencyRate"]');
+                let currencyIdQUIId = Content.getElement('[name="currency"]').get('data-quiid');
+                let CurrencyRate = Content.getElement('[name="currencyRate"]');
 
-                let Data      = QUI.Controls.getById(quiId);
-                let EditorId  = QUI.Controls.getById(editorIdQUIId);
+                let Data = QUI.Controls.getById(quiId);
+                let EditorId = QUI.Controls.getById(editorIdQUIId);
                 let OrderedBy = QUI.Controls.getById(orderedByIdQUIId);
-                let Currency  = QUI.Controls.getById(currencyIdQUIId);
+                let Currency = QUI.Controls.getById(currencyIdQUIId);
 
                 if (parseInt(config.currency.differentAccountingCurrencies) === 0) {
                     Content.getElements('table.invoice-currency').setStyle('display', 'none');
@@ -483,7 +485,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                         Invoices.isNetto(userId)
                     ]).then(function (result) {
                         let paymentTime = result[0];
-                        let isNetto     = result[1];
+                        let isNetto = result[1];
 
                         Content.getElement('[name="time_for_payment"]').value = paymentTime;
 
@@ -563,7 +565,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                     address = {};
                 }
 
-                address.userId    = self.getAttribute('customer_id');
+                address.userId = self.getAttribute('customer_id');
                 address.addressId = self.getAttribute('invoice_address_id');
 
                 return Data.setValue(address);
@@ -840,7 +842,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
          * @returns {Promise}
          */
         openVerification: function () {
-            const self          = this;
+            const self = this;
             let ParentContainer = null,
                 FrameContainer  = null;
 
@@ -1074,7 +1076,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                                 if (productDescriptionSource &&
                                     typeof article.fields !== 'undefined' &&
                                     typeof article.fields[productDescriptionSource] !== 'undefined') {
-                                    let field   = article.fields[productDescriptionSource];
+                                    let field = article.fields[productDescriptionSource];
                                     let current = QUILocale.getCurrent();
 
                                     if (field && typeof field[current] !== 'undefined') {
@@ -1113,38 +1115,40 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                     // minimal toolbar
                     self.$AdditionalText.setAttribute('buttons', {
                         lines: [
-                            [[
-                                {
-                                    type  : "button",
-                                    button: "Bold"
-                                },
-                                {
-                                    type  : "button",
-                                    button: "Italic"
-                                },
-                                {
-                                    type  : "button",
-                                    button: "Underline"
-                                },
-                                {
-                                    type: "separator"
-                                },
-                                {
-                                    type  : "button",
-                                    button: "RemoveFormat"
-                                },
-                                {
-                                    type: "separator"
-                                },
-                                {
-                                    type  : "button",
-                                    button: "NumberedList"
-                                },
-                                {
-                                    type  : "button",
-                                    button: "BulletedList"
-                                }
-                            ]]
+                            [
+                                [
+                                    {
+                                        type  : "button",
+                                        button: "Bold"
+                                    },
+                                    {
+                                        type  : "button",
+                                        button: "Italic"
+                                    },
+                                    {
+                                        type  : "button",
+                                        button: "Underline"
+                                    },
+                                    {
+                                        type: "separator"
+                                    },
+                                    {
+                                        type  : "button",
+                                        button: "RemoveFormat"
+                                    },
+                                    {
+                                        type: "separator"
+                                    },
+                                    {
+                                        type  : "button",
+                                        button: "NumberedList"
+                                    },
+                                    {
+                                        type  : "button",
+                                        button: "BulletedList"
+                                    }
+                                ]
+                            ]
                         ]
                     });
 
@@ -1297,7 +1301,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
             }
 
             let formData = QUIFormUtils.getFormData(Form);
-            let data     = this.getAttribute('data') || {};
+            let data = this.getAttribute('data') || {};
 
             // timefields
             if ("date" in formData) {
@@ -1379,7 +1383,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                 }
             });
 
-            this.$AddSeparator  = new QUISeparator();
+            this.$AddSeparator = new QUISeparator();
             this.$SortSeparator = new QUISeparator();
 
             // buttons
@@ -1502,6 +1506,33 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                     onClick: this.openVerification
                 }
             });
+
+
+            // invoice.xml panel api
+            QUIAjax.get('package_quiqqer_invoice_ajax_invoices_panel_getCategories', (categories) => {
+                let cat, title;
+
+                if (typeOf(categories) === 'array' && !categories.length) {
+                    return;
+                }
+
+                for (let category in categories) {
+                    cat = categories[category];
+                    title = cat.title;
+
+                    this.addCategory({
+                        icon  : cat.icon,
+                        name  : cat.name,
+                        title : QUILocale.get(title[0], title[1]),
+                        text  : QUILocale.get(title[0], title[1]),
+                        events: {
+                            onClick: this.$openXmlCategory
+                        }
+                    });
+                }
+            }, {
+                'package': 'quiqqer/invoice'
+            });
         },
 
         /**
@@ -1517,7 +1548,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
 
             document.addEvent('keyup', this.$onKeyUp);
 
-            const self    = this;
+            const self = this;
             let invoiceId = this.getAttribute('invoiceId');
 
             Locker.isLocked(
@@ -1619,7 +1650,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
          * show the lock message window
          */
         $showLockMessage: function () {
-            const self  = this;
+            const self = this;
             let btnText = QUILocale.get('quiqqer/quiqqer', 'submit');
 
             if (window.USER.isSU) {
@@ -1913,6 +1944,29 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoice', [
                     Dialogs.openPrintDialog(self.getAttribute('hash'), entityType).then(resolve);
                 });
             });
+        },
+
+        //region category stuff
+
+        $openXmlCategory: function (Category) {
+            this.Loader.show();
+
+            QUIAjax.get('package_quiqqer_invoice_ajax_invoices_panel_getCategory', (html) => {
+                this.$closeCategory().then((Container) => {
+                    Container.set('html', html);
+
+                    return QUI.parse(Container);
+                }).then(() => {
+                    return this.$openCategory();
+                }).then(() => {
+                    this.Loader.hide();
+                });
+            }, {
+                'package': 'quiqqer/invoice',
+                category : Category.getAttribute('name')
+            });
         }
+
+        //endregion
     });
 });
diff --git a/bin/backend/controls/panels/TemporaryInvoices.js b/bin/backend/controls/panels/TemporaryInvoices.js
index 063e39b55e11f91dffd3fdaa2e26d6d917c30232..1a586fbd731b0631f3baad04d9504ed877e4d1fb 100644
--- a/bin/backend/controls/panels/TemporaryInvoices.js
+++ b/bin/backend/controls/panels/TemporaryInvoices.js
@@ -43,7 +43,8 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoices',
             '$clickCopyInvoice',
             '$clickPDF',
             '$onInvoicesChange',
-            '$onClickInvoiceDetails'
+            '$onClickInvoiceDetails',
+            '$openXmlCategory'
         ],
 
         initialize: function (options) {
@@ -54,7 +55,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoices',
 
             this.parent(options);
 
-            this.$Grid     = null;
+            this.$Grid = null;
             this.$Currency = null;
 
             this.addEvents({
@@ -112,7 +113,7 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoices',
                     }
 
                     entry.display_type = Icon;
-                    entry.opener       = ' ';
+                    entry.opener = ' ';
 
                     return entry;
                 });
@@ -323,169 +324,202 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoices',
                     xls : true
                 },
 
-                buttons    : [Actions, this.$Currency, {
-                    name     : 'create',
-                    text     : QUILocale.get(lg, 'temporary.btn.createInvoice'),
-                    textimage: 'fa fa-plus',
-                    events   : {
-                        onClick: function (Btn) {
-                            Btn.setAttribute('textimage', 'fa fa-spinner fa-spin');
-
-                            self.$clickCreateInvoice(Btn).then(function () {
-                                Btn.setAttribute('textimage', 'fa fa-plus');
-                            });
+                buttons    : [
+                    Actions,
+                    this.$Currency,
+                    {
+                        name     : 'create',
+                        text     : QUILocale.get(lg, 'temporary.btn.createInvoice'),
+                        textimage: 'fa fa-plus',
+                        events   : {
+                            onClick: function (Btn) {
+                                Btn.setAttribute('textimage', 'fa fa-spinner fa-spin');
+
+                                self.$clickCreateInvoice(Btn).then(function () {
+                                    Btn.setAttribute('textimage', 'fa fa-plus');
+                                });
+                            }
                         }
                     }
-                }],
-                columnModel: [{
-                    header   : ' ',
-                    dataIndex: 'opener',
-                    dataType : 'int',
-                    width    : 30
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.type'),
-                    dataIndex: 'display_type',
-                    dataType : 'node',
-                    width    : 30
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.invoiceNo'),
-                    dataIndex: 'id',
-                    dataType : 'integer',
-                    width    : 100
-                }, {
-                    header   : QUILocale.get('quiqqer/quiqqer', 'name'),
-                    dataIndex: 'customer_name',
-                    dataType : 'string',
-                    width    : 200,
-                    className: 'clickable'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.customerNo'),
-                    dataIndex: 'customer_id_display',
-                    dataType : 'string',
-                    width    : 90,
-                    className: 'clickable'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.status'),
-                    dataIndex: 'paid_status_display',
-                    dataType : 'html',
-                    width    : 120,
-                    className: 'grid-align-center'
-                }, {
-                    header   : QUILocale.get('quiqqer/quiqqer', 'date'),
-                    dataIndex: 'date',
-                    dataType : 'date',
-                    width    : 90
-                }, {
-                    header   : QUILocale.get('quiqqer/quiqqer', 'project'),
-                    dataIndex: 'project_name',
-                    dataType : 'string',
-                    width    : 160
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.sum'),
-                    dataIndex: 'display_sum',
-                    dataType : 'string',
-                    width    : 100,
-                    className: 'payment-status-amountCell'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.netto'),
-                    dataIndex: 'display_nettosum',
-                    dataType : 'string',
-                    width    : 100,
-                    className: 'payment-status-amountCell'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.vat'),
-                    dataIndex: 'display_vatsum',
-                    dataType : 'string',
-                    width    : 100,
-                    className: 'payment-status-amountCell'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.paymentMethod'),
-                    dataIndex: 'payment_title',
-                    dataType : 'string',
-                    width    : 180
-                }, {
-                    header   : QUILocale.get(lg, 'temporary.grid.timeForPayment'),
-                    dataIndex: 'time_for_payment',
-                    dataType : 'string',
-                    width    : 120
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.paymentDate'),
-                    dataIndex: 'paid_date',
-                    dataType : 'date',
-                    width    : 120
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.paid'),
-                    dataIndex: 'display_paid',
-                    dataType : 'string',
-                    width    : 100,
-                    className: 'payment-status-amountCell'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.open'),
-                    dataIndex: 'display_missing',
-                    dataType : 'string',
-                    width    : 100,
-                    className: 'payment-status-amountCell'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.brutto'),
-                    dataIndex: 'isbrutto',
-                    dataType : 'integer',
-                    width    : 50
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.taxId'),
-                    dataIndex: 'taxId',
-                    dataType : 'string',
-                    width    : 105
-                }, {
-                    header   : QUILocale.get('quiqqer/quiqqer', 'c_date'),
-                    dataIndex: 'c_date',
-                    dataType : 'date',
-                    width    : 140
-                }, {
-                    header   : QUILocale.get('quiqqer/quiqqer', 'c_user'),
-                    dataIndex: 'c_username',
-                    dataType : 'integer',
-                    width    : 180
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.orderNo'),
-                    dataIndex: 'order_id',
-                    dataType : 'integer',
-                    width    : 80
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.comments'),
-                    dataIndex: 'comments',
-                    dataType : 'string',
-                    width    : 100
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.paymentData'),
-                    dataIndex: 'payment_data',
-                    dataType : 'string',
-                    width    : 100
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.processing'),
-                    dataIndex: 'processing_status_display',
-                    dataType : 'html',
-                    width    : 150
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.hash'),
-                    dataIndex: 'hash',
-                    dataType : 'string',
-                    width    : 280,
-                    className: 'monospace'
-                }, {
-                    header   : QUILocale.get(lg, 'journal.grid.globalProcessId'),
-                    dataIndex: 'global_process_id',
-                    dataType : 'string',
-                    width    : 280,
-                    className: 'monospace'
-                }, {
-                    dataIndex: 'paidstatus',
-                    dataType : 'string',
-                    hidden   : true
-                }, {
-                    dataIndex: 'c_user',
-                    dataType : 'integer',
-                    hidden   : true
-                }]
+                ],
+                columnModel: [
+                    {
+                        header   : ' ',
+                        dataIndex: 'opener',
+                        dataType : 'int',
+                        width    : 30
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.type'),
+                        dataIndex: 'display_type',
+                        dataType : 'node',
+                        width    : 30
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.invoiceNo'),
+                        dataIndex: 'id',
+                        dataType : 'integer',
+                        width    : 100
+                    },
+                    {
+                        header   : QUILocale.get('quiqqer/quiqqer', 'name'),
+                        dataIndex: 'customer_name',
+                        dataType : 'string',
+                        width    : 200,
+                        className: 'clickable'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.customerNo'),
+                        dataIndex: 'customer_id_display',
+                        dataType : 'string',
+                        width    : 90,
+                        className: 'clickable'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.status'),
+                        dataIndex: 'paid_status_display',
+                        dataType : 'html',
+                        width    : 120,
+                        className: 'grid-align-center'
+                    },
+                    {
+                        header   : QUILocale.get('quiqqer/quiqqer', 'date'),
+                        dataIndex: 'date',
+                        dataType : 'date',
+                        width    : 90
+                    },
+                    {
+                        header   : QUILocale.get('quiqqer/quiqqer', 'project'),
+                        dataIndex: 'project_name',
+                        dataType : 'string',
+                        width    : 160
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.sum'),
+                        dataIndex: 'display_sum',
+                        dataType : 'string',
+                        width    : 100,
+                        className: 'payment-status-amountCell'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.netto'),
+                        dataIndex: 'display_nettosum',
+                        dataType : 'string',
+                        width    : 100,
+                        className: 'payment-status-amountCell'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.vat'),
+                        dataIndex: 'display_vatsum',
+                        dataType : 'string',
+                        width    : 100,
+                        className: 'payment-status-amountCell'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.paymentMethod'),
+                        dataIndex: 'payment_title',
+                        dataType : 'string',
+                        width    : 180
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'temporary.grid.timeForPayment'),
+                        dataIndex: 'time_for_payment',
+                        dataType : 'string',
+                        width    : 120
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.paymentDate'),
+                        dataIndex: 'paid_date',
+                        dataType : 'date',
+                        width    : 120
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.paid'),
+                        dataIndex: 'display_paid',
+                        dataType : 'string',
+                        width    : 100,
+                        className: 'payment-status-amountCell'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.open'),
+                        dataIndex: 'display_missing',
+                        dataType : 'string',
+                        width    : 100,
+                        className: 'payment-status-amountCell'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.brutto'),
+                        dataIndex: 'isbrutto',
+                        dataType : 'integer',
+                        width    : 50
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.taxId'),
+                        dataIndex: 'taxId',
+                        dataType : 'string',
+                        width    : 105
+                    },
+                    {
+                        header   : QUILocale.get('quiqqer/quiqqer', 'c_date'),
+                        dataIndex: 'c_date',
+                        dataType : 'date',
+                        width    : 140
+                    },
+                    {
+                        header   : QUILocale.get('quiqqer/quiqqer', 'c_user'),
+                        dataIndex: 'c_username',
+                        dataType : 'integer',
+                        width    : 180
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.orderNo'),
+                        dataIndex: 'order_id',
+                        dataType : 'integer',
+                        width    : 80
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.comments'),
+                        dataIndex: 'comments',
+                        dataType : 'string',
+                        width    : 100
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.paymentData'),
+                        dataIndex: 'payment_data',
+                        dataType : 'string',
+                        width    : 100
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.processing'),
+                        dataIndex: 'processing_status_display',
+                        dataType : 'html',
+                        width    : 150
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.hash'),
+                        dataIndex: 'hash',
+                        dataType : 'string',
+                        width    : 280,
+                        className: 'monospace'
+                    },
+                    {
+                        header   : QUILocale.get(lg, 'journal.grid.globalProcessId'),
+                        dataIndex: 'global_process_id',
+                        dataType : 'string',
+                        width    : 280,
+                        className: 'monospace'
+                    },
+                    {
+                        dataIndex: 'paidstatus',
+                        dataType : 'string',
+                        hidden   : true
+                    },
+                    {
+                        dataIndex: 'c_user',
+                        dataType : 'integer',
+                        hidden   : true
+                    }
+                ]
             });
 
             this.$Grid.addEvents({
@@ -1033,6 +1067,29 @@ define('package/quiqqer/invoice/bin/backend/controls/panels/TemporaryInvoices',
                     html   : result
                 }).inject(ParentNode);
             });
+        },
+
+        //region category stuff
+
+        $openXmlCategory: function (Category) {
+            this.Loader.show();
+
+            QUIAjax.get('package_quiqqer_order_ajax_backend_panel_getCategory', (html) => {
+                this.$closeCategory().then((Container) => {
+                    Container.set('html', html);
+
+                    return QUI.parse(Container);
+                }).then(() => {
+                    return this.$openCategory();
+                }).then(() => {
+                    this.Loader.hide();
+                });
+            }, {
+                'package': 'quiqqer/order',
+                category : Category.getAttribute('name')
+            });
         }
+
+        //endregion
     });
 });