As you want to `apply the coupon on review step` then you need to ap`ply coupon and update review content using ajax`. **Step1:** First `override` the controller `Onepagecontroller.php` using below link 1. https://magento.stackexchange.com/questions/30566/making-edits-to-core-controllers-onepagecontroller-php 2. [How to override a controller in Magento][1] <?php require_once Mage::getModuleDir('controllers', "Mage_Checkout").DS."Onepagecontroller.php"; class Amit_CustomCheckout_OnepageControllerextends Mage_Checkout_OnepageController { } **Step2:** Then on the override controller `Amit_CustomCheckout_OnepageController` add a function `applycouponAction`,in where you have send the ajax `request to apply coupon` and return `update content of review step`. <?php require_once Mage::getModuleDir('controllers', "Mage_Checkout").DS."IndexController.php"; class Amit_CustomCheckout_OnepageController extends Mage_Checkout_OnepageController { public function applycouponAction(){ /** * No reason continue with empty shopping cart */ if (!$this->getOnepage()->getQuote()->getItemsCount()) { $result['error']=true; $result['message']=$this->__('No item in cart.'); $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); return; } $couponCode = (string) $this->getRequest()->getParam('coupon_code'); if ($this->getRequest()->getParam('remove') == 1) { $couponCode = ''; } $oldCouponCode = $this->getOnepage()->getQuote()->getCouponCode(); if (!strlen($couponCode) && !strlen($oldCouponCode)) { $result['error']=true; $result['message']=$this->__('Coupon code "%s" is not valid.', Mage::helper('core')->escapeHtml($couponCode)); $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); return; } try { $codeLength = strlen($couponCode); $isCodeLengthValid = $codeLength && $codeLength <= Mage_Checkout_Helper_Cart::COUPON_CODE_MAX_LENGTH; $this->getOnepage()->getQuote()->getShippingAddress()->setCollectShippingRates(true); $this->getOnepage()->getQuote()->setCouponCode($isCodeLengthValid ? $couponCode : '') ->collectTotals() ->save(); $result=array(); if ($codeLength) { if ($isCodeLengthValid && $couponCode == $this->getOnepage()->getQuote()->getCouponCode()) { $result['error']=false; $result['message']=$this->__('Coupon code "%s" was applied.', Mage::helper('core')->escapeHtml($couponCode)); $result['html']=$this->_getReviewHtml(); } else { $result['error']=true; $result['message']=$this->__('Coupon code "%s" is not valid.', Mage::helper('core')->escapeHtml($couponCode)); } } else { $result['error']=false; $result['message']=$this->__('Coupon code was canceled.'); $result['html']=$this->_getReviewHtml(); } } catch (Mage_Core_Exception $e) { $this->_getSession()->addError($e->getMessage()); $result['error']=true; $result['message']=$this->__('Cannot apply the coupon code.'); } catch (Exception $e) { $result['error']=true; $result['message']=$this->__('Cannot apply the coupon code.'); Mage::logException($e); } $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($result)); } } In this code, i have `return json data with a flag field name errooe` .html return contend of handler `checkout_onepage_review` and check this h`andler file at checkout.xml` Then basic on this logic you need to update content [1]: http://www.amitbera.com/how-to-override-a-controller-in-magento/