diff --git a/web/org.openbravo.mobile.core/source/data/ob-datasource.js b/web/org.openbravo.mobile.core/source/data/ob-datasource.js
--- a/web/org.openbravo.mobile.core/source/data/ob-datasource.js
+++ b/web/org.openbravo.mobile.core/source/data/ob-datasource.js
@@ -14,7 +14,7 @@
 
   OB.DS.MAXSIZE = 100;
 
-  function serviceSuccess(inSender, inResponse, callback) {
+  function serviceSuccess(inSender, inResponse, callback, tx) {
     if (inResponse._entityname) {
       callback([inResponse]);
     } else {
@@ -41,7 +41,7 @@
       var status = response.status;
 
       if (status === 0) {
-        callback(response.data, response.message, response.lastUpdated);
+        callback(response.data, response.message, response.lastUpdated, null, tx);
         return;
       }
 
@@ -123,12 +123,12 @@
       contentType: 'application/json;charset=utf-8',
       ignoreForConnectionStatus: dataparams.parameters && dataparams.parameters.ignoreForConnectionStatus ? dataparams.parameters.ignoreForConnectionStatus : false,
       data: JSON.stringify(dataparams),
-      success: function (inSender, inResponse) {
+      success: function (inSender, inResponse, tx) {
         OB.DS.servicePOSTRequests.pop(source);
         if (this.processHasFailed) {
           return;
         }
-        serviceSuccess(inSender, inResponse, callback);
+        serviceSuccess(inSender, inResponse, callback, tx);
       },
       fail: function (inSender, inResponse) {
         OB.DS.servicePOSTRequests.pop(source);
diff --git a/web/org.openbravo.mobile.core/source/data/ob-requestrouter.js b/web/org.openbravo.mobile.core/source/data/ob-requestrouter.js
--- a/web/org.openbravo.mobile.core/source/data/ob-requestrouter.js
+++ b/web/org.openbravo.mobile.core/source/data/ob-requestrouter.js
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2015-2016 Openbravo S.L.U.
+ * Copyright (C) 2015-2017 Openbravo S.L.U.
  * Licensed under the Openbravo Commercial License version 1.0
  * You may obtain a copy of the License at http://www.openbravo.com/legal/obcl.html
  * or in the legal folder of this module distribution.
@@ -403,7 +403,7 @@
     implementation: function (service, ajaxRequest) {
 
       var me = this,
-          successCallback = function () {
+          successCallback = function (tx) {
           // execute the success callbacks
           new enyo.Ajax(ajaxRequest).success(null, {
             response: {
@@ -411,7 +411,7 @@
               result: '0',
               status: 0
             }
-          });
+          }, tx);
           me.sendMessages();
           };
 
@@ -441,8 +441,12 @@
         message.set('url', ajaxRequest.url);
         message.set('time', new Date().getTime());
         message.set('messageObj', ajaxRequest.data);
-        OB.Dal.save(message, successCallback, function () {
-          OB.error(arguments);
+        OB.Dal.transaction(function (tx) {
+          OB.Dal.saveInTransaction(tx, message, function () {
+            successCallback(tx);
+          }, function () {
+            OB.error(arguments);
+          });
         });
       } else {
         successCallback();
diff --git a/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js b/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js
--- a/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js
+++ b/web/org.openbravo.mobile.core/source/model/ob-terminal-model.js
@@ -1097,7 +1097,7 @@
           me.syncModelExecuteErrorCallbacks();
           };
 
-      var procSuccessCallBack = function (data, message) {
+      var procSuccessCallBack = function (data, message, lastUpdated, endRow, tx) {
 
           // error
           if (data && data.exception) {
@@ -1115,7 +1115,7 @@
             return;
           }
           // success. Elements can be now deleted from the database
-          var removeSyncedElemsCallback = function () {
+          var removeSyncedElemsCallback = function (tx) {
               OB.info("Purging the '" + OB.Dal.getTableName(model) + "' table");
               var promises = [];
 
@@ -1137,7 +1137,7 @@
                     });
                   } else {
                     // no persistent model (Default).
-                    OB.Dal.remove(record, function () {
+                    OB.Dal.removeInTransaction(tx, record, function () {
                       resolve();
                     }, function (tx, err) {
                       OB.UTIL.showError(err);
@@ -1167,7 +1167,7 @@
           if (modelObj.postProcessingFunction) {
             modelObj.postProcessingFunction(newDataToSync, removeSyncedElemsCallback);
           } else {
-            removeSyncedElemsCallback();
+            removeSyncedElemsCallback(tx);
           }
           };
 
