diff --git a/web/org.openbravo.mobile.core/source/component/dialog/ob-profile.js b/web/org.openbravo.mobile.core/source/component/dialog/ob-profile.js
--- a/web/org.openbravo.mobile.core/source/component/dialog/ob-profile.js
+++ b/web/org.openbravo.mobile.core/source/component/dialog/ob-profile.js
@@ -316,6 +316,12 @@
           OB.DS.allowRequests(true);
           OB.UTIL.showError(inResponse);
           this.isActive = true;
+          
+          // in case of multi-server and an error then logout as maybe different
+          // servers have different roles
+          if (OB.RR.RequestRouter.isMultiServer()) {
+        	  OB.MobileApp.model.logout();
+          }
         }
       });
       rr = new OB.RR.Request({
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
@@ -186,10 +186,11 @@
     }
   };
 
-  // Send the request to all servers supporting it, ignore failures
+  // Send the request to all servers supporting it
   OB.RR.ServTypeBroadcast = {
     name: 'Broadcast',
     callServer: function (server, ajaxRequest) {
+      var tempFail, tempSuccess;
       if (!ajaxRequest.origUrl) {
         ajaxRequest.origUrl = ajaxRequest.url;
       }
@@ -197,24 +198,53 @@
         ajaxRequest.url = ajaxRequest.origUrl.replace('../../', server.get('address'));
       }
 
+      /*
+       * NOTE: with broadcast and fail/success handling several approaches are possible,
+       * each with its own (dis)advantages:
+       * 1) fail if one of the broadcasts fail, success if all succeed
+       * 2) fail if all fail, success if one succeeds
+       * 3) fail/success on first server in the list
+       * 4) fail/success on any online server
+       * 
+       * These 4 possibilities all have the result that always either fail or success is called.
+       * Other variants are possible but then not always either success or fail are called. For 
+       * example: fail if all fail, success if all succeed, or other variant: fail if any fail, success
+       * if any succeed. These last two examples are not valid or ambiguous.
+       */
+
+      tempFail = ajaxRequest.fail
+      tempSuccess = ajaxRequest.success
+      // if server is not online then reset fail/success so that it does not pollute
+      // the results
+      if (!server.get('online')) {
+        ajaxRequest.fail = function (inSender, inResponse) {};
+        ajaxRequest.success = function (inSender, inResponse) {};
+      }
+
       OB.RR.RequestRouter.execAjax(ajaxRequest);
 
-      // do nothing on fail/success for next requests
-      ajaxRequest.fail = function (inSender, inResponse) {};
-      ajaxRequest.success = function (inSender, inResponse) {};
+      // if server was online then reset fail/success so that only called once
+      if (server.get('online')) {
+        ajaxRequest.fail = function (inSender, inResponse) {};
+        ajaxRequest.success = function (inSender, inResponse) {};
+      } else {
+        // was not online, use fail/success on the next server
+        ajaxRequest.fail = tempFail
+        ajaxRequest.success = tempSuccess
+      }
     },
 
     implementation: function (service, ajaxRequest) {
       var me = this;
       var servers = _.filter(OB.RR.RequestRouter.servers.models, function (server) {
-        return server.get('allServices') || _.filter(server.get('services'), function (srvc) {
+        return (server.get('allServices') || _.filter(server.get('services'), function (srvc) {
           return srvc === service.get('name');
-        }).length > 0;
+        }).length > 0);
       });
+
       _.each(servers, function (server) {
         me.callServer(server, ajaxRequest);
       });
-
     }
   };
 
