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
@@ -142,6 +142,11 @@
           && (!jsonorder.has("preserveId") || jsonorder.getBoolean("preserveId"))) {
         return successMessage(jsonorder);
       }
+
+      if (!isQuotation && !jsonorder.getBoolean("isLayaway")) {
+        verifyCashupStatus(jsonorder);
+      }
+
       long t0 = System.currentTimeMillis();
       long t1, t11, t2, t3;
       Order order = null;
@@ -1598,6 +1603,23 @@
 
   }
 
+  protected void verifyCashupStatus(JSONObject jsonorder) throws JSONException, OBException {
+    OBContext.setAdminMode(false);
+    try {
+      if (jsonorder.has("obposAppCashup") && jsonorder.getString("obposAppCashup") != null
+          && !jsonorder.getString("obposAppCashup").equals("")) {
+        OBPOSAppCashup cashUp = OBDal.getInstance().get(OBPOSAppCashup.class,
+            jsonorder.getString("obposAppCashup"));
+        if (cashUp != null && cashUp.isProcessedbo()) {
+          // Additional check to verify that the cashup related to the order has not been processed
+          throw new OBException("The cashup related to this order has been processed");
+        }
+      }
+    } finally {
+      OBContext.restorePreviousMode();
+    }
+  }
+
   protected void createApprovals(Order order, JSONObject jsonorder) {
     if (!jsonorder.has("approvals")) {
       return;
diff --git a/src/org/openbravo/retail/posterminal/ProcessCashClose.java b/src/org/openbravo/retail/posterminal/ProcessCashClose.java
--- a/src/org/openbravo/retail/posterminal/ProcessCashClose.java
+++ b/src/org/openbravo/retail/posterminal/ProcessCashClose.java
@@ -161,7 +161,7 @@
   }
 
   private void updateOrCreateCashupInfo(String cashUpId, JSONObject jsonCashup, Date cashUpDate)
-      throws JSONException {
+      throws JSONException, OBException {
     OBPOSAppCashup cashup = OBDal.getInstance().get(OBPOSAppCashup.class, cashUpId);
     // Update cashup info
     updateCashUpInfo(cashup, jsonCashup, cashUpDate);
@@ -206,8 +206,11 @@
    * @throws JSONException
    */
   private void updateCashUpInfo(OBPOSAppCashup cashup, JSONObject jsonCashup, Date cashUpDate)
-      throws JSONException {
+      throws JSONException, OBException {
 
+    if (cashup.isProcessed() && jsonCashup.getString("isprocessed").equalsIgnoreCase("N")) {
+      throw new OBException("The cashup is processed, and it can not be set as unprocessed");
+    }
     cashup.setNetsales(new BigDecimal(jsonCashup.getString("netSales")));
     cashup.setGrosssales(new BigDecimal(jsonCashup.getString("grossSales")));
     cashup.setNetreturns(new BigDecimal(jsonCashup.getString("netReturns")));
