diff --git a/web/org.openbravo.mobile.core/source/data/ob-dal.js b/web/org.openbravo.mobile.core/source/data/ob-dal.js
--- a/web/org.openbravo.mobile.core/source/data/ob-dal.js
+++ b/web/org.openbravo.mobile.core/source/data/ob-dal.js
@@ -594,55 +594,73 @@
         }, error);
 
         if (_.isArray(initialData)) {
-          OB.Data.localDB.transaction(function (tx) {
-            var props = model.getProperties ? model.getProperties() : model.prototype.properties,
-                filterVal, values, _idx = 0,
-                updateRecord = function (tx, model, values) {
-                var deleteStatement;
-                deleteStatement = model.getDeleteByIdStatement ? model.getDeleteByIdStatement() : "DELETE FROM " + model.prototype.tableName + " WHERE " + model.prototype.propertyMap.id + "=?";
-                tx.executeSql(deleteStatement, [values[0]], function () {
-                  var insertSatement;
-                  insertSatement = model.getInsertStatement ? model.getInsertStatement() : model.prototype.insertStatement;
-                  tx.executeSql(insertSatement, values, null, error);
-                }, error);
-                };
+          var props = model.getProperties ? model.getProperties() : model.prototype.properties,
+              filterVal, values, increment = 1000,
+              updateRecord, executeInBatches;
 
-            _.each(initialData, function (item) {
-              var filterProps, insertStatement;
-              values = [];
+          updateRecord = function (tx, model, values) {
+            var deleteStatement;
+            deleteStatement = model.getDeleteByIdStatement ? model.getDeleteByIdStatement() : "DELETE FROM " + model.prototype.tableName + " WHERE " + model.prototype.propertyMap.id + "=?";
+            tx.executeSql(deleteStatement, [values[0]], function () {
+              var insertSatement;
+              insertSatement = model.getInsertStatement ? model.getInsertStatement() : model.prototype.insertStatement;
+              tx.executeSql(insertSatement, values, null, error);
+            }, error);
+          };
 
-              _.each(props, function (prop) {
-                var propName = typeof prop === 'string' ? prop : prop.name;
-                if (!propName || '_idx' === propName) {
-                  return;
+          executeInBatches = function (data, index) {
+            var _idx = index;
+            OB.Data.localDB.transaction(function (tx) {
+              while (_idx < data.length && _idx < index + increment) {
+                var filterProps, insertStatement, item = data[_idx],
+                    i, propName, prop;
+                values = [];
+
+                for (i = 0; i < props.length; i++) {
+                  prop = props[i];
+                  propName = typeof prop === 'string' ? prop : prop.name;
+                  if (propName && '_idx' !== propName) {
+                    values.push(item[propName]);
+                  }
                 }
-                values.push(item[propName]);
-              });
 
-              if ((model.hasFilter && model.hasFilter()) || model.prototype.propertiesFilter) {
-                filterVal = '';
-                filterProps = model.getFilterProperties ? model.getFilterProperties() : model.prototype.propertiesFilter;
-                _.each(filterProps, function (prop) {
-                  filterVal = filterVal + item[prop] + '###';
-                });
-                values.push(filterVal);
+                if ((model.hasFilter && model.hasFilter()) || model.prototype.propertiesFilter) {
+                  filterVal = '';
+                  filterProps = model.getFilterProperties ? model.getFilterProperties() : model.prototype.propertiesFilter;
+
+                  for (i = 0; i < filterProps.length; i++) {
+                    prop = filterProps[i];
+                    filterVal = filterVal + item[prop] + '###';
+                  }
+
+                  values.push(filterVal);
+                }
+
+                values.push(_idx);
+                if (incremental) {
+                  updateRecord(tx, model, values);
+                } else {
+                  insertStatement = model.getInsertStatement ? model.getInsertStatement() : model.prototype.insertStatement;
+                  tx.executeSql(insertStatement, values, null, error);
+                }
+                _idx++;
+
               }
+            }, error, function () {
+              if (_idx < data.length) {
+                executeInBatches(data, _idx);
+              } else {
+                // transaction success, execute callback
+                if (_.isFunction(success)) {
+                  success();
+                }
 
-              values.push(_idx);
-              if (incremental) {
-                updateRecord(tx, model, values);
-              } else {
-                insertStatement = model.getInsertStatement ? model.getInsertStatement() : model.prototype.insertStatement;
-                tx.executeSql(insertStatement, values, null, error);
               }
-              _idx++;
             });
-          }, error, function () {
-            // transaction success, execute callback
-            if (_.isFunction(success)) {
-              success();
-            }
-          });
+          };
+
+          executeInBatches(initialData, 0);
+
         } else { // no initial data
           throw 'initialData must be an Array';
         }
@@ -732,4 +750,4 @@
       }
     }
   }
-});
\ No newline at end of file
+});
