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
@@ -36,10 +36,28 @@
   style: 'width: 100%; height: 30px; margin:0;',
   handlers: {
     onLoadValue: 'loadValue',
-    onSaveChange: 'saveChange'
+    onSaveChange: 'saveChange',
+    onblur: 'blur',
+    onchange: 'change',
+    oninput: 'input',
+    onSetValue: 'valueSet',
+    onRetrieveValues: 'retrieveValue'
   },
   events: {
-    onSaveProperty: ''
+    onSaveProperty: '',
+    onRetrieveCustomer: '',
+    onSetValues: ''
+  },
+  blur: function () {},
+  input: function () {},
+  change: function () {},
+  valueSet: function (inSender, inEvent) {
+    if (inEvent.data.hasOwnProperty(this.modelProperty)) {
+      this.setValue(inEvent.data[this.modelProperty]);
+    }
+  },
+  retrieveValue: function (inSender, inEvent) {
+    inEvent[this.modelProperty] = this.getValue();
   },
   loadValue: function (inSender, inEvent) {
     if (inEvent.customerAddr !== undefined) {
@@ -100,6 +118,9 @@
       error: '',
       meObject: me
     }, function (args) {
+      if (args.cancellation) {
+        return;
+      }
       if (args.passValidation) {
         args.meObject.saveCustomerAddr(args.inSender, args.inEvent);
       } else {
@@ -160,13 +181,21 @@
         OB.UTIL.showError(OB.I18N.getLabel('OBPOS_BPartnerAddressRequired'));
         return false;
       } else {
-        var callback = function () {
-            goToViewWindow(sw, {
-              customer: OB.UTIL.clone(me.customer),
-              customerAddr: OB.UTIL.clone(me.model.get('customerAddr'))
-            });
-            };
-        this.model.get('customerAddr').saveCustomerAddr(callback);
+        OB.UTIL.HookManager.executeHooks('OBPOS_BeforeCustomerAddrSave', {
+          customerAddr: this.model.get('customerAddr'),
+          isNew: true
+        }, function (args) {
+          if (args && args.cancellation && args.cancellation === true) {
+            return true;
+          }
+          var callback = function () {
+              goToViewWindow(sw, {
+                customer: OB.UTIL.clone(me.customer),
+                customerAddr: OB.UTIL.clone(me.model.get('customerAddr'))
+              });
+              };
+          me.model.get('customerAddr').saveCustomerAddr(callback);
+        });
       }
     } else {
       this.model.get('customerAddr').loadById(this.customerAddr.get('id'), function (customerAddr) {
@@ -227,7 +256,15 @@
             label: OB.I18N.getLabel('OBPOS_LblOk'),
             isConfirmButton: true,
             action: function () {
-              customerAddr.saveCustomerAddr(callback);
+              OB.UTIL.HookManager.executeHooks('OBPOS_BeforeCustomerAddrSave', {
+                customerAddr: me.model.get('customerAddr'),
+                isNew: true
+              }, function (args) {
+                if (args && args.cancellation && args.cancellation === true) {
+                  return true;
+                }
+                args.customerAddr.saveCustomerAddr(callback);
+              });
             }
           }, {
             label: OB.I18N.getLabel('OBMOBC_LblCancel')
@@ -238,7 +275,15 @@
             }
           });
         } else {
-          customerAddr.saveCustomerAddr(callback);
+          OB.UTIL.HookManager.executeHooks('OBPOS_BeforeCustomerAddrSave', {
+            customerAddr: me.model.get('customerAddr'),
+            isNew: true
+          }, function (args) {
+            if (args && args.cancellation && args.cancellation === true) {
+              return true;
+            }
+            args.customerAddr.saveCustomerAddr(callback);
+          });
         }
       });
     }
@@ -279,11 +324,25 @@
   style: 'margin: 5px 0px 0px 5px;',
   handlers: {
     onLoadValue: 'loadValue',
-    onSaveChange: 'saveChange'
+    onSaveChange: 'saveChange',
+    onSetValue: 'valueSet',
+    onRetrieveValues: 'retrieveValue'
   },
   events: {
     onSaveProperty: ''
   },
+  valueSet: function (inSender, inEvent) {
+    if (inEvent.data.hasOwnProperty(this.modelProperty)) {
+      if (inEvent.data[this.modelProperty]) {
+        this.check();
+      } else {
+        this.unCheck();
+      }
+    }
+  },
+  retrieveValue: function (inSender, inEvent) {
+    inEvent[this.modelProperty] = this.checked;
+  },
   loadValue: function (inSender, inEvent) {
     var me = this;
     if (inEvent.customerAddr !== undefined) {
@@ -318,7 +377,9 @@
   name: 'OB.UI.CustomerAddrComboProperty',
   handlers: {
     onLoadValue: 'loadValue',
-    onSaveChange: 'saveChange'
+    onSaveChange: 'saveChange',
+    onSetValue: 'valueSet',
+    onRetrieveValues: 'retrieveValue'
   },
   events: {
     onSaveProperty: ''
@@ -338,6 +399,19 @@
     }),
     renderEmpty: 'enyo.Control'
   }],
+  valueSet: function (inSender, inEvent) {
+    if (inEvent.data.hasOwnProperty(this.modelProperty)) {
+      for (var i = 0; i < this.$.customerAddrCombo.getCollection().length; i++) {
+        if (this.$.customerAddrCombo.getCollection().models[i].get('id') === inEvent.data[this.modelProperty]) {
+          this.$.customerAddrCombo.setSelected(i);
+          break;
+        }
+      }
+    }
+  },
+  retrieveValue: function (inSender, inEvent) {
+    inEvent[this.modelProperty] = this.$.customerAddrCombo.getValue();
+  },
   loadValue: function (inSender, inEvent) {
     this.$.customerAddrCombo.setCollection(this.collection);
     this.fetchDataFunction(inEvent);
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
@@ -18,7 +18,17 @@
     onShowPopup: ''
   },
   handlers: {
-    onCancelClose: 'cancelClose'
+    onCancelClose: 'cancelClose',
+    onSetValues: 'setValues',
+    onRetrieveCustomer: 'retrieveCustomers'
+  },
+  setValues: function (inSender, inEvent) {
+    this.waterfall('onSetValue', inEvent);
+  },
+  retrieveCustomers: function (inSender, inEvent) {
+    var retrievedValues = inEvent || {};
+    this.waterfall('onRetrieveValues', retrievedValues);
+    return retrievedValues;
   },
   beforeSetShowing: function (params) {
     if (OB.MobileApp.model.get('terminal').defaultbp_paymentmethod !== null && OB.MobileApp.model.get('terminal').defaultbp_bpcategory !== null && OB.MobileApp.model.get('terminal').defaultbp_paymentterm !== null && OB.MobileApp.model.get('terminal').defaultbp_invoiceterm !== null && OB.MobileApp.model.get('terminal').defaultbp_bpcountry !== null && OB.MobileApp.model.get('terminal').defaultbp_bporg !== null) {
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
@@ -55,11 +55,29 @@
   style: 'width: 100%; height: 30px; margin:0;',
   handlers: {
     onLoadValue: 'loadValue',
-    onSaveChange: 'saveChange'
+    onSaveChange: 'saveChange',
+    onblur: 'blur',
+    onchange: 'change',
+    oninput: 'input',
+    onSetValue: 'valueSet',
+    onRetrieveValues: 'retrieveValue'
   },
   events: {
-    onSaveProperty: ''
+    onSaveProperty: '',
+    onRetrieveCustomer: '',
+    onSetValues: ''
   },
+  valueSet: function (inSender, inEvent) {
+    if (inEvent.data.hasOwnProperty(this.modelProperty)) {
+      this.setValue(inEvent.data[this.modelProperty]);
+    }
+  },
+  retrieveValue: function (inSender, inEvent) {
+    inEvent[this.modelProperty] = this.getValue();
+  },
+  blur: function () {},
+  input: function () {},
+  change: function () {},
   loadValue: function (inSender, inEvent) {
     if (inEvent.customer !== undefined) {
       if (inEvent.customer.get(this.modelProperty) !== undefined) {
@@ -113,7 +131,9 @@
   name: 'OB.UI.SwitchShippingInvoicingAddr',
   handlers: {
     onLoadValue: 'loadValue',
-    onSaveChange: 'saveChange'
+    onSaveChange: 'saveChange',
+    onSetValue: 'valueSet',
+    onRetrieveValues: 'retrieveValue'
   },
   events: {
     onHideShowFields: ''
@@ -149,6 +169,21 @@
     this.$.shipLbl.setContent(OB.I18N.getLabel('OBPOS_LblShipAddr'));
     this.$.invLbl.setContent(OB.I18N.getLabel('OBPOS_LblBillAddr'));
   },
+  valueSet: function (inSender, inEvent) {
+    if (inEvent.data.hasOwnProperty('btnUseSameCheck')) {
+      this.doHideShowFields({
+        checked: inEvent.data.btnUseSameCheck
+      });
+      if (inEvent.data.btnUseSameCheck) {
+        this.$.btnUseSameCheck.check();
+      } else {
+        this.$.btnUseSameCheck.unCheck();
+      }
+    }
+  },
+  retrieveValue: function (inSender, inEvent) {
+    inEvent.btnUseSameCheck = this.$.btnUseSameCheck.checked;
+  },
   rendered: function () {
     this.inherited(arguments);
     this.owner.applyStyle('width', '100%');
@@ -184,7 +219,9 @@
   handlers: {
     onLoadValue: 'loadValue',
     onSaveChange: 'saveChange',
-    onHideShow: 'hideShow'
+    onHideShow: 'hideShow',
+    onSetValue: 'valueSet',
+    onRetrieveValues: 'retrieveValue'
   },
   events: {
     onSaveProperty: ''
@@ -204,6 +241,19 @@
     }),
     renderEmpty: 'enyo.Control'
   }],
+  valueSet: function (inSender, inEvent) {
+    if (inEvent.data.hasOwnProperty(this.modelProperty)) {
+      for (var i = 0; i < this.$.customerCombo.getCollection().length; i++) {
+        if (this.$.customerCombo.getCollection().models[i].get('id') === inEvent.data[this.modelProperty]) {
+          this.$.customerCombo.setSelected(i);
+          break;
+        }
+      }
+    }
+  },
+  retrieveValue: function (inSender, inEvent) {
+    inEvent[this.modelProperty] = this.$.customerCombo.getValue();
+  },
   loadValue: function (inSender, inEvent) {
     this.$.customerCombo.setCollection(this.collection);
     this.fetchDataFunction(inEvent);
@@ -309,6 +359,9 @@
       meObject: me,
       validations: inEvent.validations
     }, function (args) {
+      if (args.cancellation) {
+        return;
+      }
       if (args.passValidation) {
         args.meObject.saveCustomer(args.inSender, args.inEvent);
       } else {
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
@@ -16,7 +16,17 @@
     onShowPopup: ''
   },
   handlers: {
-    onCancelClose: 'cancelClose'
+    onCancelClose: 'cancelClose',
+    onSetValues: 'setValues',
+    onRetrieveCustomer: 'retrieveCustomers'
+  },
+  setValues: function (inSender, inEvent) {
+    this.waterfall('onSetValue', inEvent);
+  },
+  retrieveCustomers: function (inSender, inEvent) {
+    var retrievedValues = inEvent || {};
+    this.waterfall('onRetrieveValues', retrievedValues);
+    return retrievedValues;
   },
   beforeSetShowing: function (params) {
     if (OB.MobileApp.model.get('terminal').defaultbp_paymentmethod !== null && OB.MobileApp.model.get('terminal').defaultbp_bpcategory !== null && OB.MobileApp.model.get('terminal').defaultbp_paymentterm !== null && OB.MobileApp.model.get('terminal').defaultbp_invoiceterm !== null && OB.MobileApp.model.get('terminal').defaultbp_bpcountry !== null && OB.MobileApp.model.get('terminal').defaultbp_bporg !== null) {
@@ -250,7 +260,17 @@
     i18nLabel: 'OBPOS_LblBirthday',
     handlers: {
       onLoadValue: 'loadValue',
-      onSaveChange: 'saveChange'
+      onSaveChange: 'saveChange',
+      onSetValue: 'valueSet',
+      onRetrieveValues: 'retrieveValue'
+    },
+    valueSet: function (inSender, inEvent) {
+      if (inEvent.data.hasOwnProperty(this.modelProperty)) {
+        this.setValue(inEvent.data[this.modelProperty]);
+      }
+    },
+    retrieveValue: function (inSender, inEvent) {
+      inEvent[this.modelProperty] = this.getValue();
     },
     displayLogic: function () {
       return OB.MobileApp.model.hasPermission('OBPOS_ShowBusinessPartnerBirthInfo', true);
