diff --git a/web/org.openbravo.retail.posterminal/js/components/bplocation.js b/web/org.openbravo.retail.posterminal/js/components/bplocation.js
--- a/web/org.openbravo.retail.posterminal/js/components/bplocation.js
+++ b/web/org.openbravo.retail.posterminal/js/components/bplocation.js
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2012-2016 Openbravo S.L.U.
+ * Copyright (C) 2012-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.
@@ -122,31 +122,38 @@
   buttonShowing: function (bp) {
     var criteria = {},
         me = this;
+
+    function successLocations(dataBps) {
+      if (dataBps && dataBps.length > 1) {
+        me.changeStyle(true);
+      } else if (dataBps && dataBps.models && _.isArray(dataBps.models) && dataBps.models[0] && ((dataBps.models[0].get('isBillTo') && !dataBps.models[0].get('isShipTo')) || (!dataBps.models[0].get('isBillTo') && dataBps.models[0].get('isShipTo')))) {
+        me.changeStyle(true);
+      } else {
+        me.changeStyle(false);
+      }
+    }
+
     if (!bp.get('shipLocId') && !bp.get('locId')) {
       me.changeStyle(false);
     } else {
-      criteria.bpartner = bp.get('id');
-      if (OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
-        var bPartnerId = {
-          columns: ['bpartner'],
-          operator: 'equals',
-          value: bp.get('id'),
-          isId: true
-        };
-        var remoteCriteria = [bPartnerId];
-        criteria.remoteFilters = remoteCriteria;
+      if (bp.get('id') === OB.MobileApp.model.get('businesspartner')) {
+        successLocations(OB.MobileApp.model.get('businessPartner').locations);
+      } else {
+        criteria.bpartner = bp.get('id');
+        if (OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
+          var bPartnerId = {
+            columns: ['bpartner'],
+            operator: 'equals',
+            value: bp.get('id'),
+            isId: true
+          };
+          var remoteCriteria = [bPartnerId];
+          criteria.remoteFilters = remoteCriteria;
+        }
+        OB.Dal.find(OB.Model.BPLocation, criteria, successLocations, function (tx, error) {
+          OB.UTIL.showError("OBDAL error: " + error);
+        });
       }
-      OB.Dal.find(OB.Model.BPLocation, criteria, function (dataBps) {
-        if (dataBps && dataBps.length > 1) {
-          me.changeStyle(true);
-        } else if (dataBps && dataBps.models && _.isArray(dataBps.models) && dataBps.models[0] && ((dataBps.models[0].get('isBillTo') && !dataBps.models[0].get('isShipTo')) || (!dataBps.models[0].get('isBillTo') && dataBps.models[0].get('isShipTo')))) {
-          me.changeStyle(true);
-        } else {
-          me.changeStyle(false);
-        }
-      }, function (tx, error) {
-        OB.UTIL.showError("OBDAL error: " + error);
-      });
     }
   },
   tap: function () {
diff --git a/web/org.openbravo.retail.posterminal/js/components/businesspartner_selector.js b/web/org.openbravo.retail.posterminal/js/components/businesspartner_selector.js
--- a/web/org.openbravo.retail.posterminal/js/components/businesspartner_selector.js
+++ b/web/org.openbravo.retail.posterminal/js/components/businesspartner_selector.js
@@ -698,32 +698,10 @@
     if (shipping && billing) {
       this.setBPLocation(bpartner, shipping, billing);
     } else {
-      var criteria = {
-        bpartner: {
-          operator: OB.Dal.EQ,
-          value: bpartner.get('bpartnerId')
-        }
-      };
-      if (OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
-        var filterBpartnerId = {
-          columns: ['bpartner'],
-          operator: OB.Dal.EQ,
-          value: bpartner.get('bpartnerId'),
-          isId: true
-        };
-        criteria.remoteFilters = [filterBpartnerId];
-      }
-      OB.Dal.find(OB.Model.BPLocation, criteria, function (collection) {
-        if (!billing) {
-          billing = _.find(collection.models, function (loc) {
-            return loc.get('isBillTo');
-          });
-        }
-        if (!shipping) {
-          shipping = _.find(collection.models, function (loc) {
-            return loc.get('isShipTo');
-          });
-        }
+      var bp = new OB.Model.BusinessPartner({
+        id: bpartner.get('bpartnerId')
+      });
+      bp.loadBPLocations(shipping, billing, function (shipping, billing) {
         me.setBPLocation(bpartner, shipping, billing);
       });
     }
@@ -741,27 +719,7 @@
     }
     var me = this;
     OB.Dal.get(OB.Model.BusinessPartner, bpartner.get('bpartnerId'), function (bp) {
-      if (shipping) {
-        bp.set('shipLocId', shipping.get('id'));
-        bp.set('shipLocName', shipping.get('name'));
-        bp.set('shipCityName', shipping.get('cityName'));
-        bp.set('shipPostalCode', shipping.get('postalCode'));
-      } else {
-        bp.set('shipLocId', null);
-        bp.set('shipLocName', null);
-        bp.set('shipCityName', null);
-        bp.set('shipPostalCode', null);
-      }
-      if (billing) {
-        bp.set("locId", billing.get("id"));
-        bp.set("locName", billing.get("name"));
-      } else {
-        bp.set("locId", null);
-        bp.set("locName", null);
-      }
-      if (OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
-        bp.set('locationModel', shipping);
-      }
+      bp.setBPLocations(shipping, billing);
 
       if (me.target.startsWith('filterSelectorButton_')) {
         me.doChangeFilterSelector({
diff --git a/web/org.openbravo.retail.posterminal/js/model/businesspartner.js b/web/org.openbravo.retail.posterminal/js/model/businesspartner.js
--- a/web/org.openbravo.retail.posterminal/js/model/businesspartner.js
+++ b/web/org.openbravo.retail.posterminal/js/model/businesspartner.js
@@ -1,6 +1,6 @@
 /*
  ************************************************************************************
- * Copyright (C) 2012-2016 Openbravo S.L.U.
+ * Copyright (C) 2012-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.
@@ -198,6 +198,59 @@
     },
     serializeToJSON: function () {
       return JSON.parse(JSON.stringify(this.toJSON()));
+    },
+    loadBPLocations: function (shipping, billing, callback) {
+      var criteria = {
+        bpartner: {
+          operator: OB.Dal.EQ,
+          value: this.get('id')
+        }
+      };
+      if (OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
+        var filterBpartnerId = {
+          columns: ['bpartner'],
+          operator: OB.Dal.EQ,
+          value: this.get('id'),
+          isId: true
+        };
+        criteria.remoteFilters = [filterBpartnerId];
+      }
+      OB.Dal.find(OB.Model.BPLocation, criteria, function (collection) {
+        if (!billing) {
+          billing = _.find(collection.models, function (loc) {
+            return loc.get('isBillTo');
+          });
+        }
+        if (!shipping) {
+          shipping = _.find(collection.models, function (loc) {
+            return loc.get('isShipTo');
+          });
+        }
+        callback(shipping, billing, collection.models);
+      });
+    },
+    setBPLocations: function (shipping, billing) {
+      if (shipping) {
+        this.set('shipLocId', shipping.get('id'));
+        this.set('shipLocName', shipping.get('name'));
+        this.set('shipCityName', shipping.get('cityName'));
+        this.set('shipPostalCode', shipping.get('postalCode'));
+      } else {
+        this.set('shipLocId', null);
+        this.set('shipLocName', null);
+        this.set('shipCityName', null);
+        this.set('shipPostalCode', null);
+      }
+      if (billing) {
+        this.set("locId", billing.get("id"));
+        this.set("locName", billing.get("name"));
+      } else {
+        this.set("locId", null);
+        this.set("locName", null);
+      }
+      if (OB.MobileApp.model.hasPermission('OBPOS_remote.customer', true)) {
+        this.set('locationModel', shipping);
+      }
     }
   });
 
diff --git a/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js b/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js
--- a/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js
+++ b/web/org.openbravo.retail.posterminal/js/pointofsale/model/pointofsale-model.js
@@ -935,36 +935,15 @@
             successCallbackBPLoc;
 
         if (dataBps) {
-          successCallbackBPLoc = function (bpLoc) {
-            if (bpLoc.get('isBillTo')) {
-              dataBps.set('locId', bpLoc.get('id'));
-              dataBps.set('locName', bpLoc.get('name'));
-            } else {
-              dataBps.set('locId', null);
-              dataBps.set('locName', null);
-            }
-            if (bpLoc.get('isShipTo')) {
-              dataBps.set('shipLocId', bpLoc.get('id'));
-              dataBps.set('shipLocName', bpLoc.get('name'));
-              dataBps.set('shipRegionId', bpLoc.get('regionId'));
-              dataBps.set('shipCountryId', bpLoc.get('countryId'));
-            } else {
-              dataBps.set('shipLocId', null);
-              dataBps.set('shipLocName', null);
-              dataBps.set('shipRegionId', null);
-              dataBps.set('shipCountryId', null);
-            }
-            dataBps.set('cityName', bpLoc.get('cityName'));
-            dataBps.set('countryName', bpLoc.get('countryName'));
-            dataBps.set('postalCode', bpLoc.get('postalCode'));
-            dataBps.set('locationModel', bpLoc);
+          dataBps.loadBPLocations(null, null, function (shipping, billing, locations) {
+            dataBps.setBPLocations(shipping, billing);
+            dataBps.set('locations', locations);
             OB.MobileApp.model.set('businessPartner', dataBps);
             OB.Dal.save(dataBps, function () {}, function () {
               OB.error(arguments);
             });
             me.loadUnpaidOrders(callback);
-          };
-          OB.Dal.get(OB.Model.BPLocation, partnerAddressId, successCallbackBPLoc, errorCallback, errorCallback);
+          });
         }
       }
       OB.Dal.get(OB.Model.BusinessPartner, OB.MobileApp.model.get('businesspartner'), successCallbackBPs, errorCallback, errorCallback);
