diff --git a/ajax/frontend/redeem.php b/ajax/frontend/redeem.php
index 45e12d24aef912489a61b46aea431348dbd23ad0..2c1bde477a9a99931c54457fc04b37e4d513777d 100644
--- a/ajax/frontend/redeem.php
+++ b/ajax/frontend/redeem.php
@@ -38,8 +38,13 @@ function ($code, $orderHash) {
             return false;
         }
 
-        $Order     = QUI\ERP\Order\Handler::getInstance()->getOrderByHash($orderHash);
-        $coupons   = $Order->getDataEntry('quiqqer-coupons');
+        $Order   = QUI\ERP\Order\Handler::getInstance()->getOrderByHash($orderHash);
+        $coupons = $Order->getDataEntry('quiqqer-coupons');
+
+        if (empty($coupons)) {
+            $coupons = [];
+        }
+
         $coupons[] = $code;
 
         $coupons = \array_unique($coupons);
diff --git a/ajax/frontend/removeCoupons.php b/ajax/frontend/removeCoupons.php
new file mode 100644
index 0000000000000000000000000000000000000000..d9a48571cdc220110001b1b68293615d56286163
--- /dev/null
+++ b/ajax/frontend/removeCoupons.php
@@ -0,0 +1,40 @@
+<?php
+
+/**
+ * This file contains package_quiqqer_coupons_ajax_frontend_removeCoupons
+ */
+
+/**
+ * Remove all coupons from an order
+ *
+ * @param string $orderHash - Order hash
+ */
+QUI::$Ajax->registerFunction(
+    'package_quiqqer_coupons_ajax_frontend_removeCoupons',
+    function ($orderHash) {
+        $Order    = QUI\ERP\Order\Handler::getInstance()->getOrderByHash($orderHash);
+        $Articles = $Order->getArticles();
+
+        foreach ($Articles as $index => $Article) {
+            $customData = $Article->getCustomData();
+
+            if (!isset($customData['package'])) {
+                continue;
+            }
+
+            if ($customData['package'] !== 'quiqqer/coupon') {
+                continue;
+            }
+
+            if (!isset($customData['code'])) {
+                continue;
+            }
+
+            $Order->removeArticle($index);
+        }
+
+        $Order->setData('quiqqer-coupons', []);
+        $Order->save();
+    },
+    ['orderHash']
+);
diff --git a/bin/frontend/controls/CouponCodeInput.css b/bin/frontend/controls/CouponCodeInput.css
index d29243083855411ca4aa7b57c334d898565b2ade..733fcde5014fdda23c64a4a184d2fd968c61ffde 100644
--- a/bin/frontend/controls/CouponCodeInput.css
+++ b/bin/frontend/controls/CouponCodeInput.css
@@ -7,6 +7,7 @@ div + .quiqqer-coupons-field {
 }
 
 .quiqqer-coupons-couponcodeinput {
+    background: rgba(0, 0, 0, 0.05);
     display: flex;
     padding: 5px;
 }
@@ -23,4 +24,12 @@ div + .quiqqer-coupons-field {
 .quiqqer-coupons-couponcodeinput input {
     line-height: 36px;
     margin-right: 1rem;
-}
\ No newline at end of file
+}
+
+.quiqqer-coupons-remove {
+    margin-left: 1rem;
+}
+
+.quiqqer-coupons-remove .fa {
+    margin-right: 0;
+}
diff --git a/bin/frontend/controls/CouponCodeInput.js b/bin/frontend/controls/CouponCodeInput.js
index 146bc734f2104d8dc624f6cbb803d008cabfa948..a055182a804dc89c13be701b91afa632e2b6ea35 100644
--- a/bin/frontend/controls/CouponCodeInput.js
+++ b/bin/frontend/controls/CouponCodeInput.js
@@ -75,6 +75,35 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
                 event.stop();
                 self.$submit();
             });
+
+            if (this.isInOrder()) {
+                var OrderProcess = this.getOrderProcess();
+
+                new Promise(function (resolve) {
+                    if (!OrderProcess.isLoaded()) {
+                        return OrderProcess.addEvent('onLoad', resolve);
+                    }
+
+                    resolve();
+                }).then(function () {
+                    if (OrderProcess.getAttribute('basketEditable') === false) {
+                        // remove coupon codes button
+                        new Element('button', {
+                            'class': 'quiqqer-coupons-remove',
+                            'html' : '<span class="fa fa-close"></span>',
+                            title  : QUILocale.get(lg, 'remove.coupons.button'),
+                            events : {
+                                click: function (e) {
+                                    e.stop();
+                                    self.removeCouponsFromOrder().catch(function (e) {
+                                        console.error(e);
+                                    });
+                                }
+                            }
+                        }).inject(self.$Elm.getElement('.quiqqer-coupons-couponcodeinput'));
+                    }
+                });
+            }
         },
 
         /**
@@ -97,10 +126,6 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
             this.Loader.show();
 
             // get order process
-            var OrderProcessNode = this.getElm().getParent(
-                '[data-qui="package/quiqqer/order/bin/frontend/controls/OrderProcess"]'
-            );
-
             if (!this.isInOrder()) {
                 QUIAjax.get('package_quiqqer_order_ajax_frontend_basket_getLastOrder', function (order) {
                     CouponCodes.addCouponCodeToBasket(code, order.hash).then(function (redeemed) {
@@ -123,7 +148,7 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
                 return;
             }
 
-            var OrderProcess = window.QUI.Controls.getById(OrderProcessNode.get('data-quiid'));
+            var OrderProcess = this.getOrderProcess();
 
             OrderProcess.Loader.show();
 
@@ -152,6 +177,47 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
             );
 
             return !!OrderProcessNode;
+        },
+
+        /**
+         * Return the order process
+         *
+         * @return {Object}
+         */
+        getOrderProcess: function () {
+            var OrderProcessNode = this.getElm().getParent(
+                '[data-qui="package/quiqqer/order/bin/frontend/controls/OrderProcess"]'
+            );
+
+            return window.QUI.Controls.getById(OrderProcessNode.get('data-quiid'));
+        },
+
+        /**
+         * Remove all coupons from the order
+         *
+         * @return {Promise}
+         */
+        removeCouponsFromOrder: function () {
+            if (!this.isInOrder()) {
+                return Promise.resolve();
+            }
+
+            var self = this;
+
+            return new Promise(function (resolve) {
+                var OrderProcess = self.getOrderProcess();
+
+                OrderProcess.Loader.show();
+                OrderProcess.getOrder().then(function (orderHash) {
+                    QUIAjax.get('package_quiqqer_coupons_ajax_frontend_removeCoupons', function () {
+                        resolve();
+                        OrderProcess.reload();
+                    }, {
+                        'package': 'quiqqer/coupon',
+                        orderHash: orderHash
+                    });
+                });
+            });
         }
     });
 });
diff --git a/composer.json b/composer.json
index 53e8e45094ce6d882dc452d3c48e2de8d761080d..24a15ddb15b6b382d5176bc085148eadaa0f742c 100644
--- a/composer.json
+++ b/composer.json
@@ -1,27 +1,26 @@
 {
-  "name": "quiqqer/coupons",
-  "type": "quiqqer-module",
-  "description": "Coupons for QUIQQER",
-  "version": "dev-master",
-  "license": "GPL-3.0+",
-  "authors": [
-    {
-      "name": "Patrick Müller",
-      "email": "support@pcsg.de",
-      "homepage": "http://www.pcsg.de",
-      "role": "Developer"
+    "name": "quiqqer\/coupons",
+    "type": "quiqqer-module",
+    "description": "Coupons for QUIQQER",
+    "license": "GPL-3.0+",
+    "authors": [
+        {
+            "name": "Patrick M\u00fcller",
+            "email": "support@pcsg.de",
+            "homepage": "http:\/\/www.pcsg.de",
+            "role": "Developer"
+        }
+    ],
+    "support": {
+        "email": "support@pcsg.de"
+    },
+    "require": {
+        "quiqqer\/quiqqer": "^1.2|*@dev",
+        "quiqqer\/discount": "^1|*@dev"
+    },
+    "autoload": {
+        "psr-4": {
+            "QUI\\ERP\\Coupons\\": "src\/QUI\/ERP\/Coupons"
+        }
     }
-  ],
-  "support": {
-    "email": "support@pcsg.de"
-  },
-  "require": {
-    "quiqqer/quiqqer": "^1.2|*@dev",
-    "quiqqer/discount": "^1|*@dev"
-  },
-  "autoload": {
-    "psr-4": {
-      "QUI\\ERP\\Coupons\\": "src/QUI/ERP/Coupons"
-    }
-  }
 }
diff --git a/locale.xml b/locale.xml
index 02b516e31ee9973bb451592d5203abdd2fc8c39e..bdffa68363f8cf416110b670c44b09fb7f9709e0 100644
--- a/locale.xml
+++ b/locale.xml
@@ -390,5 +390,10 @@
             <de><![CDATA[Einlösen]]></de>
             <en><![CDATA[Redeem]]></en>
         </locale>
+
+        <locale name="remove.coupons.button">
+            <de><![CDATA[Alle Coupons entfernen]]></de>
+            <en><![CDATA[Remove all coupons]]></en>
+        </locale>
     </groups>
 </locales>