diff --git a/web/org.openbravo.retail.posterminal/js/data/datacustomeraddrsave.js b/web/org.openbravo.retail.posterminal/js/data/datacustomeraddrsave.js
--- a/web/org.openbravo.retail.posterminal/js/data/datacustomeraddrsave.js
+++ b/web/org.openbravo.retail.posterminal/js/data/datacustomeraddrsave.js
@@ -42,7 +42,7 @@
       }
     };
 
-    OB.DATA.executeCustomerAddressSave = function (customerAddr, callback) {
+    OB.DATA.executeCustomerAddressSave = function (customerAddr, callback, callbackError) {
       var customerAddrList, customerAddrId = this.customerAddr.get('id'),
           isNew = false,
           bpLocToSave = new OB.Model.ChangedBPlocation(),
@@ -102,9 +102,14 @@
             }
             OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_customerAddrSaved', [customerAddr.get('_identifier')]));
           };
+          errorCallback = function () {
+            if (callbackError) {
+              callbackError();
+            }
+          };
           customerAddrListToChange = new OB.Collection.ChangedBPlocationList();
           customerAddrListToChange.add(bpLocToSave);
-          OB.MobileApp.model.runSyncProcess(successCallback);
+          OB.MobileApp.model.runSyncProcess(successCallback, errorCallback);
         }, function () {
           //error saving BP changes with changes in changedbusinesspartners
           OB.UTIL.showError(OB.I18N.getLabel('OBPOS_errorSavingCustomerAddrChn', [customerAddr.get('_identifier')]));
@@ -156,10 +161,15 @@
               }
               OB.UTIL.showSuccess(OB.I18N.getLabel('OBPOS_customerAddrSaved', [customerAddr.get('_identifier')]));
             };
+            errorCallback = function () {
+              if (callbackError) {
+                callbackError();
+              }
+            };
             customerAddrListToChange = new OB.Collection.ChangedBPlocationList();
             customerAddrListToChange.add(bpLocToSave);
             if (!OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
-              OB.MobileApp.model.runSyncProcess(successCallback);
+              OB.MobileApp.model.runSyncProcess(successCallback, errorCallback);
             }
           }, function () {
             //error saving BP changes with changes in changedbusinesspartners
diff --git a/web/org.openbravo.retail.posterminal/js/model/bplocation.js b/web/org.openbravo.retail.posterminal/js/model/bplocation.js
--- a/web/org.openbravo.retail.posterminal/js/model/bplocation.js
+++ b/web/org.openbravo.retail.posterminal/js/model/bplocation.js
@@ -21,20 +21,26 @@
     dataLimit: OB.Dal.DATALIMIT,
     local: false,
     remote: 'OBPOS_remote.customer',
-    saveCustomerAddr: function (callback) {
+    saveCustomerAddr: function (callback, callbackError) {
       var nameLength, newSk;
       if (!this.get('isBillTo') && !this.get('isShipTo')) {
         OB.UTIL.showError(OB.I18N.getLabel('OBPOS_shippedOrInvoicedNotChekedOff'));
+        if (callbackError instanceof Function) {
+          callbackError();
+        }
         return;
       }
       if (this.get('name') === '') {
         OB.UTIL.showError(OB.I18N.getLabel('OBPOS_NameReqForBPAddress'));
+        if (callbackError instanceof Function) {
+          callbackError();
+        }
         return false;
       }
       this.set('_identifier', this.get('name'));
 
       if (OB.MobileApp.model.hasPermission('OBMOBC_SynchronizedMode', true)) {
-        OB.DATA.executeCustomerAddressSave(this, callback);
+        OB.DATA.executeCustomerAddressSave(this, callback, callbackError);
       } else {
         this.trigger('customerAddrSaved');
         callback();
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/components/sharedcomponents.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/components/sharedcomponents.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/components/sharedcomponents.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/components/sharedcomponents.js
@@ -25,7 +25,18 @@
   kind: 'OB.UI.Button',
   style: 'width: 100px; margin: 0px 0px 8px 5px;',
   classes: 'btnlink-gray btnlink btnlink-small',
-  i18nContent: 'OBMOBC_LblCancel'
+  i18nContent: 'OBMOBC_LblCancel',
+  handlers: {
+    onDisableButton: 'disableButton'
+  },
+  disableButton: function (inSender, inEvent) {
+    this.setDisabled(inEvent.disabled);
+    if (inEvent.disabled) {
+      this.addClass(this.classButtonDisabled);
+    } else {
+      this.removeClass(this.classButtonDisabled);
+    }
+  }
 });
 
 enyo.kind({
@@ -130,6 +141,12 @@
   saveCustomerAddr: function (inSender, inEvent) {
     var me = this;
 
+    function enableButtonsCallback() {
+      me.waterfall('onDisableButton', {
+        disabled: false
+      });
+    }
+
     function getCustomerAddrValues(params) {
       me.waterfall('onSaveChange', {
         customer: params.customer,
@@ -185,13 +202,16 @@
             return true;
           }
           var callback = function () {
+              enableButtonsCallback();
               goToViewWindow({
                 customer: OB.UTIL.clone(me.customer),
                 customerAddr: OB.UTIL.clone(me.model.get('customerAddr'))
               });
               };
-          me.model.get('customerAddr').saveCustomerAddr(callback);
+          me.model.get('customerAddr').saveCustomerAddr(callback, enableButtonsCallback);
         });
+      } else {
+        enableButtonsCallback();
       }
     } else {
       this.model.get('customerAddr').loadModel(this.customerAddr, function (customerAddr) {
@@ -245,9 +265,13 @@
                   businessPartner: me.customer,
                   target: 'order'
                 });
+                enableButtonsCallback();
               }, function error(tx) {
                 OB.error(tx);
+                enableButtonsCallback();
               });
+            } else {
+              enableButtonsCallback();
             }
             };
 
@@ -268,6 +292,7 @@
                   var receipt = OB.MobileApp.model.receipt,
                       orderlines = [];
                   if (args && args.cancellation && args.cancellation === true) {
+                    enableButtonsCallback();
                     return true;
                   }
                   receipt.set('skipCalculateReceipt', true);
@@ -282,7 +307,7 @@
                   receipt.unset('preventServicesUpdate');
                   receipt.unset('deleting');
                   receipt.calculateGross();
-                  args.customerAddr.saveCustomerAddr(callback);
+                  args.customerAddr.saveCustomerAddr(callback, enableButtonsCallback);
                   receipt.set('skipCalculateReceipt', false);
                 });
               }
@@ -300,11 +325,14 @@
               isNew: true
             }, function (args) {
               if (args && args.cancellation && args.cancellation === true) {
+                enableButtonsCallback();
                 return true;
               }
-              args.customerAddr.saveCustomerAddr(callback);
+              args.customerAddr.saveCustomerAddr(callback, enableButtonsCallback);
             });
           }
+        } else {
+          enableButtonsCallback();
         }
       });
     }
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/editcreatecustomeraddress.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/editcreatecustomeraddress.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/editcreatecustomeraddress.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customeraddress/editcreatecustomeraddress.js
@@ -82,7 +82,32 @@
   events: {
     onSaveCustomerAddr: ''
   },
+  handlers: {
+    onDisableButton: 'disableButton'
+  },
+  disableButton: function (inSender, inEvent) {
+    this.setDisabled(inEvent.disabled);
+    if (inEvent.disabled) {
+      this.addClass(this.classButtonDisabled);
+    } else {
+      this.removeClass(this.classButtonDisabled);
+    }
+  },
   tap: function () {
+    var me = this;
+    this.disableButton(this, {
+      disabled: true
+    });
+    OB.info('Time: ' + new Date() + '. Customer Addr Save Button Pressed ( Status: ' + this.disabled + ') ');
+    if (me.blocked) {
+      OB.error('Time: ' + new Date() + '. Customer Addr Save button has been pressed 2 times and second execution is discarded ');
+      return;
+    } else {
+      me.blocked = true;
+      setTimeout(function () {
+        me.blocked = false;
+      }, 500);
+    }
     this.doSaveCustomerAddr();
   }
 });
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/components/sharedcomponents.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/components/sharedcomponents.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/components/sharedcomponents.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/components/sharedcomponents.js
@@ -24,6 +24,17 @@
   style: 'width: 100px; margin: 0px 0px 8px 5px;',
   classes: 'btnlink-gray btnlink btnlink-small',
   i18nContent: 'OBMOBC_LblCancel',
+  handlers: {
+    onDisableButton: 'disableButton'
+  },
+  disableButton: function (inSender, inEvent) {
+    this.setDisabled(inEvent.disabled);
+    if (inEvent.disabled) {
+      this.addClass(this.classButtonDisabled);
+    } else {
+      this.removeClass(this.classButtonDisabled);
+    }
+  },
   tap: function () {
     this.bubble('onCancelClose');
   }
@@ -446,6 +457,9 @@
         }
         customerEdited = args.customer;
         args.customer.saveCustomer(function () {
+          args.windowComponent.waterfall('onDisableButton', {
+            disabled: false
+          });
           if (!inEvent.silent) {
             me.bubble('onCancelClose', {
               customer: customerEdited
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/editcreatecustomerform.js b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/editcreatecustomerform.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/editcreatecustomerform.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/view/subwindows/customers/editcreatecustomerform.js
@@ -101,10 +101,35 @@
   events: {
     onSaveCustomer: ''
   },
+  handlers: {
+    onDisableButton: 'disableButton'
+  },
   tap: function () {
+    var me = this;
+    this.disableButton(this, {
+      disabled: true
+    });
+    OB.info('Time: ' + new Date() + '. Customer Save Button Pressed ( Status: ' + this.disabled + ') ');
+    if (me.blocked) {
+      OB.error('Time: ' + new Date() + '. Customer Save button has been pressed 2 times and second execution is discarded ');
+      return;
+    } else {
+      me.blocked = true;
+      setTimeout(function () {
+        me.blocked = false;
+      }, 500);
+    }
     this.doSaveCustomer({
       validations: true
     });
+  },
+  disableButton: function (inSender, inEvent) {
+    this.setDisabled(inEvent.disabled);
+    if (inEvent.disabled) {
+      this.addClass(this.classButtonDisabled);
+    } else {
+      this.removeClass(this.classButtonDisabled);
+    }
   }
 });
 
