diff --git a/commerce_coupon.api.php b/commerce_coupon.api.php
index 030d88d..114307c 100644
--- a/commerce_coupon.api.php
+++ b/commerce_coupon.api.php
@@ -38,3 +38,22 @@
  */
 function hook_commerce_coupon_granted_amount_alter($amount, $coupon, $order) {
 }
+
+/**
+ * Alter the entities when a coupon is redeemed.
+ * Order is saved, coupon needs to be saved if altered.
+ */
+function hook_commerce_coupon_redeem_alter($coupon, &$order){
+  
+}
+
+/**
+ * Allow custom module to do additional validation. 
+ */
+function hook_commerce_coupon_validate($coupon, &$order) {
+  $validation_results = &drupal_static('commerce_coupon_action_validation_results');
+  // Do some validation.
+  if ($coupon->type == 'custom_coupon'){
+      $validation_results = TRUE;
+  }
+}
\ No newline at end of file
diff --git a/commerce_coupon.module b/commerce_coupon.module
index 0538d72..39d1186 100644
--- a/commerce_coupon.module
+++ b/commerce_coupon.module
@@ -243,6 +243,9 @@
   // We invoke the rules. The defined action callback methods sets then the
   // validation result appropriate.
   rules_invoke_event('commerce_coupon_validate', $coupon, $order);
+  
+  // Allow custom module to do additional validation. 
+  drupal_alter('commerce_coupon_validate', $coupon, $order);
 
   // We get our global variable and return the result.
   return drupal_static('commerce_coupon_action_validation_results');
@@ -266,6 +269,8 @@
   // We invoke the rule. The defined action callback methods sets then the
   // coupon value appropriate.
   rules_invoke_event('commerce_coupon_redeem', $coupon, $order);
+  // Allow alter hooks..
+  drupal_alter('commerce_coupon_redeem',$coupon,$order);
   commerce_order_save($order);
 }
 
