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
@@ -1426,7 +1426,32 @@
     order.setPartnerAddress(OBDal.getInstance().get(Location.class,
         jsonorder.getJSONObject("bp").getString("locId")));
     order.setInvoiceAddress(order.getPartnerAddress());
-    order.setPaymentMethod((FIN_PaymentMethod) bp.getPaymentMethod());
+
+    Boolean paymenthMethod = false;
+    if (!jsonorder.isNull("paymentMethodKind")
+        && !jsonorder.getString("paymentMethodKind").equals("null")) {
+      String posTerminalId = jsonorder.getString("posTerminal");
+      OBPOSApplications posTerminal = OBDal.getInstance().get(OBPOSApplications.class,
+          posTerminalId);
+      if (posTerminal != null) {
+        String paymentTypeName = jsonorder.getString("paymentMethodKind");
+        OBPOSAppPayment paymentType = null;
+        for (OBPOSAppPayment type : posTerminal.getOBPOSAppPaymentList()) {
+          if (type.getSearchKey().equals(paymentTypeName)) {
+            paymentType = type;
+          }
+        }
+        if (paymentType != null) {
+          order.setPaymentMethod(paymentType.getPaymentMethod().getPaymentMethod());
+          paymenthMethod = true;
+        }
+      }
+    }
+
+    if (!paymenthMethod) {
+      order.setPaymentMethod((FIN_PaymentMethod) bp.getPaymentMethod());
+    }
+
     if (bp.getPaymentTerms() != null) {
       order.setPaymentTerms((PaymentTerm) bp.getPaymentTerms());
     } else {
@@ -1647,7 +1672,7 @@
         paymentSchedule.setNewOBObject(true);
         paymentSchedule.setCurrency(order.getCurrency());
         paymentSchedule.setOrder(order);
-        paymentSchedule.setFinPaymentmethod(order.getBusinessPartner().getPaymentMethod());
+        paymentSchedule.setFinPaymentmethod(order.getPaymentMethod());
         // paymentSchedule.setPaidAmount(new BigDecimal(0));
         paymentSchedule.setAmount(BigDecimal.valueOf(jsonorder.getDouble("gross")).setScale(
             pricePrecision, RoundingMode.HALF_UP));
diff --git a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
--- a/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
+++ b/web/org.openbravo.retail.posterminal/js/data/dataordersave.js
@@ -123,6 +123,12 @@
         receipt.set('movementDate', OB.I18N.normalizeDate(new Date()));
         receipt.set('accountingDate', OB.I18N.normalizeDate(new Date()));
 
+        receipt.set('paymentMethodKind', null);
+        if (receipt.get('payments').length === 1 && receipt.get('orderType') === 0 && !receipt.get('isLayaway') && !receipt.get('isQuotation')) {
+          var payment = receipt.get('payments').models[0];
+          receipt.set('paymentMethodKind', payment.get('kind'));
+        }
+
         // multiterminal support
         // be sure that the active terminal is the one set as the order proprietary
         receipt.set('posTerminal', OB.MobileApp.model.get('terminal').id);
