diff -r 63571627c6d7 src/org/openbravo/retail/posterminal/UpdateCashup.java
--- a/src/org/openbravo/retail/posterminal/UpdateCashup.java	Tue Mar 14 09:18:07 2017 +0100
+++ b/src/org/openbravo/retail/posterminal/UpdateCashup.java	Wed Mar 15 10:21:45 2017 +0100
@@ -94,10 +94,21 @@
         cashUp.setBeingprocessed(jsonCashup.getString("isbeingprocessed").equalsIgnoreCase("Y"));
         cashUp.setNewOBObject(true);
         OBDal.getInstance().save(cashUp);
+        OBDal.getInstance().flush();
+        OBDal.getInstance().getConnection().commit();
+
       } catch (JSONException e) {
-        e.printStackTrace();
+        throw new OBException("Cashup JSON seems to be corrupted: ", e);
       } catch (Exception e) {
-        e.printStackTrace();
+        Query maybeCashupWasCreatedInParallel = OBDal.getInstance().getSession()
+            .createQuery("from OBPOS_App_Cashup where id=?");
+        maybeCashupWasCreatedInParallel.setString(0, cashUpId);
+        cashUp = (OBPOSAppCashup) maybeCashupWasCreatedInParallel.uniqueResult();
+        // If cashup exists, then other process (such as OpenTill) created it in parallel, and
+        // everything is fine. Otherwise, the process should fail.
+        if (cashUp == null) {
+          throw new OBException(e);
+        }
       }
     }
 
