diff --git a/frontend-js/src/main/js/Configuration.js b/frontend-js/src/main/js/Configuration.js
new file mode 100644
index 0000000000000000000000000000000000000000..36624baf5c6f9c1e7c6ee0df8fdcb9504f04ebfc
--- /dev/null
+++ b/frontend-js/src/main/js/Configuration.js
@@ -0,0 +1,74 @@
+"use strict";
+
+/* exported logger */
+
+var logger = require('./logger');
+
+var ConfigurationType = require('./ConfigurationType');
+
+function Configuration(json) {
+  var self = this;
+
+  self._options = [];
+
+  for (var i = 0; i < json.options.length; i++) {
+    var conf = json.options[i];
+    var type = conf.type;
+    var value = conf.value;
+    self.setOption(type, value);
+  }
+
+  var legendFiles = [];
+  if (self.getOption("LENGEND_FILE_1") !== undefined) {
+    legendFiles.push(self.getOption("LENGEND_FILE_1"));
+  }
+  if (self.getOption("LENGEND_FILE_2") !== undefined) {
+    legendFiles.push(self.getOption("LENGEND_FILE_2"));
+  }
+  if (self.getOption("LENGEND_FILE_3") !== undefined) {
+    legendFiles.push(self.getOption("LENGEND_FILE_3"));
+  }
+  if (self.getOption("LENGEND_FILE_4") !== undefined) {
+    legendFiles.push(self.getOption("LENGEND_FILE_4"));
+  }
+  self.setOption(ConfigurationType.LEGEND_FILES, legendFiles);
+
+  var overlayTypes = [];
+  for (var i = 0; i < json.overlayTypes.length; i++) {
+    overlayTypes.push(json.overlayTypes[i].name);
+  }
+  self.setOverlayTypes(overlayTypes);
+
+  self.setImageConverters(json.imageFormats);
+  self.setModelConverters(json.modelFormats);
+}
+
+Configuration.prototype.setOption = function(type, value) {
+  this._options[type] = value;
+};
+Configuration.prototype.getOption = function(type) {
+  return this._options[type];
+};
+
+Configuration.prototype.setOverlayTypes = function(overlayTypes) {
+  this._overlayTypes = overlayTypes;
+};
+Configuration.prototype.getOverlayTypes = function() {
+  return this._overlayTypes;
+};
+
+Configuration.prototype.setImageConverters = function(imageConverters) {
+  this._imageConverters = imageConverters;
+};
+Configuration.prototype.getImageConverters = function() {
+  return this._imageConverters;
+};
+
+Configuration.prototype.setModelConverters = function(modelConverters) {
+  this._modelConverters = modelConverters;
+};
+Configuration.prototype.getModelConverters = function() {
+  return this._modelConverters;
+};
+
+module.exports = Configuration;
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 029b3a579204258d9d4240629228aed163a31673..f22c773e489b5205e1bad719f66e1ba8d1da29d5 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -11,6 +11,7 @@ var request = require('request');
 var Alias = require('./map/data/Alias');
 var Chemical = require('./map/data/Chemical');
 var Comment = require('./map/data/Comment');
+var Configuration = require('./Configuration');
 var Drug = require('./map/data/Drug');
 var ConfigurationType = require('./ConfigurationType');
 var IdentifiedElement = require('./map/data/IdentifiedElement');
@@ -271,25 +272,6 @@ ServerConnector.getProjectsUrl = function(queryParams, filterParams) {
   });
 };
 
-ServerConnector.getImageConvertersUrl = function(params) {
-  return this.getApiUrl({
-    type : "configuration",
-    method : "getImageFormats",
-    params : {
-      token : params.token,
-    },
-  });
-};
-ServerConnector.getModelConvertersUrl = function(params) {
-  return this.getApiUrl({
-    type : "configuration",
-    method : "getModelFormats",
-    params : {
-      token : params.token,
-    },
-  });
-};
-
 ServerConnector.getPublicationsUrl = function(queryParams, filterParams) {
   filterParams.start = filterParams.start || 0;
   filterParams.length = filterParams.length || 10;
@@ -359,16 +341,6 @@ ServerConnector.getOverlaysUrl = function(queryParams, filterParams) {
   });
 };
 
-ServerConnector.getOverlayTypesUrl = function(params) {
-  return this.getApiUrl({
-    type : "configuration",
-    method : "overlayTypes",
-    params : {
-      token : params.token,
-    },
-  });
-};
-
 ServerConnector.getCommentsUrl = function(params) {
   var elementId = params.elementId;
   var elementType = params.elementType;
@@ -498,13 +470,10 @@ ServerConnector.getAliasesUrl = function(queryParams, filterParams) {
   });
 };
 
-ServerConnector.getConfigurationUrl = function(token) {
+ServerConnector.getConfigurationUrl = function(queryParams, filterParams) {
   var result = this.getApiUrl({
-    type : "configuration",
-    method : "getAllValues",
-    params : {
-      token : token,
-    },
+    type : "configuration/",
+    params : filterParams
   });
   return result;
 };
@@ -728,45 +697,29 @@ ServerConnector.isValidTokenUrl = function(params) {
   });
 };
 
-ServerConnector.getConfigurationParam = function(paramId) {
+ServerConnector.getConfiguration = function() {
   var self = this;
-  if (paramId === undefined) {
-    return Promise.reject(new Error("Invalid param identifier"));
-  } else if (self._configurationParam[paramId] !== undefined) {
-    return Promise.resolve(self._configurationParam[paramId]);
-  } else {
+  if (this._configuration === undefined) {
     return self.getToken().then(function(token) {
-      return self.readFile(self.getConfigurationUrl(token));
-    }).then(function(content) {
-      var configs = JSON.parse(content);
-      for (var i = 0; i < configs.length; i++) {
-        var conf = configs[i];
-        var type = conf.type;
-        var value = conf.value;
-        self._configurationParam[type] = value;
-      }
-
-      self._configurationParam[ConfigurationType.LEGEND_FILES] = [];
-      if (self._configurationParam["LENGEND_FILE_1"] !== undefined) {
-        self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_1"]);
-      }
-      if (self._configurationParam["LENGEND_FILE_2"] !== undefined) {
-        self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_2"]);
-      }
-      if (self._configurationParam["LENGEND_FILE_3"] !== undefined) {
-        self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_3"]);
-      }
-      if (self._configurationParam["LENGEND_FILE_4"] !== undefined) {
-        self._configurationParam[ConfigurationType.LEGEND_FILES].push(self._configurationParam["LENGEND_FILE_4"]);
-      }
-      if (self._configurationParam[paramId] === undefined) {
-        Promise.reject(new Error("Cannot find param config: " + paramId));
-      }
-      return self._configurationParam[paramId];
+      return self.readFile(self.getConfigurationUrl(null, {
+        token : token
+      }));
+    }).then(function(content){
+      self._configuration = new Configuration(JSON.parse(content));
+      return Promise.resolve(self._configuration);
     });
+  } else {
+    return Promise.resolve(self._configuration);
   }
 };
 
+ServerConnector.getConfigurationParam = function(paramId) {
+  var self = this;
+  return self.getConfiguration().then(function(configuration) {
+    return configuration.getOption(paramId);
+  });
+};
+
 ServerConnector.getProject = function(projectId) {
   var queryParams = {};
   var filterParams = {};
@@ -1209,27 +1162,15 @@ ServerConnector.getModelDownloadUrl = function(params) {
 };
 
 ServerConnector.getImageConverters = function(params) {
-  if (params === undefined) {
-    params = {};
-  }
   var self = this;
-  return self.getToken().then(function(token) {
-    params.token = token;
-    return self.readFile(self.getImageConvertersUrl(params));
-  }).then(function(content) {
-    return JSON.parse(content);
+  return self.getConfiguration().then(function(configuration) {
+    return configuration.getImageConverters();
   });
 };
 ServerConnector.getModelConverters = function(params) {
-  if (params === undefined) {
-    params = {};
-  }
   var self = this;
-  return self.getToken().then(function(token) {
-    params.token = token;
-    return self.readFile(self.getModelConvertersUrl(params));
-  }).then(function(content) {
-    return JSON.parse(content);
+  return self.getConfiguration().then(function(configuration) {
+    return configuration.getModelConverters();
   });
 };
 
@@ -1398,17 +1339,8 @@ ServerConnector.getSuggestedQueryList = function(projectId) {
 
 ServerConnector.getOverlayTypes = function() {
   var self = this;
-  return self.getToken().then(function(token) {
-    return self.readFile(self.getOverlayTypesUrl({
-      token : token
-    }));
-  }).then(function(content) {
-    var obj = JSON.parse(content);
-    var result = [];
-    for (var i = 0; i < obj.length; i++) {
-      result.push(obj[i].name);
-    }
-    return result;
+  return self.getConfiguration().then(function(configuration) {
+    return configuration.getOverlayTypes();
   });
 };
 
diff --git a/frontend-js/testFiles/apiCalls/configuration/getAllValues/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/getAllValues/token=MOCK_TOKEN_ID&
deleted file mode 100644
index a027ad2bf1a9ed163cee0f993694a3ff681139f0..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/apiCalls/configuration/getAllValues/token=MOCK_TOKEN_ID&
+++ /dev/null
@@ -1 +0,0 @@
-[{"type":"EMAIL_ADDRESS","value":"your.account@domain.com","idObject":9},{"type":"EMAIL_LOGIN","value":"your@login","idObject":10},{"type":"EMAIL_PASSWORD","value":"email.secret.password","idObject":11},{"type":"EMAIL_IMAP_SERVER","value":"your.imap.domain.com","idObject":13},{"type":"EMAIL_SMTP_SERVER","value":"your.smtp.domain.com","idObject":12},{"type":"EMAIL_SMTP_PORT","value":"25","idObject":14},{"type":"DEFAULT_MAP","value":"sample","idObject":6},{"type":"LOGO_IMG","value":"udl.png","idObject":4},{"type":"LOGO_LINK","value":"http://wwwen.uni.lu/","idObject":3},{"type":"SEARCH_DISTANCE","value":"10","idObject":7},{"type":"REQUEST_ACCOUNT_EMAIL","value":"your.email@domain.com","idObject":1},{"type":"SEARCH_RESULT_NUMBER","value":"100","idObject":8},{"type":"GOOGLE_ANALYTICS_IDENTIFIER","value":"google_analytics_id","idObject":2},{"type":"LOGO_TEXT","value":"University of Luxembourg","idObject":5},{"type":"X_FRAME_DOMAIN","value":"http://localhost:8080/","idObject":56},{"type":"BIG_FILE_STORAGE_DIR","value":"minerva-big/","idObject":131},{"type":"LENGEND_FILE_1","value":"resources/images/legend_a.png","idObject":138},{"type":"LENGEND_FILE_2","value":"resources/images/legend_b.png","idObject":139},{"type":"LENGEND_FILE_3","value":"resources/images/legend_c.png","idObject":140},{"type":"LENGEND_FILE_4","value":"resources/images/legend_d.png","idObject":141},{"type":"USER_MANUAL_FILE","value":"resources/other/user_guide.pdf","idObject":142},{"type":"MIN_COLOR_VAL","value":"FF0000","idObject":205},{"type":"MAX_COLOR_VAL","value":"fbff00","idObject":206}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/configuration/getImageFormats/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/getImageFormats/token=MOCK_TOKEN_ID&
deleted file mode 100644
index 72573aadef036520aba0d3c9537467a882ab9e39..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/apiCalls/configuration/getImageFormats/token=MOCK_TOKEN_ID&
+++ /dev/null
@@ -1 +0,0 @@
-[{"handler":"lcsb.mapviewer.converter.graphics.PngImageGenerator","name":"PNG image"},{"handler":"lcsb.mapviewer.converter.graphics.PdfImageGenerator","name":"PDF"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/configuration/getModelFormats/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/getModelFormats/token=MOCK_TOKEN_ID&
deleted file mode 100644
index 72ccb394d6f8afdf66768b691d2e0ba7f616e530..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/apiCalls/configuration/getModelFormats/token=MOCK_TOKEN_ID&
+++ /dev/null
@@ -1 +0,0 @@
-[{"handler":"lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser","name":"CellDesigner SBML"},{"handler":"lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter","name":"SBGN-ML"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/configuration/overlayTypes/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/overlayTypes/token=MOCK_TOKEN_ID&
deleted file mode 100644
index ad78fc8339659ed0731bb9b3896a5bdbad239f28..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/apiCalls/configuration/overlayTypes/token=MOCK_TOKEN_ID&
+++ /dev/null
@@ -1,8 +0,0 @@
-[
-  {
-    "name": "GENERIC"
-  },
-  {
-    "name": "GENETIC_VARIANT"
-  }
-]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0ce74643e1400a4a870c959c2757e4fa5b1b43e1
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+{"modelFormats":[{"handler":"lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser","name":"CellDesigner SBML"},{"handler":"lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter","name":"SBGN-ML"}],"imageFormats":[{"handler":"lcsb.mapviewer.converter.graphics.PngImageGenerator","name":"PNG image"},{"handler":"lcsb.mapviewer.converter.graphics.PdfImageGenerator","name":"PDF"}],"options":[{"idObject":9,"type":"EMAIL_ADDRESS","value":"your.account@domain.com"},{"idObject":10,"type":"EMAIL_LOGIN","value":"your@login"},{"idObject":11,"type":"EMAIL_PASSWORD","value":"email.secret.password"},{"idObject":13,"type":"EMAIL_IMAP_SERVER","value":"your.imap.domain.com"},{"idObject":12,"type":"EMAIL_SMTP_SERVER","value":"your.smtp.domain.com"},{"idObject":14,"type":"EMAIL_SMTP_PORT","value":"25"},{"idObject":6,"type":"DEFAULT_MAP","value":"sample"},{"idObject":4,"type":"LOGO_IMG","value":"udl.png"},{"idObject":3,"type":"LOGO_LINK","value":"http://wwwen.uni.lu/"},{"idObject":7,"type":"SEARCH_DISTANCE","value":"10"},{"idObject":1,"type":"REQUEST_ACCOUNT_EMAIL","value":"your.email@domain.com"},{"idObject":8,"type":"SEARCH_RESULT_NUMBER","value":"100"},{"idObject":2,"type":"GOOGLE_ANALYTICS_IDENTIFIER","value":""},{"idObject":5,"type":"LOGO_TEXT","value":"University of Luxembourg"},{"idObject":56,"type":"X_FRAME_DOMAIN","value":"http://localhost:8080/"},{"idObject":131,"type":"BIG_FILE_STORAGE_DIR","value":"minerva-big/"},{"idObject":138,"type":"LENGEND_FILE_1","value":"resources/images/legend_a.png"},{"idObject":139,"type":"LENGEND_FILE_2","value":"resources/images/legend_b.png"},{"idObject":140,"type":"LENGEND_FILE_3","value":"resources/images/legend_c.png"},{"idObject":141,"type":"LENGEND_FILE_4","value":"resources/images/legend_d.png"},{"idObject":142,"type":"USER_MANUAL_FILE","value":"resources/other/user_guide.pdf"},{"idObject":205,"type":"MIN_COLOR_VAL","value":"FF0000"},{"idObject":206,"type":"MAX_COLOR_VAL","value":"fbff00"}],"overlayTypes":[{"name":"GENERIC"},{"name":"GENETIC_VARIANT"}]}
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java
index 14654a4ee1c539b6833bc04e0209b1df425f2310..0fa37ef4440bbcb8cfd40bfd35fcd29b6c232770 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationController.java
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.api.configuration;
 
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -11,7 +12,6 @@ import org.springframework.web.bind.annotation.RequestParam;
 import org.springframework.web.bind.annotation.RestController;
 
 import lcsb.mapviewer.api.BaseController;
-import lcsb.mapviewer.api.QueryException;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.view.ConfigurationView;
 
@@ -21,26 +21,30 @@ public class ConfigurationController extends BaseController {
 	private ConfigurationRestImpl configurationController;
 
 	@RequestMapping(value = "/configuration/getAllValues", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE })
-	public List<ConfigurationView> getAllValues(@RequestParam(value = "token") String token)
-			throws SecurityException {
+	public List<ConfigurationView> getAllValues(@RequestParam(value = "token") String token) throws SecurityException {
 		return configurationController.getAllValues(token);
 	}
 
-	@RequestMapping(value = "/configuration/getImageFormats", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE })
-	public List<Map<String, Object>> getImageFormats(@RequestParam(value = "token") String token)
-			throws SecurityException {
+	@RequestMapping(value = "/configuration/getImageFormats", method = { RequestMethod.GET, RequestMethod.POST },
+			produces = { MediaType.APPLICATION_JSON_VALUE })
+	public List<Map<String, Object>> getImageFormats(@RequestParam(value = "token") String token) throws SecurityException {
 		return configurationController.getImageFormats(token);
 	}
 
-	@RequestMapping(value = "/configuration/getModelFormats", method = { RequestMethod.GET, RequestMethod.POST }, produces = { MediaType.APPLICATION_JSON_VALUE })
-	public List<Map<String, Object>> getModelFormats(@RequestParam(value = "token") String token)
-			throws SecurityException {
+	@RequestMapping(value = "/configuration/getModelFormats", method = { RequestMethod.GET, RequestMethod.POST },
+			produces = { MediaType.APPLICATION_JSON_VALUE })
+	public List<Map<String, Object>> getModelFormats(@RequestParam(value = "token") String token) throws SecurityException {
 		return configurationController.getModelFormats(token);
 	}
 
-	@RequestMapping(value = "/configuration/overlayTypes", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
-	public List<Map<String, Object>> getOverlayTypes(@RequestParam(value = "token") String token) throws SecurityException {
-		return configurationController.getOverlayTypes(token);
+	@RequestMapping(value = "/configuration/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public Map<String, Object> getOverlayTypes(@RequestParam(value = "token") String token) throws SecurityException {
+		Map<String, Object> result = new HashMap<>();
+		result.put("options", configurationController.getAllValues(token));
+		result.put("imageFormats", configurationController.getImageFormats(token));
+		result.put("modelFormats", configurationController.getModelFormats(token));
+		result.put("overlayTypes", configurationController.getOverlayTypes(token));
+		return result;
 	}
 
 	/**
@@ -52,7 +56,8 @@ public class ConfigurationController extends BaseController {
 	}
 
 	/**
-	 * @param configurationController the configurationController to set
+	 * @param configurationController
+	 *          the configurationController to set
 	 * @see #configurationController
 	 */
 	public void setConfigurationController(ConfigurationRestImpl configurationController) {