diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js b/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js
@@ -478,15 +478,19 @@
                   silent: true
                 });
               });
-              receipt.trigger('print'); // to guaranty execution order
-              orderList.deleteCurrent(true);
+              receipt.trigger('print', receipt, null, function () {
+                // to guaranty execution order
+                orderList.deleteCurrent(true);
+              });
             }
           });
         } else {
           receipt.trigger('closed', {
             callback: function () {
-              receipt.trigger('print'); // to guaranty execution order
-              orderList.deleteCurrent(true);
+              receipt.trigger('print', receipt, null, function () {
+                // to guaranty execution order
+                orderList.deleteCurrent(true);
+              });
             }
           });
         }
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-print.js b/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-print.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-print.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-print.js
@@ -15,11 +15,11 @@
       var terminal = OB.POS.modelterminal.get('terminal');
       this.receipt = model.get('order');
       this.multiOrders = model.get('multiOrders');
-      this.multiOrders.on('print', function (order, forcePrint) {
-        this.print(order, forcePrint);
+      this.multiOrders.on('print', function (order, forcePrint, callback) {
+        this.print(order, forcePrint, callback);
       }, this);
-      this.receipt.on('print', function (order, forcePrint) {
-        this.print(null, forcePrint);
+      this.receipt.on('print', function (order, forcePrint, callback) {
+        this.print(order, forcePrint, callback);
       }, this);
 
       this.receipt.on('displayTotal', this.displayTotal, this);
@@ -36,7 +36,7 @@
       this.templatecashup = new OB.DS.HWResource(terminal.printCashUpTemplate || OB.OBPOSPointOfSale.Print.CashUpTemplate);
       };
 
-  PrintReceipt.prototype.print = function (order, forcePrint) {
+  PrintReceipt.prototype.print = function (order, forcePrint, callback) {
 
     // Clone the receipt
     var receipt = new OB.Model.Order(),
@@ -97,6 +97,9 @@
           }, {
             label: OB.I18N.getLabel('OBMOBC_LblCancel')
           }]);
+          if (callback) {
+            callback();
+          }
         }
       });
       //Print again when it is a return and the preference is 'Y' or when one of the payments method has the print twice checked
@@ -197,4 +200,4 @@
   OB.OBPOSPointOfSale.Print.DisplayTotal = 'res/displaytotal.xml';
   OB.OBPOSPointOfSale.Print.CashUpTemplate = 'res/printcashup.xml';
 
-}());
+}());
\ No newline at end of file
