diff --git a/ajax/backend/rules/getRules.php b/ajax/backend/rules/getRules.php
new file mode 100644
index 0000000000000000000000000000000000000000..f5b353f96ff909d5afd1ebda2afd6da184798f4d
--- /dev/null
+++ b/ajax/backend/rules/getRules.php
@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * This file contains package_quiqqer_shipping_ajax_backend_rules_getRules
+ */
+
+/**
+ * Return all wanted shipping rules
+ *
+ * @return array
+ */
+QUI::$Ajax->registerFunction(
+    'package_quiqqer_shipping_ajax_backend_rules_getRules',
+    function ($ruleIds) {
+        $ruleIds = \json_decode($ruleIds, true);
+        $Rules   = QUI\ERP\Shipping\Rules\Factory::getInstance();
+
+        $result = [];
+
+        foreach ($ruleIds as $ruleId) {
+            try {
+                $result[] = $Rules->getChild($ruleId)->toArray();
+            } catch (QUI\Exception $Exception) {
+                \QUI\System\Log::addDebug($Exception);
+            }
+        }
+
+        return $result;
+    },
+    ['ruleIds'],
+    'Permission::checkAdminUser'
+);
diff --git a/ajax/backend/update.php b/ajax/backend/update.php
index 446ce4b2dd1a7b7b11d4e83976690b6d68f03334..4aa11a2f83b9f9d2bbe87fe100be00206f6de472 100644
--- a/ajax/backend/update.php
+++ b/ajax/backend/update.php
@@ -38,6 +38,15 @@ function ($shippingId, $data) {
         }
 
         $ShippingEntry->setAttributes($data);
+
+        if (isset($data['shipping_rules'])) {
+            $shipping = json_decode($data['shipping_rules'], true);
+
+            foreach ($shipping as $shippingId) {
+                $ShippingEntry->addShippingRuleId($shippingId);
+            }
+        }
+
         $ShippingEntry->update();
 
         QUI::getMessagesHandler()->addSuccess(
diff --git a/bin/backend/classes/ShippingRules.js b/bin/backend/classes/ShippingRules.js
index a36c64175a8d898629cde874aefdeadf7acdfd2f..39f923a305c724d578fdf82351e67d21fb239811 100644
--- a/bin/backend/classes/ShippingRules.js
+++ b/bin/backend/classes/ShippingRules.js
@@ -43,6 +43,22 @@ define('package/quiqqer/shipping/bin/backend/classes/ShippingRules', [
                     onError  : reject
                 });
             });
+        },
+
+        /**
+         * Return the wanted rules
+         *
+         * @param ruleIds
+         * @return {Promise}
+         */
+        getRules: function (ruleIds) {
+            return new Promise(function (resolve, reject) {
+                QUIAjax.get('package_quiqqer_shipping_ajax_backend_rules_getRules', resolve, {
+                    'package': 'quiqqer/shipping',
+                    ruleIds  : JSON.encode(ruleIds),
+                    onError  : reject
+                });
+            });
         }
     });
 });
diff --git a/bin/backend/controls/ShippingEntry.List.js b/bin/backend/controls/ShippingEntry.List.js
index 08891e98eb24d1c0e9d9e347738f0140944aa78e..a49970e827d5e18c488a530aff8c6c1f9006097f 100644
--- a/bin/backend/controls/ShippingEntry.List.js
+++ b/bin/backend/controls/ShippingEntry.List.js
@@ -1,6 +1,8 @@
 /**
  * @module package/quiqqer/shipping/bin/backend/controls/ShippingEntry.List
  * @author www.pcsg.de (Henning Leutz)
+ *
+ * @event onLoad [self]
  */
 define('package/quiqqer/shipping/bin/backend/controls/ShippingEntry.List', [
 
@@ -18,17 +20,21 @@ define('package/quiqqer/shipping/bin/backend/controls/ShippingEntry.List', [
         Type   : 'package/quiqqer/shipping/bin/backend/controls/ShippingEntry.List',
 
         Binds: [
-            '$onInject'
+            '$onInject',
+            '$openAddDialog',
+            '$openDeleteDialog'
         ],
 
         options: {
-            shippingId: false
+            shippingId: false,
+            name      : 'shipping-rules'
         },
 
         initialize: function (options) {
             this.parent(options);
 
-            this.$Grid = null;
+            this.$Grid  = null;
+            this.$Input = null;
 
             this.addEvents({
                 onInject: this.$onInject
@@ -44,14 +50,36 @@ define('package/quiqqer/shipping/bin/backend/controls/ShippingEntry.List', [
 
             this.$Elm.addClass('quiqqer-shipping-rules');
 
+            this.$Input = new Element('input', {
+                type: 'hidden',
+                name: this.getAttribute('name')
+            }).inject(this.$Elm);
 
             return this.$Elm;
         },
 
+        /**
+         * refresh the input value
+         */
+        refreshInput: function () {
+            if (!this.$Grid) {
+                return;
+            }
+
+            var value = this.$Grid.getData().map(function (entry) {
+                return parseInt(entry.id);
+            });
+
+            value = JSON.encode(value);
+
+            this.$Input.value = value;
+        },
+
         /**
          * event: on inject
          */
         $onInject: function () {
+            var self      = this;
             var Container = new Element('div').inject(this.getElm());
             var width     = Container.getSize().x - 5;
 
@@ -99,19 +127,85 @@ define('package/quiqqer/shipping/bin/backend/controls/ShippingEntry.List', [
             });
 
             this.$Grid.setWidth(width);
+
+            require([
+                'package/quiqqer/shipping/bin/backend/Shipping',
+                'package/quiqqer/shipping/bin/backend/ShippingRules',
+                'package/quiqqer/shipping/bin/backend/utils/ShippingUtils'
+            ], function (Shipping, ShippingRules, Utils) {
+                Shipping.getShippingEntry(
+                    self.getAttribute('shippingId')
+                ).then(function (result) {
+                    var shippingRules = result.shipping_rules;
+
+                    try {
+                        shippingRules = JSON.decode(shippingRules);
+                    } catch (e) {
+                        shippingRules = [];
+                    }
+
+                    return ShippingRules.getRules(shippingRules);
+                }).then(function (rules) {
+                    self.$Grid.setData({
+                        data: Utils.parseRulesDataForGrid(rules)
+                    });
+
+                    self.fireEvent('load', [self]);
+                });
+            });
+        },
+
+        /**
+         * Add shipping rules to the shipping entry
+         *
+         * @param {Array} shippingRules - list of ids
+         */
+        addShippingRules: function (shippingRules) {
+            var self = this;
+
+            return new Promise(function (resolve) {
+                require([
+                    'package/quiqqer/shipping/bin/backend/ShippingRules'
+                ], function (ShippingRules) {
+                    ShippingRules.getRules(shippingRules).then(function (rules) {
+                        var current = QUILocale.getCurrent();
+
+                        rules.forEach(function (v, k) {
+                            var title = '';
+
+                            if (typeof v.title[current] !== 'undefined') {
+                                title = v.title[current];
+                            } else {
+                                title = Object.values(v.title)[0];
+                            }
+
+                            rules[k].title = title;
+                        });
+
+                        self.$Grid.setData({
+                            data: rules
+                        });
+
+                        self.refreshInput();
+                        resolve();
+                    });
+                });
+            });
         },
 
         /**
          * open rule window to add a rule to the shipping rules
          */
         $openAddDialog: function () {
+            var self = this;
+
             require([
                 'package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRuleListWindow'
             ], function (ShippingRuleListWindow) {
                 new ShippingRuleListWindow({
                     events: {
-                        onSubmit: function () {
-                            console.log('submit');
+                        onSubmit: function (Win, selected) {
+                            self.addShippingRules(selected);
                         }
                     }
                 }).open();
diff --git a/bin/backend/controls/ShippingEntry.js b/bin/backend/controls/ShippingEntry.js
index b9f2f266f245992643693e4f92946fa2e202f62e..10239904f3dbff2814074daf5cd2c4b1a2f409a4 100644
--- a/bin/backend/controls/ShippingEntry.js
+++ b/bin/backend/controls/ShippingEntry.js
@@ -370,7 +370,8 @@ define('package/quiqqer/shipping/bin/backend/controls/ShippingEntry', [
                 Container.getElement('.field-id').set('html', data.id);
 
                 new ShippingRulesGrid({
-                    shippingId: self.getAttribute('shippingId')
+                    shippingId: self.getAttribute('shippingId'),
+                    name      : 'shipping_rules'
                 }).inject(
                     Container.getElement('.shipping-rules tbody td')
                 );
diff --git a/bin/backend/controls/shippingRules/ShippingRuleList.js b/bin/backend/controls/shippingRules/ShippingRuleList.js
index 85b6d56bb035d97dba30c1c8fc541178999d1f6b..e382012dcfcb3dbc225bdd40e50db5ee08f3df3f 100644
--- a/bin/backend/controls/shippingRules/ShippingRuleList.js
+++ b/bin/backend/controls/shippingRules/ShippingRuleList.js
@@ -7,10 +7,11 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
     'qui/QUI',
     'qui/controls/Control',
     'package/quiqqer/shipping/bin/backend/ShippingRules',
+    'package/quiqqer/shipping/bin/backend/utils/ShippingUtils',
     'controls/grid/Grid',
     'Locale'
 
-], function (QUI, QUIControl, ShippingRules, Grid, QUILocale) {
+], function (QUI, QUIControl, ShippingRules, ShippingUtils, Grid, QUILocale) {
     "use strict";
 
     return new Class({
@@ -18,11 +19,16 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
         Extends: QUIControl,
         Type   : 'package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRuleList',
 
+        options: {
+            multiple: true
+        },
+
         Binds: [
             '$onInject',
             '$openCreateDialog',
             '$openDeleteDialog',
-            'refresh'
+            'refresh',
+            'getSelected'
         ],
 
         initialize: function (options) {
@@ -73,10 +79,11 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
             var height = size.y;
 
             this.$Grid = new Grid(Container, {
-                height     : height,
-                width      : width,
-                pagination : true,
-                buttons    : [{
+                height           : height,
+                width            : width,
+                pagination       : true,
+                multipleSelection: this.getAttribute('multiple'),
+                buttons          : [{
                     name     : 'create',
                     text     : QUILocale.get('quiqqer/quiqqer', 'create'),
                     textimage: 'fa fa-plus',
@@ -92,7 +99,7 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
                         onClick: this.$openDeleteDialog
                     }
                 }],
-                columnModel: [{
+                columnModel      : [{
                     header   : QUILocale.get('quiqqer/system', 'id'),
                     dataIndex: 'id',
                     dataType : 'number',
@@ -135,17 +142,8 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
             ShippingRules.getList().then(function (rules) {
                 self.fireEvent('refresh', [self, rules]);
 
-                var current = QUILocale.getCurrent();
-
-                var data = rules.map(function (entry) {
-                    entry.title        = entry.title[current];
-                    entry.workingTitle = entry.workingTitle[current];
-
-                    return entry;
-                });
-
                 self.$Grid.setData({
-                    data: data
+                    data: ShippingUtils.parseRulesDataForGrid(rules)
                 });
 
                 return rules;
@@ -169,8 +167,8 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
                 return [];
             }
 
-            return this.$Grid.getSelected().map(function (entry) {
-                return entry.id;
+            return this.$Grid.getSelectedData().map(function (entry) {
+                return parseInt(entry.id);
             });
         },
 
@@ -187,7 +185,7 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
             ], function (CreateRuleWindow) {
                 new CreateRuleWindow({
                     events: {
-                        onCloseCreateRuleWindow: function () {
+                        onClose: function () {
                             self.fireEvent('closeCreateRuleWindow', [self]);
                         }
                     }
diff --git a/bin/backend/controls/shippingRules/ShippingRuleListWindow.js b/bin/backend/controls/shippingRules/ShippingRuleListWindow.js
index 728fe8b027fbf588dbe3b07a5d0751f11e294ba9..b0d16dab58fd22b741b618ac45731ceab05dacd1 100644
--- a/bin/backend/controls/shippingRules/ShippingRuleListWindow.js
+++ b/bin/backend/controls/shippingRules/ShippingRuleListWindow.js
@@ -24,8 +24,7 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
 
         options: {
             maxHeight: 600,
-            maxWidth : 600,
-            autoclose: false
+            maxWidth : 600
         },
 
         initialize: function (options) {
@@ -71,11 +70,16 @@ define('package/quiqqer/shipping/bin/backend/controls/shippingRules/ShippingRule
         },
 
         /**
-         * event: on submit
+         * Submit the window
+         *
+         * @method qui/controls/windows/Confirm#submit
          */
-        $onSubmit: function () {
-            var selected = this.$List.getSelected();
+        submit: function () {
+            this.fireEvent('submit', [this, this.$List.getSelected()]);
 
+            if (this.getAttribute('autoclose')) {
+                this.close();
+            }
         }
     });
 });
diff --git a/bin/backend/utils/ShippingUtils.js b/bin/backend/utils/ShippingUtils.js
new file mode 100644
index 0000000000000000000000000000000000000000..0bbc4ea43ead2670c0be88b29dd573f405c594c5
--- /dev/null
+++ b/bin/backend/utils/ShippingUtils.js
@@ -0,0 +1,44 @@
+/**
+ * @module package/quiqqer/shipping/bin/backend/utils/ShippingUtils
+ * @author www.pcsg.de (Henning Leutz)
+ */
+define('package/quiqqer/shipping/bin/backend/utils/ShippingUtils', [
+
+    'Locale'
+
+], function (QUILocale) {
+
+    "use strict";
+
+    return {
+
+        /**
+         * Return a rule data from ajax for a rule grid
+         *
+         * @param {Array} rules
+         * @return {Array}
+         */
+        parseRulesDataForGrid: function (rules) {
+            var self = this;
+
+            return rules.map(function (entry) {
+                return self.parseRuleDataForGrid(entry);
+            });
+        },
+
+        /**
+         * parse one rule entry of an ajax rule array to a rule grid entry
+         *
+         * @param {Object} ruleData
+         * @return {Object}
+         */
+        parseRuleDataForGrid: function (ruleData) {
+            var current = QUILocale.getCurrent();
+
+            ruleData.title        = ruleData.title[current];
+            ruleData.workingTitle = ruleData.workingTitle[current];
+
+            return ruleData;
+        }
+    };
+});
\ No newline at end of file
diff --git a/src/QUI/ERP/Shipping/Types/Factory.php b/src/QUI/ERP/Shipping/Types/Factory.php
index d4c044e6939fbc191a1b5f71714cdebbbf85debb..5d50a5602f049e780e6ce9044923fd0ef0d04851 100644
--- a/src/QUI/ERP/Shipping/Types/Factory.php
+++ b/src/QUI/ERP/Shipping/Types/Factory.php
@@ -49,14 +49,6 @@ public function createChild($data = [])
             $data['active'] = 0;
         }
 
-//        if (!isset($data['purchase_quantity_from']) || !\is_integer($data['purchase_quantity_from'])) {
-//            $data['purchase_quantity_from'] = 0;
-//        }
-//
-//        if (!isset($data['purchase_quantity_until']) || !\is_integer($data['purchase_quantity_until'])) {
-//            $data['purchase_quantity_until'] = 0;
-//        }
-
         if (!isset($data['priority']) || !\is_integer($data['priority'])) {
             $data['priority'] = 0;
         }
diff --git a/src/QUI/ERP/Shipping/Types/ShippingEntry.php b/src/QUI/ERP/Shipping/Types/ShippingEntry.php
index a16d9fba82ee8f2c1aafdd283c18dcf9f14cd1ec..bfe894c240e5fc19f870bbdff8b14d7a55ac0044 100644
--- a/src/QUI/ERP/Shipping/Types/ShippingEntry.php
+++ b/src/QUI/ERP/Shipping/Types/ShippingEntry.php
@@ -12,8 +12,8 @@
 use QUI\Permissions\Permission;
 
 use QUI\ERP\Shipping\Api;
-use QUI\ERP\Areas\Utils as AreaUtils;
-use QUI\ERP\Shipping\Exceptions\ShippingCanNotBeUsed;
+use QUI\ERP\Shipping\Rules\Factory as RuleFactory;
+use QUI\ERP\Shipping\Rules\ShippingRule;
 
 /**
  * Class ShippingEntry
@@ -384,4 +384,63 @@ protected function setShippingLocale($var, $title)
         }
     }
     //endregion
+
+    //region rules
+
+    /**
+     * @param ShippingRule $Rule
+     */
+    public function addShippingRule(ShippingRule $Rule)
+    {
+        $shippingRules = $this->getAttribute('shipping_rules');
+        $shippingRules = \json_decode($shippingRules, true);
+
+        if (!\in_array($Rule->getId(), $shippingRules)) {
+            $shippingRules[] = $Rule->getId();
+        }
+
+        $this->setAttribute('shipping_rules', \json_encode($shippingRules));
+    }
+
+    /**
+     * Add a shipping rule by its id
+     *
+     * @param integer $shippingRuleId
+     * @throws QUI\Exception
+     */
+    public function addShippingRuleId($shippingRuleId)
+    {
+        /* @var $Rule ShippingRule */
+        $Rule = RuleFactory::getInstance()->getChild($shippingRuleId);
+        $this->addShippingRule($Rule);
+    }
+
+    /**
+     * Return the shipping rules of the
+     * @return ShippingRule[]
+     */
+    public function getShippingRules()
+    {
+        $shippingRules = $this->getAttribute('shipping_rules');
+        $shippingRules = \json_decode($shippingRules, true);
+
+        if (!is_array($shippingRules)) {
+            return [];
+        }
+
+        $result = [];
+        $Rules  = RuleFactory::getInstance();
+
+        foreach ($shippingRules as $shippingRule) {
+            try {
+                $result[] = $Rules->getChild($shippingRule);
+            } catch (QUI\Exception $Exception) {
+                QUI\System\Log::addDebug($Exception);
+            }
+        }
+
+        return $result;
+    }
+
+    //endregion
 }