diff --git a/bin/frontend/controls/CouponCodeInput.js b/bin/frontend/controls/CouponCodeInput.js
index 53de490f352d0c8f4a43e166e0509a42a0bfd57a..146bc734f2104d8dc624f6cbb803d008cabfa948 100644
--- a/bin/frontend/controls/CouponCodeInput.js
+++ b/bin/frontend/controls/CouponCodeInput.js
@@ -11,13 +11,14 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
 
     'package/quiqqer/coupons/bin/frontend/CouponCodes',
 
+    'Ajax',
     'Locale',
     'Mustache',
 
     'text!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.html',
     'css!package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput.css'
 
-], function (QUIControl, QUILoader, CouponCodes, QUILocale, Mustache, template) {
+], function (QUIControl, QUILoader, CouponCodes, QUIAjax, QUILocale, Mustache, template) {
     "use strict";
 
     var lg = 'quiqqer/coupons';
@@ -100,6 +101,28 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
                 '[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) {
+                        if (!redeemed) {
+                            self.$running = false;
+                            self.Loader.hide();
+                            return;
+                        }
+
+                        QUIAjax.get('package_quiqqer_order_ajax_frontend_basket_getOrderProcessUrl', function (url) {
+                            window.location = url + '?coupon=' + code;
+                        }, {
+                            'package': 'quiqqer/order'
+                        });
+                    });
+                }, {
+                    'package': 'quiqqer/order'
+                });
+
+                return;
+            }
+
             var OrderProcess = window.QUI.Controls.getById(OrderProcessNode.get('data-quiid'));
 
             OrderProcess.Loader.show();
@@ -117,6 +140,18 @@ define('package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput', [
 
                 OrderProcess.reload();
             });
+        },
+
+        /**
+         * Is the coupon in the order process?
+         * @return {boolean}
+         */
+        isInOrder: function () {
+            var OrderProcessNode = this.getElm().getParent(
+                '[data-qui="package/quiqqer/order/bin/frontend/controls/OrderProcess"]'
+            );
+
+            return !!OrderProcessNode;
         }
     });
 });
diff --git a/events.xml b/events.xml
index faefcbafd958a8513b136e13bf1d9e149e138c8a..fea43d838fe3207a13667fe25936b2c8e973ba2a 100644
--- a/events.xml
+++ b/events.xml
@@ -1,13 +1,23 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <events>
-    <event on="onQuiqqer::order::orderProcessBasketEnd" fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd"/>
-    <!--<event on="onQuiqqer::order::basketSmall::end" fire="\QUI\ERP\Payments\PayPal\Events::templateOrderBasketSmallEnd"/>-->
+    <event on="onQuiqqer::order::orderProcessBasketEnd"
+           fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd"
+    />
+
+    <event on="onQuiqqer::order::orderShoppingCardBasketEnd"
+           fire="\QUI\ERP\Coupons\Events::templateOrderProcessBasketEnd"
+    />
 
     <event on="onQuiqqerOrderBasketToOrder"
            fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderBasketToOrder"
     />
+
     <event on="onQuiqqerOrderSuccessful"
            fire="\QUI\ERP\Coupons\Events::onQuiqqerOrderSuccessful"
     />
 
+    <event on="onOrderProcess"
+           fire="\QUI\ERP\Coupons\Events::onOrderProcess"
+    />
+
 </events>
\ No newline at end of file
diff --git a/src/QUI/ERP/Coupons/Events.php b/src/QUI/ERP/Coupons/Events.php
index e6fcb761060a74a347967cb7db7a56863fc00f1d..a1aae71a0a6ce7e82697976a89ae7526ac0b66f4 100644
--- a/src/QUI/ERP/Coupons/Events.php
+++ b/src/QUI/ERP/Coupons/Events.php
@@ -20,8 +20,9 @@ class Events
      *
      * @param Collector $Collector
      * @param BasketGuest $Basket
+     * @param $Order
      */
-    public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket)
+    public static function templateOrderProcessBasketEnd(Collector $Collector, $Basket, $Order)
     {
         if (!($Basket instanceof Basket)
             && !($Basket instanceof QUI\ERP\Order\Basket\BasketOrder)
@@ -29,11 +30,62 @@ public static function templateOrderProcessBasketEnd(Collector $Collector, $Bask
             return;
         }
 
+        if (isset($Order) && isset($_GET['coupon'])) {
+            try {
+                $code = Handler::sanitizeCode($_GET['coupon']);
+
+                $CouponCode = Handler::getCouponCodeByCode($code);
+                $CouponCode->checkRedemption(QUI::getUserBySession());
+                $CouponCode->addToOrder($Order);
+            } catch (\Exception $Exception) {
+            }
+        }
+
         $Collector->append(
             '<div data-qui="package/quiqqer/coupons/bin/frontend/controls/CouponCodeInput"></div>'
         );
     }
 
+    /**
+     * @param QUI\ERP\Order\OrderProcess $OrderProcess
+     * @throws QUI\ERP\Order\Exception
+     * @throws QUI\Exception
+     */
+    public static function onOrderProcess(QUI\ERP\Order\OrderProcess $OrderProcess)
+    {
+        $CurrentStep = $OrderProcess->getCurrentStep();
+        $currentStep = $CurrentStep->getType();
+
+        if ($currentStep !== QUI\ERP\Order\Controls\OrderProcess\Basket::class) {
+            return;
+        }
+
+        if (!isset($_GET['coupon'])) {
+            return;
+        }
+
+
+        try {
+            $Order = $OrderProcess->getOrder();
+            $code  = Handler::sanitizeCode($_GET['coupon']);
+
+            $CouponCode = Handler::getCouponCodeByCode($code);
+            $CouponCode->checkRedemption(QUI::getUserBySession());
+
+            $coupons   = $Order->getDataEntry('quiqqer-coupons');
+            $coupons[] = $code;
+
+            $coupons = \array_unique($coupons);
+
+            $Order->setData('quiqqer-coupons', $coupons);
+            $Order->update();
+
+
+            $CouponCode->addToOrder($Order);
+        } catch (\Exception $Exception) {
+        }
+    }
+
     /**
      * event - on price factor init
      *