diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 9382812aaf709a4ed128baafda4954ff7bf8c2b8..a3c0e5101752629fcbda78afff653907632e9a6b 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -47,6 +47,10 @@ ServerConnector.init = function() {
   self._configurationParam = [];
   self._projects = [];
   self._projectsById = [];
+
+  self._users = [];
+  self._usersByLogin = [];
+
   self._customMap = null;
   self._sessionData = undefined;
   self._configuration = undefined;
@@ -535,10 +539,16 @@ ServerConnector.getProjectSourceUrl = function(queryParams, filterParams) {
   });
 };
 
-ServerConnector.getUserUrl = function(queryParams, filterParams) {
+ServerConnector.getUsersUrl = function(queryParams, filterParams) {
   return this.getApiUrl({
     type : "users/",
-    method : queryParams.login,
+    params : filterParams
+  });
+};
+
+ServerConnector.getUserUrl = function(queryParams, filterParams) {
+  return this.getApiUrl({
+    url : this.getUsersUrl() + queryParams.login,
     params : filterParams,
   });
 };
@@ -729,10 +739,42 @@ ServerConnector.getUser = function(login) {
 
   return self.sendGetRequest(self.getUserUrl(queryParams, filterParams)).then(function(content) {
     var obj = JSON.parse(content);
-    return new User(obj);
+    var user = new User(obj);
+    if (self._usersByLogin[user.getLogin()] !== undefined) {
+      self._usersByLogin[user.getLogin()].update(user);
+    } else {
+      self._usersByLogin[user.getLogin()] = user;
+    }
+    return self._usersByLogin[user.getLogin()];
   });
 };
 
+ServerConnector.getUsers = function(forceRefresh) {
+  var self = this;
+  var queryParams = {};
+  var filterParams = {};
+
+  if (self._users.length > 0 && !forceRefresh) {
+    return Promise.resolve(self._users);
+  } else {
+    return self.sendGetRequest(self.getUsersUrl()).then(function(content) {
+      var parsedData = JSON.parse(content);
+      self._users.length = 0;
+      for (var i = 0; i < parsedData.length; i++) {
+        var user = new User(parsedData[i]);
+        if (self._usersByLogin[user.getLogin()] !== undefined) {
+          self._usersByLogin[user.getLogin()].update(user);
+        } else {
+          self._usersByLogin[user.getLogin()] = user;
+        }
+        self._users.push(self._usersByLogin[user.getLogin()]);
+      }
+      return self._users;
+    });
+  }
+
+};
+
 ServerConnector.getOverlays = function(params) {
   var self = this;
   if (params === undefined) {
diff --git a/frontend-js/src/main/js/map/data/User.js b/frontend-js/src/main/js/map/data/User.js
index cd41f7d7f9760ec82f889fe2618259a19fc1c792..4aa7c3bce7c5063eb5dbf4d2ed37f8a9871970e3 100644
--- a/frontend-js/src/main/js/map/data/User.js
+++ b/frontend-js/src/main/js/map/data/User.js
@@ -25,7 +25,7 @@ User.prototype.getLogin = function() {
 };
 
 User.prototype.setName = function(name) {
-  this._name = name ;
+  this._name = name;
 };
 
 User.prototype.getName = function() {
@@ -88,4 +88,16 @@ User.prototype.getPrivileges = function() {
   return this._privileges;
 };
 
+User.prototype.update = function(user) {
+  this.setLogin(user.getLogin());
+  this.setName(user.getName());
+  this.setSurname(user.getSurname());
+  this.setEmail(user.getEmail());
+  this.setRemoved(user.getRemoved());
+  this.setPrivileges(user.getPrivileges());
+  this.setMinColor(user.getMinColor());
+  this.setMaxColor(user.getMaxColor());
+  this.setSimpleColor(user.getSimpleColor());
+};
+
 module.exports = User;
diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js
index fcb9702766a7c33104d0d832b0da6b13c0d39dab..69ddaba24b8135820913b08c969c249501054cd0 100644
--- a/frontend-js/src/test/js/ServerConnector-test.js
+++ b/frontend-js/src/test/js/ServerConnector-test.js
@@ -8,7 +8,7 @@ var HttpStatus = require('http-status-codes');
 
 var Alias = require('../../main/js/map/data/Alias');
 var Configuration = require('../../main/js/Configuration');
-var LayoutData= require('../../main/js/map/data/LayoutData');
+var LayoutData = require('../../main/js/map/data/LayoutData');
 var LayoutAlias = require('../../main/js/map/data/LayoutAlias');
 var MapModel = require('../../main/js/map/data/MapModel');
 var NetworkError = require('../../main/js/NetworkError');
@@ -299,4 +299,26 @@ describe('ServerConnector', function() {
     });
   });
 
+  describe('getUsers', function() {
+    it('default', function() {
+      return ServerConnector.getUsers().then(function(users) {
+        assert.ok(users.length > 0);
+      });
+    });
+    it('refresh', function() {
+      var user;
+      var users;
+      var modifiedName = "xxx name";
+      return ServerConnector.getUsers().then(function(result) {
+        users = result;
+        user = users[0];
+        user.setName(modifiedName);
+        return ServerConnector.getUsers(true);
+      }).then(function(result) {
+        assert.ok(users === result);
+        assert.ok(user.getName() !== modifiedName);
+      });
+    });
+  });
+
 });