diff --git a/src-db/database/sourcedata/AD_MESSAGE.xml b/src-db/database/sourcedata/AD_MESSAGE.xml
--- a/src-db/database/sourcedata/AD_MESSAGE.xml
+++ b/src-db/database/sourcedata/AD_MESSAGE.xml
@@ -1020,6 +1020,18 @@
 <!--35E1D8D0895641FD9F527BEAC7D0513B-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--35E1D8D0895641FD9F527BEAC7D0513B--></AD_MESSAGE>
 
+<!--36B32988327C4B588C9425726E715E42--><AD_MESSAGE>
+<!--36B32988327C4B588C9425726E715E42-->  <AD_MESSAGE_ID><![CDATA[36B32988327C4B588C9425726E715E42]]></AD_MESSAGE_ID>
+<!--36B32988327C4B588C9425726E715E42-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--36B32988327C4B588C9425726E715E42-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--36B32988327C4B588C9425726E715E42-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--36B32988327C4B588C9425726E715E42-->  <VALUE><![CDATA[OBPOS_PaymentAmountDistinctThanReceiptAmountBody]]></VALUE>
+<!--36B32988327C4B588C9425726E715E42-->  <MSGTEXT><![CDATA[The payment amount is distinct than total order amount, and this order is not a layaway or a payment credit has been used. If you continue, the payment amount will be modified automatically.]]></MSGTEXT>
+<!--36B32988327C4B588C9425726E715E42-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--36B32988327C4B588C9425726E715E42-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--36B32988327C4B588C9425726E715E42-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--36B32988327C4B588C9425726E715E42--></AD_MESSAGE>
+
 <!--373D80E182E7433A841EFF4EA8E22394--><AD_MESSAGE>
 <!--373D80E182E7433A841EFF4EA8E22394-->  <AD_MESSAGE_ID><![CDATA[373D80E182E7433A841EFF4EA8E22394]]></AD_MESSAGE_ID>
 <!--373D80E182E7433A841EFF4EA8E22394-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
@@ -1621,6 +1633,18 @@
 <!--50467FDE41174594B12E2E0B0FDB0E4C-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
 <!--50467FDE41174594B12E2E0B0FDB0E4C--></AD_MESSAGE>
 
+<!--511F3DDAFF2444668CF2E67B7C61A75B--><AD_MESSAGE>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <AD_MESSAGE_ID><![CDATA[511F3DDAFF2444668CF2E67B7C61A75B]]></AD_MESSAGE_ID>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <AD_ORG_ID><![CDATA[0]]></AD_ORG_ID>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <ISACTIVE><![CDATA[Y]]></ISACTIVE>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <VALUE><![CDATA[OBPOS_PaymentAmountDistinctThanReceiptAmountTitle]]></VALUE>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <MSGTEXT><![CDATA[Payment Amount is Wrong]]></MSGTEXT>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <MSGTYPE><![CDATA[E]]></MSGTYPE>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <AD_MODULE_ID><![CDATA[FF808181326CC34901326D53DBCF0018]]></AD_MODULE_ID>
+<!--511F3DDAFF2444668CF2E67B7C61A75B-->  <ISINCLUDEINI18N><![CDATA[N]]></ISINCLUDEINI18N>
+<!--511F3DDAFF2444668CF2E67B7C61A75B--></AD_MESSAGE>
+
 <!--526F0B212B18417E809E65F8B87A6C36--><AD_MESSAGE>
 <!--526F0B212B18417E809E65F8B87A6C36-->  <AD_MESSAGE_ID><![CDATA[526F0B212B18417E809E65F8B87A6C36]]></AD_MESSAGE_ID>
 <!--526F0B212B18417E809E65F8B87A6C36-->  <AD_CLIENT_ID><![CDATA[0]]></AD_CLIENT_ID>
diff --git a/src/org/openbravo/retail/posterminal/OrderLoader.java b/src/org/openbravo/retail/posterminal/OrderLoader.java
--- a/src/org/openbravo/retail/posterminal/OrderLoader.java
+++ b/src/org/openbravo/retail/posterminal/OrderLoader.java
@@ -1442,6 +1442,8 @@
         OBDal.getInstance().save(invoice);
       }
 
+      boolean checkPaidOnCreditChecked = (jsonorder.has("paidOnCredit") && jsonorder
+          .getBoolean("paidOnCredit"));
       BigDecimal diffPaid = BigDecimal.ZERO;
       if ((gross.compareTo(BigDecimal.ZERO) > 0) && (gross.compareTo(amt) > 0)) {
         diffPaid = gross.subtract(amt);
@@ -1450,7 +1452,8 @@
         diffPaid = gross.subtract(amt.multiply(new BigDecimal("-1")));
       }
       // if (payments.length() == 0 ) or (writeoffAmt<0) means that use credit was used
-      if ((payments.length() == 0 || diffPaid.compareTo(BigDecimal.ZERO) != 0) && invoice != null) {
+      if ((payments.length() == 0 || diffPaid.compareTo(BigDecimal.ZERO) != 0) && invoice != null
+          && checkPaidOnCreditChecked) {
         FIN_PaymentScheduleDetail paymentScheduleDetail = OBProvider.getInstance().get(
             FIN_PaymentScheduleDetail.class);
         paymentScheduleDetail.setOrderPaymentSchedule(paymentSchedule);
@@ -1473,6 +1476,9 @@
     long t1 = System.currentTimeMillis();
     OBContext.setAdminMode(true);
     try {
+      boolean checkPaidOnCreditChecked = (jsonorder.has("paidOnCredit") && jsonorder
+          .getBoolean("paidOnCredit"));
+
       boolean totalIsNegative = jsonorder.getDouble("gross") < 0;
       int stdPrecision = order.getCurrency().getStandardPrecision().intValue();
       BigDecimal amount = BigDecimal.valueOf(payment.getDouble("origAmount")).setScale(
@@ -1494,6 +1500,10 @@
           || (writeoffAmt.signum() == -1 && totalIsNegative)) {
         // there was an overpayment, we need to take into account the writeoffamt
         amount = amount.subtract(writeoffAmt).setScale(stdPrecision, RoundingMode.HALF_UP);
+      } else if (!isLayaway
+          && !checkPaidOnCreditChecked
+          && ((writeoffAmt.signum() == -1 && (!totalIsNegative)) || (writeoffAmt.signum() == 1 && totalIsNegative))) {
+        amount = amount.add(new BigDecimal("-1").multiply(writeoffAmt));
       }
 
       FIN_PaymentScheduleDetail paymentScheduleDetail = OBProvider.getInstance().get(
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
@@ -511,6 +511,16 @@
         }, {
           label: OB.I18N.getLabel('OBMOBC_LblCancel')
         }]);
+      } else if ((OB.DEC.sub(receipt.getPayment(), receipt.getGross())!==0) && (!receipt.isLayaway() && !receipt.get('paidOnCredit'))) {
+        OB.UTIL.showConfirmation.display(OB.I18N.getLabel('OBPOS_PaymentAmountDistinctThanReceiptAmountTitle'), OB.I18N.getLabel('OBPOS_PaymentAmountDistinctThanReceiptAmountBody'), [{
+          label: OB.I18N.getLabel('OBMOBC_LblOk'),
+          isConfirmButton: true,
+          action: function () {
+            receipt.trigger('paymentAccepted');
+          }
+        }, {
+          label: OB.I18N.getLabel('OBMOBC_LblCancel')
+        }]);
       } else {
         receipt.trigger('paymentAccepted');
       }
