diff --git a/ajax/manufacturers/create/newManufacturer.php b/ajax/manufacturers/create/newManufacturer.php
new file mode 100644
index 0000000000000000000000000000000000000000..e6dcd86bd95d687e50c64c18fd2bbadf04b9c0cb
--- /dev/null
+++ b/ajax/manufacturers/create/newManufacturer.php
@@ -0,0 +1,50 @@
+<?php
+
+use QUI\ERP\Manufacturers;
+use QUI\Utils\Security\Orthos;
+use QUI\ERP\Exception as ERPException;
+
+/**
+ * Create a new manufacturer users
+ *
+ * @param string $manufacturerId
+ * @param array $address
+ * @param array $groups
+ * @return integer - New user ID
+ */
+QUI::$Ajax->registerFunction(
+    'package_quiqqer_erp_ajax_manufacturers_create_newManufacturer',
+    function ($manufacturerId, $address, $groupIds) {
+        $address        = Orthos::clearArray(\json_decode($address, true));
+        $groupIds       = Orthos::clearArray(\json_decode($groupIds, true));
+        $manufacturerId = Orthos::clear($manufacturerId);
+
+        try {
+            $User = Manufacturers::createManufacturer($manufacturerId, $address, $groupIds);
+        } catch (ERPException $Exception) {
+            QUI\System\Log::writeDebugException($Exception);
+            throw $Exception;
+        } catch (\Exception $Exception) {
+            QUI\System\Log::writeException($Exception);
+
+            throw new ERPException([
+                'quiqqer/erp',
+                'exception.ajax.manufacturers.create.newManufacturer.error'
+            ]);
+        }
+
+        QUI::getMessagesHandler()->addSuccess(
+            QUI::getLocale()->get(
+                'quiqqer/erp',
+                'message.ajax.manufacturers.create.newManufacturer.success',
+                [
+                    'manufacturerId' => $manufacturerId
+                ]
+            )
+        );
+
+        return $User->getId();
+    },
+    ['manufacturerId', 'address', 'groupIds'],
+    'Permission::checkAdminUser'
+);
diff --git a/bin/backend/controls/manufacturers/Administration.js b/bin/backend/controls/manufacturers/Administration.js
index 2744b37e5f4cee6cd6517496edb1acc56c8c9579..6663b0959e4ecc6a1f6c8f17f2156b50da9b59ad 100644
--- a/bin/backend/controls/manufacturers/Administration.js
+++ b/bin/backend/controls/manufacturers/Administration.js
@@ -232,7 +232,7 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/Administration',
                 buttons: [{
                     name     : 'add',
                     textimage: 'fa fa-plus',
-                    text     : QUILocale.get(lg, 'manufacturer.window.create.title'),
+                    text     : QUILocale.get(lg, 'controls.manufacturers.Administration.btn.create'),
                     events   : {
                         onClick: self.openAddWindow
                     }
@@ -320,7 +320,7 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/Administration',
          */
         $gridDblClick: function () {
             var userId = this.$Grid.getSelectedData()[0].id;
-            QUIPanelUtils.openUserPanel(userId);
+            this.$openManufacturer(userId);
         },
 
         /**
@@ -432,11 +432,23 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/Administration',
                 options = this.$Grid.options,
                 Form    = this.$SearchContainer.getElement('form');
 
+            var sortOn = options.sortOn;
+
+            switch (options.sortOn) {
+                case 'active_status':
+                    sortOn = 'active';
+                    break;
+
+                case 'usergroup_display':
+                    sortOn = 'usergroup';
+                    break;
+            }
+
             var params = {
                 perPage: options.perPage || 50,
                 page   : options.page || 1,
                 sortBy : options.sortBy,
-                sortOn : options.sortOn,
+                sortOn : sortOn,
                 search : this.$SearchInput.value,
                 filter : {
                     id          : Form.elements.userId.checked ? 1 : 0,
@@ -522,53 +534,8 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/Administration',
 
             this.fireEvent('manufacturerOpenBegin', [this, userId]);
 
-            require([
-                'package/quiqqer/erp/bin/backend/controls/manufacturers/manufacturer/Panel',
-                'utils/Panels'
-            ], function (Panel, PanelUtils) {
-                if (self.isInWindow()) {
-                    var Container = new Element('div', {
-                        'class': 'quiqqer-erp-manufacturers-administration-manufacturer',
-                        styles : {
-                            left   : -50,
-                            opacity: 0
-                        }
-                    }).inject(self.getElm());
-
-                    self.$ManufacturerPanel = new Panel({
-                        header          : false,
-                        userId          : userId,
-                        showUserButton  : true,
-                        showDeleteButton: false,
-                        events          : {
-                            onError: function (Instance) {
-                                if (!Instance.$User) {
-                                    self.setAttribute('manufacturerId', false);
-                                }
-                            }
-                        }
-                    }).inject(Container);
-
-                    self.fireEvent('manufacturerOpen', [this, userId, self.$ManufacturerPanel]);
-
-                    moofx(Container).animate({
-                        left   : 0,
-                        opacity: 1
-                    }, {
-                        callback: function () {
-                            self.$ManufacturerPanel.fireEvent('show');
-                            self.fireEvent('manufacturerOpenEnd', [this, userId, self.$ManufacturerPanel]);
-                        }
-                    });
-
-                    return;
-                }
-
-                PanelUtils.openPanelInTasks(
-                    new Panel({
-                        userId: userId
-                    })
-                );
+            QUIPanelUtils.openUserPanel(userId).then(function () {
+                self.fireEvent('manufacturerOpenEnd', [this, userId, self.$ManufacturerPanel]);
             });
         },
 
@@ -608,37 +575,37 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/Administration',
             });
         },
 
-        /**
-         * opens the manufacturer delete window
-         */
-        openDeleteWindow: function () {
-            var self = this;
-
-            new QUIConfirm({
-                title      : QUILocale.get(lg, 'manufacturer.window.delete.title'),
-                text       : QUILocale.get(lg, 'manufacturer.window.delete.text'),
-                information: QUILocale.get(lg, 'manufacturer.window.delete.information'),
-                icon       : 'fa fa-trash',
-                texticon   : 'fa fa-trash',
-                maxHeight  : 400,
-                maxWidth   : 600,
-                autoclose  : false,
-                events     : {
-                    onSubmit: function (Win) {
-                        Win.Loader.show();
-
-                        var selected = self.$Grid.getSelectedData().map(function (entry) {
-                            return entry.id;
-                        });
-
-                        Users.deleteUsers(selected).then(function () {
-                            Win.close();
-                            self.refresh();
-                        });
-                    }
-                }
-            }).open();
-        },
+        ///**
+        // * opens the manufacturer delete window
+        // */
+        //openDeleteWindow: function () {
+        //    var self = this;
+        //
+        //    new QUIConfirm({
+        //        title      : QUILocale.get(lg, 'manufacturer.window.delete.title'),
+        //        text       : QUILocale.get(lg, 'manufacturer.window.delete.text'),
+        //        information: QUILocale.get(lg, 'manufacturer.window.delete.information'),
+        //        icon       : 'fa fa-trash',
+        //        texticon   : 'fa fa-trash',
+        //        maxHeight  : 400,
+        //        maxWidth   : 600,
+        //        autoclose  : false,
+        //        events     : {
+        //            onSubmit: function (Win) {
+        //                Win.Loader.show();
+        //
+        //                var selected = self.$Grid.getSelectedData().map(function (entry) {
+        //                    return entry.id;
+        //                });
+        //
+        //                Users.deleteUsers(selected).then(function () {
+        //                    Win.close();
+        //                    self.refresh();
+        //                });
+        //            }
+        //        }
+        //    }).open();
+        //},
 
         //region filter
 
diff --git a/bin/backend/controls/manufacturers/create/Manufacturer.css b/bin/backend/controls/manufacturers/create/Manufacturer.css
index 97cabbae85b399009f434274d0b1987e48256e42..42422039e477887fe6b23e93b4dee05bfe0a72a0 100644
--- a/bin/backend/controls/manufacturers/create/Manufacturer.css
+++ b/bin/backend/controls/manufacturers/create/Manufacturer.css
@@ -72,3 +72,15 @@
 .quiqqer-erp-manufacturers-create-manufacturerData-container table {
     margin-top: 20px;
 }
+
+.quiqqer-erp-manufacturers-create-manufacturerGroups-list {
+    margin-top: 10px !important;
+}
+
+.quiqqer-erp-manufacturers-create-manufacturerGroups-list li {
+    padding: 5px 0;
+}
+
+.quiqqer-erp-manufacturers-create-manufacturerGroups-list input {
+    margin: 0 5px 0 0;
+}
\ No newline at end of file
diff --git a/bin/backend/controls/manufacturers/create/Manufacturer.html b/bin/backend/controls/manufacturers/create/Manufacturer.html
index 6d2cb4bbd23348ed299520ee785e3c0b2eb9f38a..0185ce3ac4ef4adfbebb4aa8b6a44249558f4bb5 100644
--- a/bin/backend/controls/manufacturers/create/Manufacturer.html
+++ b/bin/backend/controls/manufacturers/create/Manufacturer.html
@@ -7,7 +7,7 @@
 
                 <label>
                     <span>{{manufacturerNoInputHeader}}</span>
-                    <input type="text" name="manufacturerId"/>
+                    <input type="text" name="manufacturerId" maxlength="50"/>
                 </label>
             </section>
         </li>
@@ -24,7 +24,12 @@
                                 <span class="field-container-item">
                                     {{textAddressCompany}}
                                 </span>
-                                    <input type="text" name="address-company" value="" class="field-container-field">
+                                    <input type="text"
+                                           name="address-company"
+                                           value=""
+                                           class="field-container-field"
+                                           maxlength="100"
+                                    >
                                 </label>
                             </td>
                         </tr>
@@ -34,7 +39,12 @@
                                 <span class="field-container-item">
                                     {{textAddressSalutation}}
                                 </span>
-                                    <input type="text" name="address-salutation" value="" class="field-container-field">
+                                    <input type="text"
+                                           name="address-salutation"
+                                           value=""
+                                           class="field-container-field"
+                                           maxlength="10"
+                                    >
                                 </label>
                             </td>
                         </tr>
@@ -44,7 +54,12 @@
                                 <span class="field-container-item">
                                     {{textAddressFirstname}}
                                 </span>
-                                    <input type="text" name="address-firstname" value="" class="field-container-field">
+                                    <input type="text"
+                                           name="address-firstname"
+                                           value=""
+                                           class="field-container-field"
+                                           maxlength="40"
+                                    >
                                 </label>
                             </td>
                         </tr>
@@ -54,7 +69,12 @@
                                 <span class="field-container-item">
                                     {{textAddressLastname}}
                                 </span>
-                                    <input type="text" name="address-lastname" value="" class="field-container-field">
+                                    <input type="text"
+                                           name="address-lastname"
+                                           value=""
+                                           class="field-container-field"
+                                           maxlength="40"
+                                    >
                                 </label>
                             </td>
                         </tr>
@@ -100,6 +120,16 @@
                                 </label>
                             </td>
                         </tr>
+                        <tr>
+                            <td>
+                                <label class="field-container">
+                                <span class="field-container-item">
+                                    {{textAddressEmail}}
+                                </span>
+                                    <input type="text" name="address-email" value="" class="field-container-field">
+                                </label>
+                            </td>
+                        </tr>
                     </table>
                 </div>
             </section>
diff --git a/bin/backend/controls/manufacturers/create/Manufacturer.js b/bin/backend/controls/manufacturers/create/Manufacturer.js
index 0755c2f442365e02cafe04deaa2d0339da8c8780..f4fcca906ab6c73b970f6071cae51d076594e69c 100644
--- a/bin/backend/controls/manufacturers/create/Manufacturer.js
+++ b/bin/backend/controls/manufacturers/create/Manufacturer.js
@@ -1,6 +1,13 @@
 /**
+ * Creation process for new manufacturer user
+ *
  * @module package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufacturer
  * @author www.pcsg.de (Patrick Müller)
+ *
+ * @event onLoad [this] - Fires when the control is fully loaded
+ * @event onCreateManufacturerBegin [this] - Fires right before the create request is sent to the server
+ * @event onCreateManufacturerEnd [this, manufacturerId] - Fires if the create requests finished successfully
+ * @event onCreateManufacturerError [this] - Fires if the create requests aborts due to an error
  */
 define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufacturer', [
 
@@ -29,16 +36,18 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
         Binds: [
             '$onInject',
             'next',
-            'previous'
+            'previous',
+            '$onGroupSelectChange'
         ],
 
         initialize: function (options) {
             this.parent(options);
 
-            this.$Container = null;
-            this.$List      = null;
-            this.$Form      = null;
-            this.$GroupList = null;
+            this.$Container   = null;
+            this.$List        = null;
+            this.$Form        = null;
+            this.$GroupList   = null;
+            this.$groupInputs = null;
 
             this.addEvents({
                 onInject: this.$onInject
@@ -74,9 +83,7 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
                 textAddressZIP       : QUILocale.get('quiqqer/quiqqer', 'zip'),
                 textAddressCity      : QUILocale.get('quiqqer/quiqqer', 'city'),
                 textAddressCountry   : QUILocale.get('quiqqer/quiqqer', 'country'),
-
-                textGroup : QUILocale.get(lg, lgPrefix + 'textGroup'),
-                textGroups: QUILocale.get(lg, lgPrefix + 'textGroups'),
+                textAddressEmail     : QUILocale.get('quiqqer/quiqqer', 'email'),
 
                 previousButton: QUILocale.get(lg, lgPrefix + 'previousButton'),
                 nextButton    : QUILocale.get(lg, lgPrefix + 'nextButton')
@@ -153,11 +160,14 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
                     new Element('li', {
                         html: '<label>' +
                             '<input type="checkbox" data-id="' + Group.id + '"/>' +
-                            '<span>' + Group.name + '</span>' +
+                            '<span>' + Group.name + ' (' + Group.id + ')</span>' +
                             '</label>'
                     }).inject(self.$GroupList);
                 }
 
+                self.$groupInputs = self.$GroupList.getElements('input');
+                self.$groupInputs.addEvent('change', self.$onGroupSelectChange);
+
                 // Country list
                 var countries     = result[1];
                 var CountrySelect = self.$Elm.getElement('[name="address-country"]');
@@ -188,9 +198,7 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
             var manufacturerId = elements.manufacturerId.value;
             var groupIds       = [];
 
-            var groupInputs = this.$GroupList.getElement('input');
-
-            groupInputs.forEach(function (Input) {
+            this.$groupInputs.forEach(function (Input) {
                 if (Input.checked) {
                     groupIds.push(Input.get('data-id'));
                 }
@@ -204,20 +212,29 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
                 'street_no' : elements['address-street_no'].value,
                 'zip'       : elements['address-zip'].value,
                 'city'      : elements['address-city'].value,
-                'country'   : elements['address-country'].value
+                'country'   : elements['address-country'].value,
+                'email'     : elements['address-email'].value
             };
 
             this.fireEvent('createManufacturerBegin', [this]);
 
-            QUIAjax.post('package_quiqqer_manufacturer_ajax_backend_create_createManufacturer', function (manufacturerId) {
+            QUIAjax.post('package_quiqqer_erp_ajax_manufacturers_create_newManufacturer', function (manufacturerId) {
                 self.fireEvent('createManufacturerEnd', [self, manufacturerId]);
             }, {
                 'package'     : 'quiqqer/erp',
                 manufacturerId: manufacturerId,
                 address       : JSON.encode(Address),
-                groupIds      : JSON.encode(groupIds)
-            }, function (e) {
-                console.log("TODO: hide loader");
+                groupIds      : JSON.encode(groupIds),
+                onError       : function () {
+                    self.fireEvent('createManufacturerError', [self]);
+
+                    // Not pretty but sufficient for now
+                    self.previous().then(function () {
+                        self.previous();
+                    }).then(function () {
+                        self.showManufacturerNumber();
+                    });
+                }
             });
         },
 
@@ -240,8 +257,12 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
 
             // change last step button
             if (newTop - height <= scrollHeight * -1) {
-                this.$Next.set('html', QUILocale.get(lg, 'window.manufacturer.creation.create'));
+                this.$Next.set(
+                    'html',
+                    QUILocale.get(lg, 'controls.manufacturers.create.Manufacturer.tpl.createButton')
+                );
                 this.$Next.set('data-last', 1);
+                this.$Next.disabled = true; // Disable "create" button until at least one manufacturer group is selected
             }
 
             // check if last step
@@ -269,8 +290,9 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
             var height = this.$Container.getSize().y;
             var newTop = this.$roundToStepPos(top + height);
 
-            this.$Next.set('html', QUILocale.get(lg, 'window.manufacturer.creation.next'));
+            this.$Next.set('html', QUILocale.get(lg, 'controls.manufacturers.create.Manufacturer.tpl.nextButton'));
             this.$Next.set('data-last', null);
+            this.$Next.disabled = false;
 
             if (newTop > 0) {
                 newTop = 0;
@@ -297,6 +319,22 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
             return pos * height * -1;
         },
 
+        /**
+         * Triggers if the user (de)selects a manufacturer group
+         */
+        $onGroupSelectChange: function () {
+            for (var i = 0, len = this.$groupInputs.length; i < len; i++) {
+                var Input = this.$groupInputs[i];
+
+                if (Input.checked) {
+                    this.$Next.disabled = false;
+                    return;
+                }
+            }
+
+            this.$Next.disabled = true;
+        },
+
         /**
          * Show the manufacturer number step
          */
diff --git a/bin/backend/controls/manufacturers/create/ManufacturerWindow.js b/bin/backend/controls/manufacturers/create/ManufacturerWindow.js
index 08314614bbf6e4cfe0db813a83637fd47a5183d8..5c1884443b4e7039ce5b26734c8f7da9b5e5cee9 100644
--- a/bin/backend/controls/manufacturers/create/ManufacturerWindow.js
+++ b/bin/backend/controls/manufacturers/create/ManufacturerWindow.js
@@ -11,7 +11,7 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
 ], function (QUIPopup, QUILocale, CreateManufacturer) {
     "use strict";
 
-    var lg = 'quiqqer/manufacturer';
+    var lg = 'quiqqer/erp';
 
     return new Class({
 
@@ -23,9 +23,10 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
         ],
 
         options: {
-            maxHeight: 700,
-            maxWidth : 600,
-            buttons  : false
+            maxHeight         : 700,
+            maxWidth          : 600,
+            buttons           : false,
+            backgroundClosable: false
         },
 
         initialize: function (options) {
@@ -63,6 +64,10 @@ define('package/quiqqer/erp/bin/backend/controls/manufacturers/create/Manufactur
                     onCreateManufacturerEnd: function (Instance, manufacturerId) {
                         self.fireEvent('submit', [self, manufacturerId]);
                         self.close();
+                    },
+
+                    onCreateManufacturerError: function () {
+                        self.Loader.hide();
                     }
                 }
             }).inject(this.getContent());
diff --git a/locale.xml b/locale.xml
index 45d4ecc857668eb3763fc6cd603fe21f0794e01f..0896b5819795415acb48945fca4f14e29d76790a 100644
--- a/locale.xml
+++ b/locale.xml
@@ -203,17 +203,49 @@
             <de><![CDATA[Artikel ersetzen]]></de>
             <en><![CDATA[Replace article]]></en>
         </locale>
+        
+        <!-- Permissions -->
+        <locale name="permission.quiqqer.erp_manufacturers._header">
+            <de><![CDATA[Shop - Hersteller]]></de>
+            <en><![CDATA[Shop - Manufacturers]]></en>
+        </locale>
+        <locale name="permission.quiqqer.erp_manufacturers.create">
+            <de><![CDATA[Darf neue Hersteller anlegen]]></de>
+            <en><![CDATA[Is allowed to create new manufacturers]]></en>
+        </locale>
+        <locale name="permission.quiqqer.erp_manufacturers.view">
+            <de><![CDATA[Darf die Hersteller-Verwaltung ansehen]]></de>
+            <en><![CDATA[Is allowed to view the manufacturer management]]></en>
+        </locale>
+
+        <!-- Menu -->
+        <locale name="menu.erp.title">
+            <de><![CDATA[Shop]]></de>
+            <en><![CDATA[Shop]]></en>
+        </locale>
     </groups>
 
     <groups name="quiqqer/erp" datatype="php">
 
+        <locale name="message.ajax.manufacturers.create.newManufacturer.success" html="true">
+            <de><![CDATA[Hersteller <b>[manufacturerId]</b> wurde erfolgreich erstellt.]]></de>
+            <en><![CDATA[Manufacturer <b>[manufacturerId]</b> was created successfully.]]></en>
+        </locale>
+        
         <locale name="exception.ajax.output.sendMail.error">
             <de>
                 <![CDATA[Leider ist beim E-Mail-Verand ein unerwarteter Fehler aufgetreten. Bitte wiederholen Sie den Vorgang, prüfen Sie die Fehler-Logs oder kontaktieren Sie einen Administator.]]></de>
             <en>
                 <![CDATA[Unfortunately, an unexpected error has occurred when sending the e-mail. Please repeat the process, check the error logs or contact an administrator.]]></en>
         </locale>
-
+        <locale name="exception.Manufacturers.createManufacturer.id_already_exists">
+            <de><![CDATA[Die eingegebene Herstellernummer ist bereits vergeben. Bitte wählen Sie eine andere Herstellernummer.]]></de>
+            <en><![CDATA[The entered manufacturer number is already assigned. Please select a different manufacturer number.]]></en>
+        </locale>
+        <locale name="exception.ajax.manufacturers.create.newManufacturer.error">
+            <de><![CDATA[Bei Erstellung des Herstellers ist ein unerwarteter Fehler aufgetreten. Bitte wiederholen Sie den Vorgang oder kontaktieren Sie einen Administrator.]]></de>
+            <en><![CDATA[An unexpected error occurred when creating the manufacturer. Please repeat the process or contact an administrator.]]></en>
+        </locale>
         <locale name="user.settings.title">
             <de><![CDATA[Rechnungsdaten]]></de>
             <en><![CDATA[Billing Details]]></en>
@@ -782,10 +814,59 @@
             <de><![CDATA[bis]]></de>
             <en><![CDATA[to]]></en>
         </locale>
+        <locale name="controls.manufacturers.Administration.btn.create">
+            <de><![CDATA[Neuer Hersteller]]></de>
+            <en><![CDATA[New manufacturer]]></en>
+        </locale>
         <locale name="controls.manufacturers.create.ManufacturerWindow.title">
             <de><![CDATA[Neuen Hersteller anlegen]]></de>
             <en><![CDATA[Create new manufacturer]]></en>
         </locale>
 
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerNoHeader">
+            <de><![CDATA[Neuen Hersteller anlegen]]></de>
+            <en><![CDATA[Create new manufacturer]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerNoText" html="true">
+            <de><![CDATA[Bitte legen Sie eine Herstellernummer bzw. -bezeichner fest.<br/>Diese Angabe kann später jederzeit geändert werden.]]></de>
+            <en><![CDATA[Please define a unique manufacturer number / identifier.<br/>This number can be changed later at any time.]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerNoInputHeader">
+            <de><![CDATA[Herstellernummer / -bezeichner]]></de>
+            <en><![CDATA[Manufacturer number / identifier]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerDataHeader">
+            <de><![CDATA[Herstellerdaten]]></de>
+            <en><![CDATA[Manufacturer data]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerDataText">
+            <de><![CDATA[Legen Sie hier die grundlegenden Herstellerdaten fest. Diese Daten können später noch geändert werden.]]></de>
+            <en><![CDATA[Define the basic manufacturer data here. These data can be changed later.]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerGroupsHeader">
+            <de><![CDATA[Herstellergruppen]]></de>
+            <en><![CDATA[Manufacturer groups]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.manufacturerGroupsText">
+            <de><![CDATA[Bitte wählen Sie mindestens eine Hersteller-Gruppe aus, zu der der neue Hersteller zugewiesen wird.]]></de>
+            <en><![CDATA[Please select at least one manufacturer group to which the new manufacturer will be assigned.]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.previousButton">
+            <de><![CDATA[Zurück]]></de>
+            <en><![CDATA[Back]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.nextButton">
+            <de><![CDATA[Weiter]]></de>
+            <en><![CDATA[Continue]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.Manufacturer.tpl.createButton">
+            <de><![CDATA[Hersteller anlegen]]></de>
+            <en><![CDATA[Create manufacturer]]></en>
+        </locale>
+        <locale name="controls.manufacturers.create.ManufacturerWindow.title">
+            <de><![CDATA[Neuer Hersteller]]></de>
+            <en><![CDATA[New manufacturer]]></en>
+        </locale>
+
     </groups>
 </locales>
diff --git a/menu.xml b/menu.xml
index df313d7bbc015eb17770b2d165cad4b77e6b72aa..3edccf38bd1f341448b6f600fdc4a9603038061a 100644
--- a/menu.xml
+++ b/menu.xml
@@ -1,11 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <menu>
 
-    <item parent="/apps/"
+    <item parent="/extras/"
+          name="erp"
+          icon="fa fa-sun-o"
+    >
+        <locale group="quiqqer/erp" var="menu.erp.title" />
+    </item>
+    <item parent="/extras/erp/"
           name="manufacturers"
           require="package/quiqqer/erp/bin/backend/controls/manufacturers/AdministrationPanel"
           icon="fa fa-wrench"
-          permission="quiqqer.erp.manufacturers.manage"
+          permission="quiqqer.erp_manufacturers.view"
     >
         <locale group="quiqqer/erp" var="menu.erp.manufacturers.title"/>
     </item>
diff --git a/permissions.xml b/permissions.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c1e186e7a85de88ac25729ad59bc2ef7e9ce779f
--- /dev/null
+++ b/permissions.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<permissions>
+
+    <permission name="quiqqer.erp_manufacturers.view" type="bool">
+        <defaultvalue>1</defaultvalue>
+    </permission>
+    <permission name="quiqqer.erp_manufacturers.create" type="bool">
+        <defaultvalue>0</defaultvalue>
+    </permission>
+
+</permissions>
diff --git a/src/QUI/ERP/Manufacturers.php b/src/QUI/ERP/Manufacturers.php
index b98d1bcddfad3e40656aa76214b9f6fe946e9442..7bd04fba482e8d5e73c53987420afc335b879fb7 100644
--- a/src/QUI/ERP/Manufacturers.php
+++ b/src/QUI/ERP/Manufacturers.php
@@ -41,12 +41,114 @@ public static function getManufacturerGroupIds()
         return $groupIds;
     }
 
+    /**
+     * Create a new manufacturer user
+     *
+     * @param string $manufacturerId - QUIQQER username
+     * @param array $address
+     * @param array $groupIds - QUIQQER group IDs of manufacturer groups
+     *
+     * @return QUI\Users\User
+     *
+     * @throws Exception
+     * @throws QUI\Exception
+     * @throws QUI\Permissions\Exception
+     */
+    public static function createManufacturer(string $manufacturerId, array $address = [], array $groupIds = [])
+    {
+        QUI\Permissions\Permission::checkPermission('quiqqer.erp_manufacturers.create');
+
+        $Users          = QUI::getUsers();
+        $manufacturerId = $Users::clearUsername($manufacturerId);
+
+        // Check ID
+        if ($Users->usernameExists($manufacturerId)) {
+            throw new Exception([
+                'quiqqer/erp',
+                'exception.Manufacturers.createManufacturer.id_already_exists',
+                [
+                    'userId' => $manufacturerId
+                ]
+            ]);
+        }
+
+        $SystemUser = $Users->getSystemUser();
+        $User       = $Users->createChild($manufacturerId, $SystemUser);
+
+        if (!empty($address)) {
+            try {
+                $Address = $User->getStandardAddress();
+            } catch (QUI\Exception $Exception) {
+                $Address = $User->addAddress();
+            }
+
+            $needles = [
+                'salutation',
+                'firstname',
+                'lastname',
+                'company',
+                'delivery',
+                'street_no',
+                'zip',
+                'city',
+                'country'
+            ];
+
+            foreach ($needles as $needle) {
+                if (!isset($address[$needle])) {
+                    $address[$needle] = '';
+                }
+            }
+
+            $Address->setAttribute('salutation', $address['salutation']);
+            $Address->setAttribute('firstname', $address['firstname']);
+            $Address->setAttribute('lastname', $address['lastname']);
+            $Address->setAttribute('company', $address['company']);
+            $Address->setAttribute('delivery', $address['delivery']);
+            $Address->setAttribute('street_no', $address['street_no']);
+            $Address->setAttribute('zip', $address['zip']);
+            $Address->setAttribute('city', $address['city']);
+            $Address->setAttribute('country', $address['country']);
+
+            // E-Mail
+            if (!empty($address['email'])) {
+                $User->setAttribute('email', $address['email']);
+                $Address->addMail($address['email']);
+            }
+
+            $Address->save();
+
+            if (!$User->getAttribute('firstname') || $User->getAttribute('firstname') === '') {
+                $User->setAttribute('firstname', $address['firstname']);
+            }
+
+            if (!$User->getAttribute('lastname') || $User->getAttribute('lastname') === '') {
+                $User->setAttribute('lastname', $address['lastname']);
+            }
+        }
+
+        // groups
+        $manufacturerGroupIds = self::getManufacturerGroupIds();
+
+        foreach ($groupIds as $groupId) {
+            $groupId = (int)$groupId;
+
+            if (\in_array($groupId, $manufacturerGroupIds)) {
+                $User->addToGroup($groupId);
+            }
+        }
+
+        $User->save($SystemUser);
+
+        return $User;
+    }
+
     /**
      * Search manufacturers
      *
      * @param array $searchParams
      * @param bool $countOnly (optional) - get count for search result only [default: false]
-     * @return int[]|int - membership user IDs or count
+     * @return int[]|int - Manufacturer user IDs or count
      */
     public static function search(array $searchParams, $countOnly = false)
     {
@@ -72,7 +174,7 @@ public static function search(array $searchParams, $countOnly = false)
 
         foreach (self::getManufacturerGroupIds() as $groupId) {
             $whereOr[] = "u.`usergroup` LIKE :group".$gc;
-            $bind      = 'group'.$gc;
+            $bind      = 'group'.$gc++;
 
             $binds[$bind] = [
                 'value' => '%,'.$groupId.',%',