diff --git a/commons/src/main/java/lcsb/mapviewer/common/TextFileUtils.java b/commons/src/main/java/lcsb/mapviewer/common/TextFileUtils.java
index 59599880602fb9d38b6741ae242966066ecd787f..56823222d6625ab0ba7ef8c27bbb8a472fad3a05 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/TextFileUtils.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/TextFileUtils.java
@@ -15,7 +15,10 @@ import java.util.Map;
  */
 public final class TextFileUtils {
 
-	public static String COLUMN_COUNT_PARAM = "__COLUMN_COUNT";
+	/**
+	 * Name of the param that contains number of columns.
+	 */
+	public static final String COLUMN_COUNT_PARAM = "__COLUMN_COUNT";
 
 	/**
 	 * Default constructor that prevents instatiation.
diff --git a/frontend-js/package.json b/frontend-js/package.json
index 6f5aec9080ff4d2fb572ce57121c7cfef6f0c418..fdaa210ba8bad3b808b9f23c471706a27aa17f46 100644
--- a/frontend-js/package.json
+++ b/frontend-js/package.json
@@ -4,9 +4,13 @@
   "description": "frontentd for minerva google maps interface",
   "main": "minerva.js",
   "scripts": {
-    "build": "rm -rf dist & rmdir /q /s dist & mkdir dist & browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js ",
+    "build:css": "cleancss -o dist/minerva.css node_modules/dual-listbox/dist/*.css src/main/css/*.css",
+    "build:js": "browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js ",
     "//": "rm -rf dist & rmdir /q /s dist & mkdir dist & browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js & uglifyjs --compress --mangle --in-source-map dist/minerva.js.map --source-map-include-sources --source-map dist/minerva.min.js.map -o dist/minerva.min.js dist/minerva.js",
-    "build-deploy": "rm -rf dist & rmdir /q /s dist & mkdir dist & browserify --debug --standalone minerva src/main/js/minerva.js | exorcist dist/minerva.js.map > dist/minerva.js & copy /Y \"dist\\*\" \"C:/Program Files/apache-tomcat-7.0.72/webapps/minerva/resources/js\" ",
+    "build-deploy": "npm run build && npm run deploy",
+    "build": "npm run clean && npm run build:css && npm run build:js",
+    "clean": "rm -rf dist & rmdir /q /s dist & mkdir dist",
+    "deploy": "copy /Y \"dist\\*.js*\" \"C:/Program Files/apache-tomcat-7.0.72/webapps/minerva/resources/js\" &&  copy /Y \"dist\\*.css\" \"C:/Program Files/apache-tomcat-7.0.72/webapps/minerva/resources/css\" ",
     "lint": "jshint src/.",
     "test": "istanbul cover node_modules/mocha/bin/_mocha -- --recursive src/test/js"
   },
@@ -17,13 +21,14 @@
     "bootstrap": "^3.3.7",
     "browserify": "^13.1.1",
     "chai": "^3.5.0",
+    "clean-css-cli": "^4.1.6",
     "datatables.net": "^1.10.13",
     "exorcist": "^0.4.0",
     "file-url": "^2.0.0",
     "istanbul": "0.4.5",
     "jquery": "3.1.1",
     "jquery-ui-dist": "^1.12.1",
-    "jsdom": "^9.9.1",
+    "jsdom": "^11.1.0",
     "jsdom-global": "^2.1.1",
     "jshint": "^2.9.4",
     "log4js-memory-appender": "1.0.5",
@@ -31,6 +36,7 @@
     "uglifyjs": "^2.4.10"
   },
   "dependencies": {
+    "dual-listbox": "^1.0.3",
     "http-status-codes": "^1.1.6",
     "js-cookie": "^2.1.3",
     "log4js": "0.6.38",
diff --git a/web/src/main/webapp/resources/css/global.css b/frontend-js/src/main/css/global.css
similarity index 82%
rename from web/src/main/webapp/resources/css/global.css
rename to frontend-js/src/main/css/global.css
index bf9f50b07e8c6803597a6cf5e9dfe9ab47a2f6d8..da6f6288d13d1ecb9948cdb7a16e460282b43f28 100644
--- a/web/src/main/webapp/resources/css/global.css
+++ b/frontend-js/src/main/css/global.css
@@ -34,6 +34,23 @@ table.mapInfoBoxResultsTable, table.mapInfoBoxResultsTable th, table.mapInfoBoxR
 	transition: background-color 0.4s ease-in-out 0s;
 }
 
+.minerva-checkbox-grid li {
+	display: block;
+	float: left;
+	width: 20%;
+}
+
+.minerva-checkbox-grid li .checkbox {
+	margin-top: 2px;
+	margin-bottom: 2px;
+}
+
+.minerva-checkbox-grid:after {
+	content: '';
+	display: block;
+	clear: both;
+}
+
 .mapChartNameDiv {
 	width: 150px;
 	float: left;
@@ -325,4 +342,39 @@ table.mapInfoBoxResultsTable, table.mapInfoBoxResultsTable th, table.mapInfoBoxR
 	-webkit-border-radius: 6px 0 6px 6px;
 	-moz-border-radius: 6px 0 6px 6px;
 	border-radius: 6px 0 6px 6px;
+}
+
+.dual-listbox .dual-listbox__search {
+	display: none;
+}
+
+.dual-listbox .dual-listbox__title {
+	padding: 5px 2px;
+}
+
+.dual-listbox .dual-listbox__item {
+	padding: 2px;
+}
+
+.dual-listbox .dual-listbox__button {
+	background-color: #999;
+}
+
+.minerva-multi-select-special {
+	background-color: #00FF00;
+}
+
+.dual-listbox__item--selected .minerva-multi-select-special {
+	background-color: rgba(8, 157, 227, .7);
+}
+
+.dual-listbox .dual-listbox__available, .dual-listbox .dual-listbox__selected
+	{
+	width: 200px;
+	height: 200px;
+}
+
+.minerva-export-dual-listbox-container {
+	padding: 10px;
+	float: left;
 }
\ No newline at end of file
diff --git a/frontend-js/src/main/js/Configuration.js b/frontend-js/src/main/js/Configuration.js
index 7932fc1ad7870d0bb0f106f34bce21fb0af29877..9fbbb38b0aa1a24799fe39331090574e76dfbfb2 100644
--- a/frontend-js/src/main/js/Configuration.js
+++ b/frontend-js/src/main/js/Configuration.js
@@ -5,6 +5,7 @@
 var logger = require('./logger');
 
 var ConfigurationType = require('./ConfigurationType');
+var MiriamType = require('./map/data/MiriamType');
 
 function Configuration(json) {
   var self = this;
@@ -44,6 +45,7 @@ function Configuration(json) {
   self.setModelConverters(json.modelFormats);
   self.setElementTypes(json.elementTypes);
   self.setReactionTypes(json.reactionTypes);
+  self.setMiriamTypes(json.miriamTypes);
 }
 
 Configuration.prototype.setOption = function(type, value) {
@@ -88,4 +90,24 @@ Configuration.prototype.getReactionTypes = function() {
   return this._reactionTypes;
 };
 
+Configuration.prototype.setMiriamTypes = function(miriamTypes) {
+  this._miriamTypes = [];
+  for ( var key in miriamTypes) {
+    if (miriamTypes.hasOwnProperty(key)) {
+      var typeData = miriamTypes[key];
+      this._miriamTypes.push(new MiriamType(typeData, key));
+    }
+  }
+};
+Configuration.prototype.getMiriamTypeByName = function(name) {
+  var self = this;
+  for (var i = 0; i < self._miriamTypes.length; i++) {
+    var miriamType = self._miriamTypes[i];
+    if (miriamType.getName() === name) {
+      return miriamType;
+    }
+  }
+  return null;
+};
+
 module.exports = Configuration;
diff --git a/frontend-js/src/main/js/Export.js b/frontend-js/src/main/js/Export.js
new file mode 100644
index 0000000000000000000000000000000000000000..265a6fc52fb79509e759ad0b14fe0f71ba02bde2
--- /dev/null
+++ b/frontend-js/src/main/js/Export.js
@@ -0,0 +1,156 @@
+"use strict";
+
+var Promise = require("bluebird");
+
+var CustomMapOptions = require('./map/CustomMapOptions');
+var ElementExportPanel = require('./gui/export/ElementExportPanel');
+var GraphicsExportPanel = require('./gui/export/GraphicsExportPanel');
+var NetworkExportPanel = require('./gui/export/NetworkExportPanel');
+var Header = require('./gui/Header');
+var ObjectWithListeners = require('./ObjectWithListeners');
+
+var logger = require('./logger');
+var Functions = require('./Functions');
+
+/**
+ * Default constructor.
+ * 
+ * @param options
+ *          CustomMapOptions object representing all parameters needed for map
+ *          creation
+ */
+function Export(options) {
+  var self = this;
+  self._panels = [];
+  if (!(options instanceof CustomMapOptions)) {
+    options = new CustomMapOptions(options);
+  }
+  self.setProject(options.getProject());
+  self.setElement(options.getElement());
+
+  self._createGui();
+}
+
+Export.prototype = Object.create(ObjectWithListeners.prototype);
+Export.prototype.constructor = ObjectWithListeners;
+
+Export.prototype._createGui = function() {
+  var self = this;
+  self.getElement().innerHTML = "";
+  var headerDiv = Functions.createElement({
+    type : "div"
+  });
+  new Header({
+    element : headerDiv,
+    customMap : null,
+    project : self.getProject(),
+  });
+  self.getElement().appendChild(headerDiv);
+
+  var panels = [ {
+    name : "ELEMENTS",
+    panelClass : ElementExportPanel,
+  }, {
+    name : "NETWORK",
+    panelClass : NetworkExportPanel,
+  }, {
+    name : "GRAPHICS",
+    panelClass : GraphicsExportPanel,
+  } ];
+
+  var tabDiv = Functions.createElement({
+    type : "div",
+    name : "tabView",
+    className : "tabbable boxed parentTabs"
+  });
+  self.getElement().appendChild(tabDiv);
+
+  var tabMenuDiv = Functions.createElement({
+    type : "ul",
+    className : "nav nav-tabs"
+  });
+  tabDiv.appendChild(tabMenuDiv);
+
+  var tabContentDiv = Functions.createElement({
+    type : "div",
+    className : "tab-content"
+  });
+  tabDiv.appendChild(tabContentDiv);
+
+  for (var i = 0; i < panels.length; i++) {
+    self.addTab(panels[i], tabMenuDiv, tabContentDiv);
+  }
+
+}
+
+Export.prototype.addTab = function(params, navElement, contentElement) {
+  var self = this;
+
+  var name = params.name;
+
+  var tabId = "left_panel_ab_" + this._tabIdCount;
+  self._tabIdCount++;
+
+  var navClass = '';
+  var contentClass = 'tab-pane';
+  if (navElement.children.length === 0) {
+    navClass = "active";
+    contentClass = "tab-pane active";
+  }
+
+  var navLi = document.createElement("li");
+  navLi.className = navClass;
+
+  var navLink = document.createElement("a");
+  navLink.href = "#" + tabId;
+  if (name !== undefined) {
+    if (name.length > 12) {
+      name = name.substring(0, 10) + "...";
+    }
+    navLink.innerHTML = name;
+  }
+  navLink.onclick = function() {
+    $(this).tab('show');
+  };
+  navLi.appendChild(navLink);
+  if (name !== undefined) {
+    navLink.innerHTML = name;
+  }
+  navElement.appendChild(navLi);
+
+  var contentDiv = document.createElement("div");
+  contentDiv.style.height = "100%";
+  contentDiv.className = contentClass;
+  contentDiv.id = tabId;
+
+  contentElement.appendChild(contentDiv);
+
+  this._panels.push(new params.panelClass({
+    element : contentDiv,
+    project : self.getProject(),
+  }));
+};
+
+Export.prototype.setProject = function(project) {
+  this._project = project;
+};
+Export.prototype.getProject = function() {
+  return this._project;
+};
+
+Export.prototype.setElement = function(element) {
+  this._element = element;
+};
+Export.prototype.getElement = function() {
+  return this._element;
+};
+
+Export.prototype.init = function() {
+  var promises = [];
+  for (var i = 0; i < this._panels.length; i++) {
+    promises.push(this._panels[i].init());
+  }
+  return Promise.all(promises);
+};
+
+module.exports = Export;
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index b7f9cb0028505d75a4423dcbc750d8de93701afc..a12a922ce8834f4d06e74adb9de0a6f3340cdfd9 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -24,6 +24,7 @@ var LayoutReaction = require('./map/data/LayoutReaction');
 var MiRna = require('./map/data/MiRna');
 var NetworkError = require('./NetworkError');
 var Project = require('./map/data/Project');
+var ProjectStatistics = require('./map/data/ProjectStatistics');
 var Reaction = require('./map/data/Reaction');
 var ReferenceGenome = require('./map/data/ReferenceGenome');
 var SecurityError = require('./SecurityError');
@@ -323,6 +324,13 @@ ServerConnector.getProjectsUrl = function(queryParams, filterParams) {
   });
 };
 
+ServerConnector.getProjectStatisticsUrl = function(queryParams, filterParams) {
+  return this.getApiUrl({
+    url : this.getProjectsUrl(queryParams) + "statistics/",
+    params : filterParams,
+  });
+};
+
 ServerConnector.getPublicationsUrl = function(queryParams, filterParams) {
   filterParams.start = filterParams.start || 0;
   filterParams.length = filterParams.length || 10;
@@ -628,6 +636,22 @@ ServerConnector.getProject = function(projectId) {
   });
 };
 
+ServerConnector.getProjectStatistics = function(projectId) {
+  var queryParams = {};
+  var filterParams = {};
+  var self = this;
+  var content;
+  return self.getProjectId(projectId).then(function(result) {
+    queryParams.projectId = result;
+    return self.readFile(self.getProjectStatisticsUrl(queryParams, filterParams));
+  }).then(function(result) {
+    content = JSON.parse(result);
+    return self.getConfiguration();
+  }).then(function(configuration) {
+    return new ProjectStatistics(content, configuration);
+  });
+};
+
 ServerConnector.getLoggedUser = function() {
   var self = this;
   if (self._loggedUser !== undefined) {
@@ -788,14 +812,20 @@ ServerConnector.getReactions = function(params) {
   });
 };
 
-ServerConnector.getAliases = function(aliasIds, projectId, columns) {
+ServerConnector.getAliases = function(params) {
   var self = this;
-  var queryParams = {};
+  var queryParams = {
+    modelId : params.modelId,
+  };
+  if (params.ids === undefined) {
+    params.ids = []
+  }
   var filterParams = {
-    id : aliasIds,
-    columns : columns
+    id : params.ids,
+    columns : params.columns,
+    type : params.type,
   };
-  return self.getProjectId(projectId).then(function(result) {
+  return self.getProjectId(params.projectId).then(function(result) {
     queryParams.projectId = result;
     if (filterParams.id.length > 100) {
       return self.sendPostRequest(self.getAliasesUrl(queryParams), filterParams);
@@ -840,10 +870,6 @@ ServerConnector.getComments = function(params) {
   });
 };
 
-ServerConnector.getLightAliases = function(aliasIds, projectId) {
-  return this.getAliases(aliasIds, projectId, "id,bounds,modelId");
-};
-
 ServerConnector.getSessionData = function(project) {
   if (this._sessionData === undefined) {
     this._sessionData = new SessionData(project);
diff --git a/frontend-js/src/main/js/gui/AbstractGuiElement.js b/frontend-js/src/main/js/gui/AbstractGuiElement.js
index ee43bfa234ab841567c8941fcc89259d4a307c3e..4612ed9afe9d04a865f8e44403c10362f70910bd 100644
--- a/frontend-js/src/main/js/gui/AbstractGuiElement.js
+++ b/frontend-js/src/main/js/gui/AbstractGuiElement.js
@@ -13,6 +13,7 @@ function AbstractGuiElement(params) {
   var self = this;
 
   self.setElement(params.element);
+  self.setProject(params.project);
   self.setConfiguration(params.configuration);
   self.setMap(params.customMap);
 
@@ -24,7 +25,7 @@ AbstractGuiElement.prototype = Object.create(ObjectWithListeners.prototype);
 AbstractGuiElement.prototype.constructor = AbstractGuiElement;
 
 AbstractGuiElement.prototype.setMap = function(map) {
-  if (map === undefined || map === null) {
+  if (map === undefined) {
     throw new Error("map must be defined");
   }
   this._map = map;
@@ -53,6 +54,18 @@ AbstractGuiElement.prototype.getConfiguration = function() {
   return this._configuration;
 };
 
+AbstractGuiElement.prototype.setProject = function(project) {
+  this._project = project;
+};
+
+AbstractGuiElement.prototype.getProject = function() {
+  if (this._project === undefined || this._project === null) {
+    return this.getMap().getProject();
+  } else {
+    return this._project;
+  }
+};
+
 AbstractGuiElement.prototype.setControlElement = function(type, element) {
   if (type === null || type === undefined) {
     throw new Error("Unknown controle element type");
diff --git a/frontend-js/src/main/js/gui/Header.js b/frontend-js/src/main/js/gui/Header.js
index cf0cb27fe4d56f7962c376782d545e9a6aa391c0..cd078fcc8ca83c5fb475384fa73eab36b6af87b5 100644
--- a/frontend-js/src/main/js/gui/Header.js
+++ b/frontend-js/src/main/js/gui/Header.js
@@ -24,8 +24,8 @@ Header.prototype._createHeaderGui = function() {
   var self = this;
   self.getElement().className = "minerva-header";
 
-  var projectId = self.getMap().getProject().getProjectId();
-  var projectName = self.getMap().getProject().getName();
+  var projectId = self.getProject().getProjectId();
+  var projectName = self.getProject().getName();
 
   var loadingDiv = Functions.createElement({
     type : "div",
diff --git a/frontend-js/src/main/js/gui/leftPanel/Panel.js b/frontend-js/src/main/js/gui/Panel.js
similarity index 92%
rename from frontend-js/src/main/js/gui/leftPanel/Panel.js
rename to frontend-js/src/main/js/gui/Panel.js
index 5abbe4131e045ff1c09739453ffcb3123104062d..c8fb548235b86083d00619189a94ece2ff5cb50d 100644
--- a/frontend-js/src/main/js/gui/leftPanel/Panel.js
+++ b/frontend-js/src/main/js/gui/Panel.js
@@ -2,13 +2,13 @@
 
 /* exported logger */
 
-var GuiConnector = require('../../GuiConnector');
-var AbstractGuiElement = require('../AbstractGuiElement');
-var GuiUtils = require('./GuiUtils');
-var PanelControlElementType = require('../PanelControlElementType');
-var Functions = require('../../Functions');
+var GuiConnector = require('../GuiConnector');
+var AbstractGuiElement = require('./AbstractGuiElement');
+var GuiUtils = require('./leftPanel/GuiUtils');
+var PanelControlElementType = require('./PanelControlElementType');
+var Functions = require('../Functions');
 
-var logger = require('../../logger');
+var logger = require('../logger');
 
 function Panel(params) {
   AbstractGuiElement.call(this, params);
diff --git a/frontend-js/src/main/js/gui/export/ElementExportPanel.js b/frontend-js/src/main/js/gui/export/ElementExportPanel.js
new file mode 100644
index 0000000000000000000000000000000000000000..737b49cbfaeb8d318faa043f471429c1e8b21462
--- /dev/null
+++ b/frontend-js/src/main/js/gui/export/ElementExportPanel.js
@@ -0,0 +1,598 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var DualListbox = require('dual-listbox').DualListbox;
+var GuiConnector = require('../../GuiConnector');
+var logger = require('../../logger');
+var Functions = require('../../Functions');
+
+var Promise = require("bluebird");
+
+function ElementExportPanel(params) {
+  params.panelName = "elementExport";
+  params.scrollable = true;
+  Panel.call(this, params);
+
+  var self = this;
+  self._createGui();
+}
+
+ElementExportPanel.prototype = Object.create(Panel.prototype);
+ElementExportPanel.prototype.constructor = ElementExportPanel;
+
+function compareSimple(val1, val2) {
+  if (val1 < val2)
+    return -1;
+  if (val1 > val2)
+    return 1;
+  return 0;
+}
+
+ElementExportPanel.prototype._createGui = function() {
+
+};
+
+ElementExportPanel.prototype.init = function() {
+  var self = this;
+  var element = self.getElement();
+  var configuration;
+  return ServerConnector.getConfiguration().then(function(result) {
+    configuration = result;
+    var typeDiv = self._createSelectTypeDiv(configuration.getElementTypes());
+    element.appendChild(typeDiv);
+    element.appendChild(self._createSelectColumnDiv());
+    return ServerConnector.getProjectStatistics(self.getProject().getProjectId());
+  }).then(function(statistics) {
+    var miriamDiv = self._createMiriamTypeDiv(statistics);
+    element.appendChild(miriamDiv);
+    self.setMiriamTypesDualListbox(new DualListbox("#miriamTypeSelect", {
+      availableTitle : 'Available',
+      selectedTitle : 'Used',
+      addButtonText : '>',
+      removeButtonText : '<',
+      addAllButtonText : '>>',
+      removeAllButtonText : '<<'
+    }));
+  }).then(function() {
+    return self._createSelectIncludedCompartmentDiv();
+  }).then(function(selectIncludedCompartmentDiv) {
+    element.appendChild(selectIncludedCompartmentDiv);
+    self.setIncludedCompartmentsDualListbox(new DualListbox("#includedCompartmentsSelect", {
+      availableTitle : 'Available',
+      selectedTitle : 'Used',
+      addButtonText : '>',
+      removeButtonText : '<',
+      addAllButtonText : '>>',
+      removeAllButtonText : '<<'
+    }));
+    return self._createSelectExcludedCompartmentDiv();
+  }).then(function(selectExcludedCompartmentDiv) {
+    element.appendChild(selectExcludedCompartmentDiv);
+    self.setExcludedCompartmentsDualListbox(new DualListbox("#excludedCompartmentsSelect", {
+      availableTitle : 'Available',
+      selectedTitle : 'Used',
+      addButtonText : '>',
+      removeButtonText : '<',
+      addAllButtonText : '>>',
+      removeAllButtonText : '<<'
+    }));
+    element.appendChild(self._createDownloadButton());
+  }).then(function() {
+    $(window).trigger('resize');
+  });
+}
+
+ElementExportPanel.prototype._createSelectTypeDiv = function(elementTypes) {
+  var typeDiv = Functions.createElement({
+    type : "div",
+    name : "typeSelectDiv",
+  });
+  typeDiv.appendChild(Functions.createElement({
+    type : "h4",
+    content : " TYPE:",
+  }));
+  var choicesContainer = Functions.createElement({
+    type : "ul",
+    className : "minerva-checkbox-grid"
+  });
+  typeDiv.appendChild(choicesContainer);
+  for (var i = 0; i < elementTypes.length; i++) {
+    var elementType = elementTypes[i];
+    var row = Functions.createElement({
+      type : "li",
+      content : "<div class=\"checkbox\"><label> <input type=\"checkbox\" name=\"" + elementType + "\" value=\""
+          + elementType + "\" />" + elementType + "</label></div>"
+    });
+    choicesContainer.appendChild(row);
+  }
+  choicesContainer.appendChild(Functions.createElement({
+    type : "li",
+    content : "<div class=\"checkbox\"><label> <input type=\"checkbox\" name=\"ALL\" value=\"ALL\" />ALL</label></div>"
+  }));
+  return typeDiv;
+}
+
+ElementExportPanel.prototype._createMiriamTypeDiv = function(statistics) {
+  var typeDiv = Functions.createElement({
+    type : "div",
+    name : "miriamSelectDiv",
+    className : "minerva-export-dual-listbox-container",
+  });
+  typeDiv.appendChild(Functions.createElement({
+    type : "h4",
+    content : " Annotations:",
+  }));
+
+  var annotations = statistics.getElementAnnotations();
+
+  var selectElement = Functions.createElement({
+    type : "select",
+    className : "minerva-multi-select",
+    id : "miriamTypeSelect",
+  });
+  typeDiv.appendChild(selectElement);
+
+  function compare(entry1, entry2) {
+    var result;
+    if ((entry1.count === 0 && entry2.count === 0) || (entry1.count !== 0 && entry2.count !== 0))
+      return compareSimple(entry1.miriamType.getCommonName(), entry2.miriamType.getCommonName());
+    else {
+      return compareSimple(-entry1.count, -entry2.count);
+    }
+  }
+  annotations.sort(compare);
+
+  for (var i = 0; i < annotations.length; i++) {
+    var miriamType = annotations[i].miriamType;
+    var count = annotations[i].count;
+
+    var option = new Option();
+    option.value = miriamType.getName();
+    if (count > 0) {
+      option.innerHTML = "<div class='minerva-multi-select-special'>" + miriamType.getCommonName() + " (" + count
+          + ")</div>";
+    } else {
+      option.innerHTML = "<div >" + miriamType.getCommonName() + "</div>";
+    }
+    selectElement.appendChild(option);
+  }
+  return typeDiv;
+};
+
+ElementExportPanel.prototype._createDownloadButton = function() {
+  var self = this;
+  var downloadDiv = Functions.createElement({
+    type : "div",
+    name : "downloadDiv",
+    style : "clear:both; padding: 10px;",
+  });
+  var button = Functions.createElement({
+    type : "button",
+    content : " Download",
+    onclick : function() {
+      return self.createResponseString().then(function(result) {
+        logger.info(result);
+      });
+    },
+  })
+  downloadDiv.appendChild(button);
+
+  return downloadDiv;
+};
+
+ElementExportPanel.prototype.createResponseString = function() {
+  var self = this;
+  var types;
+  var includedCompartmentsName;
+  var models = [ self.getProject().getModel() ];
+  for (var i = 0; i < self.getProject().getModel().getSubmodels().length; i++) {
+    models.push(self.getProject().getModel().getSubmodels()[i]);
+  }
+
+  var elements = [];
+  return self.getSelectedTypes().then(function(result) {
+    types = result;
+    var promises = [];
+    for (var i = 0; i < models.length; i++) {
+      promises.push(models[i].getAliases({
+        type : types,
+        complete : true,
+      }));
+    }
+    return Promise.all(promises);
+  }).then(function(aliasesByModel) {
+    for (var i = 0; i < aliasesByModel.length; i++) {
+      for (var j = 0; j < aliasesByModel[i].length; j++) {
+        elements.push(aliasesByModel[i][j]);
+      }
+    }
+    return self.getSelectedColumns();
+  }).then(function(selectedColumns) {
+
+    var rows = [];
+    rows.push(self.createResponseHeader(selectedColumns));
+    for (var i = 0; i < elements.length; i++) {
+      rows.push(self.createResponseRow(elements[i], selectedColumns));
+    }
+    return rows.join("\n");
+  });
+};
+
+ElementExportPanel.prototype.createResponseHeader = function(columns) {
+  var stringBuilder = [];
+  for (var i = 0; i < columns.length; i++) {
+    var column = columns[i];
+    stringBuilder.push(column.name);
+  }
+  var result = stringBuilder.join("\t");
+  return result;
+
+};
+
+ElementExportPanel.prototype.createResponseRow = function(alias, columns) {
+  var stringBuilder = [];
+  for (var i = 0; i < columns.length; i++) {
+    var column = columns[i];
+    var value = alias[column.method]();
+    if (column.formatFunction !== undefined) {
+      value = column.formatFunction(value);
+    }
+    stringBuilder.push(value);
+
+  }
+  var result = stringBuilder.join("\t");
+  return result;
+};
+
+ElementExportPanel.prototype._createSelectIncludedCompartmentDiv = function() {
+  var i = 0;
+  var self = this;
+  var typeDiv = Functions.createElement({
+    type : "div",
+    name : "includedCompartmentSelectDiv",
+    className : "minerva-export-dual-listbox-container",
+  });
+  typeDiv.appendChild(Functions.createElement({
+    type : "h4",
+    content : " Included compartment/pathways:",
+  }));
+
+  return self._getCompartmentNames().then(function(compartmentNames) {
+
+    var selectElement = Functions.createElement({
+      type : "select",
+      className : "minerva-multi-select",
+      id : "includedCompartmentsSelect",
+    });
+    typeDiv.appendChild(selectElement);
+
+    for (var i = 0; i < compartmentNames.length; i++) {
+      var name = compartmentNames[i];
+
+      var option = new Option();
+      option.value = name;
+      option.innerHTML = "<div >" + name + "</div>";
+      selectElement.appendChild(option);
+    }
+    return typeDiv;
+  });
+};
+
+ElementExportPanel.prototype._createSelectExcludedCompartmentDiv = function() {
+  var i = 0;
+  var self = this;
+  var typeDiv = Functions.createElement({
+    type : "div",
+    name : "excludedCompartmentSelectDiv",
+    className : "minerva-export-dual-listbox-container",
+  });
+  typeDiv.appendChild(Functions.createElement({
+    type : "h4",
+    content : " Excluded compartment/pathways:",
+  }));
+
+  return self._getCompartmentNames().then(function(compartmentNames) {
+
+    var selectElement = Functions.createElement({
+      type : "select",
+      className : "minerva-multi-select",
+      id : "excludedCompartmentsSelect",
+    });
+    typeDiv.appendChild(selectElement);
+
+    for (var i = 0; i < compartmentNames.length; i++) {
+      var name = compartmentNames[i];
+
+      var option = new Option();
+      option.value = name;
+      option.innerHTML = "<div >" + name + "</div>";
+      selectElement.appendChild(option);
+    }
+    return typeDiv;
+  });
+};
+
+ElementExportPanel.prototype._getAllCompartments = function() {
+  var self = this;
+  var compartments = [];
+  var i;
+
+  var models = [ self.getProject().getModel() ];
+  for (i = 0; i < self.getProject().getModel().getSubmodels().length; i++) {
+    models.push(self.getProject().getModel().getSubmodels()[i]);
+  }
+
+  var promises = [];
+  for (i = 0; i < models.length; i++) {
+    promises.push(models[i].getCompartments());
+  }
+
+  return Promise.all(promises).then(function(result) {
+    for (var i = 0; i < result.length; i++) {
+      var modelCompartments = result[i];
+      for (var j = 0; j < modelCompartments.length; j++) {
+        compartments.push(modelCompartments[j]);
+      }
+    }
+    return compartments;
+  });
+};
+ElementExportPanel.prototype._getCompartmentNames = function() {
+  var self = this;
+  var compartments = [];
+  var i;
+  return self._getAllCompartments().then(function(result) {
+
+    var addedNames = [];
+    for (var i = 0; i < result.length; i++) {
+      if (addedNames[result[i].getName()] === undefined) {
+        compartments.push(result[i].getName());
+        addedNames[result[i].getName()] = true;
+      }
+    }
+    compartments.sort(compareSimple);
+    return compartments;
+  });
+};
+
+ElementExportPanel.prototype._createSelectColumnDiv = function() {
+  var self = this;
+  var columnDiv = Functions.createElement({
+    type : "div",
+    name : "columnSelectDiv",
+  });
+  columnDiv.appendChild(Functions.createElement({
+    type : "h4",
+    content : " COLUMN:",
+  }));
+  var choicesContainer = Functions.createElement({
+    type : "ul",
+    className : "minerva-checkbox-grid"
+  });
+  var columnTypes = self.getAllColumns();
+
+  columnDiv.appendChild(choicesContainer);
+  for (var i = 0; i < columnTypes.length; i++) {
+    var columnType = columnTypes[i];
+    var row = Functions.createElement({
+      type : "li",
+      content : "<div class=\"checkbox\"><label> <input type=\"checkbox\" name=\"column_" + columnType.columnName
+          + "\" value=\"" + columnType.columnName + "\" />" + columnType.name + "</label></div>"
+    });
+    choicesContainer.appendChild(row);
+  }
+  choicesContainer.appendChild(Functions.createElement({
+    type : "li",
+    content : "<div class=\"checkbox\"><label> <input type=\"checkbox\" name=\"ALL\" value=\"ALL\" />ALL</label></div>"
+  }));
+  return columnDiv;
+}
+
+ElementExportPanel.prototype.getAllColumns = function() {
+  return [ {
+    "columnName" : "id",
+    "method" : "getId",
+    "name" : "Id",
+  }, {
+    "columnName" : "name",
+    "method" : "getName",
+    "name" : "Name",
+  }, {
+    "columnName" : "description",
+    "method" : "getDescription",
+    "name" : "Description",
+  }, {
+    "columnName" : "modelId",
+    "method" : "getModelId",
+    "name" : "Model",
+  }, {
+    "columnName" : "type",
+    "method" : "getType",
+    "name" : "Type",
+  }, {
+    "columnName" : "complexId",
+    "method" : "getComplexId",
+    "name" : "Complex",
+  }, {
+    "columnName" : "compartmentId",
+    "method" : "getCompartmentId",
+    "name" : "Compartment",
+  }, {
+    "columnName" : "charge",
+    "method" : "getCharge",
+    "name" : "Charge",
+  }, {
+    "columnName" : "symbol",
+    "method" : "getSymbol",
+    "name" : "Symbol",
+  }, {
+    "columnName" : "fullName",
+    "method" : "getFullName",
+    "name" : "Full name",
+  }, {
+    "columnName" : "abbreviation",
+    "method" : "getAbbreviation",
+    "name" : "Abbreviation",
+  }, {
+    "columnName" : "formula",
+    "method" : "getFormula",
+    "name" : "Formula",
+  }, {
+    "columnName" : "synonyms",
+    "method" : "getSynonyms",
+    "name" : "Synonyms",
+  }, {
+    "columnName" : "formerSymbols",
+    "method" : "getFormerSymbols",
+    "name" : "Former symbols",
+  }, {
+    "columnName" : "references",
+    "method" : "getReferences",
+    "name" : "References",
+    "formatFunction" : function(references) {
+      var stringBuilder = [];
+      for (var i = 0; i < references.length; i++) {
+        var reference = references[i];
+        stringBuilder.push(reference.getType() + ":" + reference.getResource());
+      }
+      return stringBuilder.join(",");
+    },
+  }, {
+    "columnName" : "linkedSubmodelId",
+    "method" : "getLinkedSubmodelId",
+    "name" : "Linked submodel",
+  }, {
+    "columnName" : "elementId",
+    "method" : "getElementId",
+    "name" : "Element external id",
+  }, ];
+};
+
+ElementExportPanel.prototype.getSelectedTypes = function() {
+  var self = this;
+
+  var div = $("div[name='typeSelectDiv']", $(self.getElement()))[0];
+  var result = [];
+  var selectedAll = false
+  $(":checked", $(div)).each(function(index, element) {
+    if (element.value === "ALL") {
+      selectedAll = true;
+    }
+    result.push(element.value);
+  });
+  if (selectedAll) {
+    return ServerConnector.getConfiguration().then(function(configuration) {
+      return configuration.getElementTypes();
+    });
+  }
+
+  return Promise.resolve(result);
+}
+
+ElementExportPanel.prototype.setMiriamTypesDualListbox = function(dualListbox) {
+  this._miriamTypesDualListbox = dualListbox;
+};
+ElementExportPanel.prototype.getMiriamTypesDualListbox = function() {
+  return this._miriamTypesDualListbox;
+};
+
+ElementExportPanel.prototype.setIncludedCompartmentsDualListbox = function(dualListbox) {
+  this._includedCompartmentsDualListbox = dualListbox;
+};
+ElementExportPanel.prototype.getIncludedCompartmentsDualListbox = function() {
+  return this._includedCompartmentsDualListbox;
+};
+
+ElementExportPanel.prototype.getSelectedIncludedCompartments = function() {
+  var self = this;
+  var list = self.getIncludedCompartmentsDualListbox().selected;
+  var names = [];
+  var result = [];
+  for (var i = 0; i < list.length; i++) {
+    var element = list[i];
+    names[element.dataset.id] = true;
+  }
+  return self._getAllCompartments().then(function(compartments) {
+    for (var i = 0; i < compartments.length; i++) {
+      var compartment = compartments[i];
+      if (names[compartment.getName()]) {
+        result.push(compartment);
+      }
+    }
+    return result;
+  })
+};
+
+ElementExportPanel.prototype.setExcludedCompartmentsDualListbox = function(dualListbox) {
+  this._excludedCompartmentsDualListbox = dualListbox;
+};
+ElementExportPanel.prototype.getExcludedCompartmentsDualListbox = function() {
+  return this._excludedCompartmentsDualListbox;
+};
+
+ElementExportPanel.prototype.getSelectedExcludedCompartments = function() {
+  var self = this;
+  var list = self.getExcludedCompartmentsDualListbox().selected;
+  var names = [];
+  var result = [];
+  for (var i = 0; i < list.length; i++) {
+    var element = list[i];
+    names[element.dataset.id] = true;
+  }
+  return self._getAllCompartments().then(function(compartments) {
+    for (var i = 0; i < compartments.length; i++) {
+      var compartment = compartments[i];
+      if (names[compartment.getName()]) {
+        result.push(compartment);
+      }
+    }
+    return result;
+  })
+};
+
+ElementExportPanel.prototype.getSelectedMiriamTypes = function() {
+  var self = this;
+  return ServerConnector.getConfiguration().then(function(configuration) {
+    var selected = self.getMiriamTypesDualListbox().selected;
+    var result = [];
+    for (var i = 0; i < selected.length; i++) {
+      var miriamType = configuration.getMiriamTypeByName(selected[i].dataset.id);
+      result.push(miriamType);
+    }
+    return result;
+  });
+};
+
+ElementExportPanel.prototype.getSelectedColumns = function() {
+  var self = this;
+
+  var div = $("div[name='columnSelectDiv']", $(self.getElement()))[0];
+  var selectedColumnMap = [];
+  var selectedAll = false
+  $(":checked", $(div)).each(function(index, element) {
+    if (element.value === "ALL") {
+      selectedAll = true;
+    }
+    selectedColumnMap[element.value] = true;
+  });
+  var columnTypes = self.getAllColumns();
+
+  if (selectedAll) {
+    return Promise.resolve(columnTypes);
+  }
+
+  var result = [];
+
+  for (var i = 0; i < columnTypes.length; i++) {
+    var columnType = columnTypes[i];
+    if (selectedColumnMap[columnType.columnName] === true) {
+      result.push(columnType);
+    }
+  }
+  return Promise.resolve(result);
+}
+
+module.exports = ElementExportPanel;
diff --git a/frontend-js/src/main/js/gui/export/GraphicsExportPanel.js b/frontend-js/src/main/js/gui/export/GraphicsExportPanel.js
new file mode 100644
index 0000000000000000000000000000000000000000..f11716e9f885907b0a61e4a4ccb121dc5d954d05
--- /dev/null
+++ b/frontend-js/src/main/js/gui/export/GraphicsExportPanel.js
@@ -0,0 +1,26 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var GuiConnector = require('../../GuiConnector');
+var logger = require('../../logger');
+var Functions = require('../../Functions');
+
+function GraphicsExportPanel(params) {
+  params.panelName = "elementExport";
+  params.scrollable = true;
+  Panel.call(this, params);
+
+  var self = this;
+
+}
+
+GraphicsExportPanel.prototype = Object.create(Panel.prototype);
+GraphicsExportPanel.prototype.constructor = GraphicsExportPanel;
+
+GraphicsExportPanel.prototype.init = function() {
+
+}
+module.exports = GraphicsExportPanel;
diff --git a/frontend-js/src/main/js/gui/export/NetworkExportPanel.js b/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
new file mode 100644
index 0000000000000000000000000000000000000000..723980197e1217da6bf3accb3f516980ba2c4208
--- /dev/null
+++ b/frontend-js/src/main/js/gui/export/NetworkExportPanel.js
@@ -0,0 +1,27 @@
+"use strict";
+
+/* exported logger */
+
+var Panel = require('../Panel');
+
+var GuiConnector = require('../../GuiConnector');
+var logger = require('../../logger');
+var Functions = require('../../Functions');
+
+function NetworkExportPanel(params) {
+  params.panelName = "elementExport";
+  params.scrollable = true;
+  Panel.call(this, params);
+
+  var self = this;
+
+}
+
+NetworkExportPanel.prototype = Object.create(Panel.prototype);
+NetworkExportPanel.prototype.constructor = NetworkExportPanel;
+
+NetworkExportPanel.prototype.init = function() {
+  
+}
+
+module.exports = NetworkExportPanel;
diff --git a/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js b/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js
index 15ac333fc566ad5c5e20a0aa361876ede2ae3647..c37a57bb6fddb6f9f0afbb400a3c523bc790ffa6 100644
--- a/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/AbstractDbPanel.js
@@ -4,7 +4,7 @@
 
 var Promise = require("bluebird");
 
-var Panel = require('./Panel');
+var Panel = require('../Panel');
 var PanelControlElementType = require('../PanelControlElementType');
 
 var logger = require('../../logger');
diff --git a/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js b/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js
index 8d8132e22ae32467adec07a9891ed06e83f848e7..2e13fa4bf64604f1851237af9b0617da9a624aaa 100644
--- a/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/LeftPanel.js
@@ -145,7 +145,7 @@ LeftPanel.prototype.init = function() {
         return self.showElementDetails(e.arg.identifiedElements[0][0]);
       } else {
         return self.showElementDetails(undefined);
-      }
+  }
     });
     resolve();
   });
diff --git a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
index 7ae652a0d74d756f0af0ac6760fa7efc4ed5027d..8da84fb8a91ff2ed3499b97ef329c03c2c6111b0 100644
--- a/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/OverlayPanel.js
@@ -2,7 +2,7 @@
 
 /* exported logger */
 
-var Panel = require('./Panel');
+var Panel = require('../Panel');
 var PanelControlElementType = require('../PanelControlElementType');
 
 var GuiConnector = require('../../GuiConnector');
diff --git a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
index 87b8616e0283cd559bb75807d39ac94ba139f598..79ba6d65c87e6cae67c9ccf7b5d459cde775bbcb 100644
--- a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
@@ -3,7 +3,7 @@
 /* exported logger */
 
 var ConfigurationType = require('../../ConfigurationType');
-var Panel = require('./Panel');
+var Panel = require('../Panel');
 var PanelControlElementType = require('../PanelControlElementType');
 var PublicationListDialog = require('./PublicationListDialog');
 
diff --git a/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js b/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js
index 8b261043578360cdaba4f63889567f992f1e062f..c7b819b0d220692f9d32ba37663ee230b659e7c6 100644
--- a/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/SubmapPanel.js
@@ -4,7 +4,7 @@ var Promise = require("bluebird");
 
 /* exported logger */
 
-var Panel = require('./Panel');
+var Panel = require('../Panel');
 var PanelControlElementType = require('../PanelControlElementType');
 
 var logger = require('../../logger');
diff --git a/frontend-js/src/main/js/map/data/Alias.js b/frontend-js/src/main/js/map/data/Alias.js
index fd27c126308cde818a123217b4d2819136e7ee84..a13785067d74eeac59d6bd53d544a883aa56608e 100644
--- a/frontend-js/src/main/js/map/data/Alias.js
+++ b/frontend-js/src/main/js/map/data/Alias.js
@@ -50,6 +50,7 @@ Alias.prototype.update = function(javaObject) {
       return;
     }
     this.setDescription(javaObject.getDescription());
+    this.setElementId(javaObject.getElementId());
     this.setType(javaObject.getType());
     this.setCharge(javaObject.getCharge());
     this.setSymbol(javaObject.getSymbol());
@@ -71,6 +72,7 @@ Alias.prototype.update = function(javaObject) {
       return;
     }
     this.setDescription(javaObject.notes);
+    this.setElementId(javaObject.elementId);
     this.setType(javaObject.type);
     this.setCharge(javaObject.charge);
     this.setSymbol(javaObject.symbol);
@@ -122,6 +124,14 @@ Alias.prototype.getY = function() {
   return this.y;
 };
 
+Alias.prototype.setElementId = function(elementId) {
+  this._elementId = elementId;
+};
+
+Alias.prototype.getElementId = function() {
+  return this._elementId;
+};
+
 Alias.prototype.setWidth = function(width) {
   this.width = width;
 };
diff --git a/frontend-js/src/main/js/map/data/MapModel.js b/frontend-js/src/main/js/map/data/MapModel.js
index 7f2633fd1b825bcb7fff41c9f0bfc582f39ab917..1906f20879297f0661d9f01b2a979cdf25abe324 100644
--- a/frontend-js/src/main/js/map/data/MapModel.js
+++ b/frontend-js/src/main/js/map/data/MapModel.js
@@ -5,6 +5,7 @@ var Promise = require("bluebird");
 var logger = require('../../logger');
 
 var Alias = require('./Alias');
+var IdentifiedElement = require('./IdentifiedElement');
 var LayoutData = require('./LayoutData');
 var PointData = require('./PointData');
 var Reaction = require('./Reaction');
@@ -101,14 +102,20 @@ MapModel.prototype.getLayouts = function() {
 /**
  * Return list of all aliases that were added to the model.
  */
-MapModel.prototype.getAliases = function() {
-  var result = [];
-  for ( var id in this._aliases) {
-    if (this._aliases.hasOwnProperty(id)) {
-      result.push(this._aliases[id]);
+MapModel.prototype.getAliases = function(params) {
+  var self = this;
+  return ServerConnector.getAliases({
+    columns : "id,bounds,modelId",
+    type : params.type,
+    modelId : self.getId(),
+  }).then(function(lightAliases){
+    var identifiedElements = [];
+    for (var i=0;i<lightAliases.length;i++) {
+      self.addAlias(lightAliases[i]);
+      identifiedElements.push(new IdentifiedElement(lightAliases[i]));
     }
-  }
-  return result;
+    return self.getByIdentifiedElements(identifiedElements, params.complete);
+  });
 };
 
 /**
@@ -139,7 +146,9 @@ MapModel.prototype.getCompleteAliasById = function(id) {
   if (self._aliases[id] !== undefined && self._aliases[id].isComplete()) {
     return Promise.resolve(self._aliases[id]);
   } else {
-    return ServerConnector.getAliases([ id ]).then(function(aliases) {
+    return ServerConnector.getAliases({
+      ids : id
+    }).then(function(aliases) {
       if (self._aliases[id] === undefined) {
         self._aliases[id] = aliases[0];
       } else {
@@ -289,9 +298,14 @@ MapModel.prototype.getMissingElements = function(elements) {
   var aliasPromise = null;
   if (aliasIds.length > 0) {
     if (elements.complete) {
-      aliasPromise = ServerConnector.getAliases(aliasIds);
+      aliasPromise = ServerConnector.getAliases({
+        ids : aliasIds
+      });
     } else {
-      aliasPromise = ServerConnector.getLightAliases(aliasIds);
+      aliasPromise = ServerConnector.getAliases({
+        ids : aliasIds,
+        columns : "id,bounds,modelId"
+      });
 
     }
   }
@@ -475,11 +489,11 @@ MapModel.prototype.setMinZoom = function(minZoom) {
   this._minZoom = minZoom;
 };
 
-MapModel.prototype.getSubmodelType= function() {
+MapModel.prototype.getSubmodelType = function() {
   return this._submodelType;
 };
 
-MapModel.prototype.setSubmodelType= function(submodelType) {
+MapModel.prototype.setSubmodelType = function(submodelType) {
   this._submodelType = submodelType;
 };
 
@@ -729,4 +743,25 @@ MapModel.prototype.getReactionsForElements = function(elements, complete) {
   });
 };
 
+MapModel.prototype.getCompartments = function() {
+  var self = this;
+
+  var promise = Promise.resolve();
+  if (self._compartments === undefined) {
+    promise = ServerConnector.getAliases({
+      columns : "id,bounds,modelId",
+      type : "Compartment",
+      modelId : self.getId(),
+    }).then(function(compartments) {
+      self._compartments = [];
+      for (var i = 0; i < compartments.length; i++) {
+        self._compartments.push(new IdentifiedElement(compartments[i]));
+      }
+    });
+  }
+  return promise.then(function() {
+    return self.getByIdentifiedElements(self._compartments, true);
+  });
+};
+
 module.exports = MapModel;
diff --git a/frontend-js/src/main/js/map/data/MiriamType.js b/frontend-js/src/main/js/map/data/MiriamType.js
new file mode 100644
index 0000000000000000000000000000000000000000..57b7387244aaadd90aeef121fad18de1f763dd96
--- /dev/null
+++ b/frontend-js/src/main/js/map/data/MiriamType.js
@@ -0,0 +1,60 @@
+"use strict";
+
+var ObjectWithListeners = require('../../ObjectWithListeners');
+
+function MiriamType(data, name) {
+  // call super constructor
+  ObjectWithListeners.call(this);
+
+  var self = this;
+  self.setUris(data.uris);
+  self.setHomepage(data.homepage);
+  self.setName(name);
+  self.setCommonName(data.commonName);
+  self.setRegistryIdentifier(data.registryIdentifier);
+}
+
+MiriamType.prototype = Object.create(ObjectWithListeners.prototype);
+MiriamType.prototype.constructor = MiriamType;
+
+MiriamType.prototype.setUris = function(uris) {
+  this._uris = uris;
+};
+
+MiriamType.prototype.getUris = function() {
+  return this._uris;
+};
+
+MiriamType.prototype.setHomepage = function(homepage) {
+  this._homepage = homepage;
+};
+
+MiriamType.prototype.getHomepage = function() {
+  return this._homepage;
+};
+
+MiriamType.prototype.setName = function(name) {
+  this._name = name;
+};
+
+MiriamType.prototype.getName = function() {
+  return this._name;
+};
+
+MiriamType.prototype.setCommonName = function(commonName) {
+  this._commonName = commonName;
+};
+
+MiriamType.prototype.getCommonName = function() {
+  return this._commonName;
+};
+
+MiriamType.prototype.setRegistryIdentifier = function(registryIdentifier) {
+  this._registryIdentifier = registryIdentifier;
+};
+
+MiriamType.prototype.getRegistryIdentifier = function() {
+  return this._registryIdentifier;
+};
+
+module.exports = MiriamType;
diff --git a/frontend-js/src/main/js/map/data/ProjectStatistics.js b/frontend-js/src/main/js/map/data/ProjectStatistics.js
new file mode 100644
index 0000000000000000000000000000000000000000..53e10ae5a5c8e1d172be63df88456e26572018f6
--- /dev/null
+++ b/frontend-js/src/main/js/map/data/ProjectStatistics.js
@@ -0,0 +1,50 @@
+"use strict";
+
+var ObjectWithListeners = require('../../ObjectWithListeners');
+
+var logger = require('../../logger');
+
+function ProjectStatistics(data, configuration) {
+  // call super constructor
+  ObjectWithListeners.call(this);
+
+  this.setReactionAnnotations(data.reactionAnnotations, configuration);
+  this.setElementAnnotations(data.elementAnnotations, configuration);
+}
+
+ProjectStatistics.prototype = Object.create(ObjectWithListeners.prototype);
+ProjectStatistics.prototype.constructor = ProjectStatistics;
+
+ProjectStatistics.prototype.setReactionAnnotations = function(reactionAnnotations, configuration) {
+  var self = this;
+  self._reactionAnnotations = [];
+  for ( var key in reactionAnnotations) {
+    if (reactionAnnotations.hasOwnProperty(key)) {
+      var miriamType = configuration.getMiriamTypeByName(key);
+      self._reactionAnnotations.push({
+        miriamType : miriamType,
+        count : reactionAnnotations[key]
+      });
+    }
+  }
+};
+
+ProjectStatistics.prototype.setElementAnnotations = function(elementAnnotations, configuration) {
+  var self = this;
+  self._elementAnnotations = [];
+  for ( var key in elementAnnotations) {
+    if (elementAnnotations.hasOwnProperty(key)) {
+      var miriamType = configuration.getMiriamTypeByName(key);
+      self._elementAnnotations.push({
+        miriamType : miriamType,
+        count : elementAnnotations[key]
+      });
+    }
+  }
+};
+
+ProjectStatistics.prototype.getElementAnnotations = function() {
+  return this._elementAnnotations;
+};
+
+module.exports = ProjectStatistics;
diff --git a/frontend-js/src/main/js/minerva.js b/frontend-js/src/main/js/minerva.js
index 89cd1af7af67fbda743275c638a5e46e1aa4411e..f277b51de57127eb9fea2e50897b6e764902101d 100644
--- a/frontend-js/src/main/js/minerva.js
+++ b/frontend-js/src/main/js/minerva.js
@@ -9,6 +9,7 @@ var DbOverlayCollection = require('./map/overlay/DbOverlayCollection');
 var ConfigurationType = require('./ConfigurationType');
 var CustomMap = require('./map/CustomMap');
 var CustomMapOptions = require('./map/CustomMapOptions');
+var Export = require('./Export');
 var SearchDbOverlay = require('./map/overlay/SearchDbOverlay');
 
 var LeftPanel = require('./gui/leftPanel/LeftPanel');
@@ -556,10 +557,35 @@ function create(params) {
 
 }
 
+function createExport(params) {
+  params = modifyParamsForTouchInterface(params);
+  if (!(params instanceof CustomMapOptions)) {
+    params = new CustomMapOptions(params);
+  }
+  initGlobals(params);
+  params.getElement().style.display = "table";
+  params.getElement().innerHTML = "<div style='vertical-align:middle;display:table-cell;text-align: center'>"
+      + "<img src='resources/images/icons/ajax-loader.gif'/>" + "</div>";
+
+  var result;
+  // make sure that we are logged in
+  return ServerConnector.getToken().then(function() {
+    return getProject(params);
+  }).then(function(project) {
+    params.setProject(project);
+    result = new Export(params);
+    return result.init();
+  }).then(function() {
+    return result;
+  });
+}
+
 var minerva = {
   create : create,
+  createExport : createExport,
   ServerConnector : OriginalServerConnector,
   GuiConnector : OriginalGuiConnector,
+  DualListbox : require('dual-listbox').DualListbox,
 };
 
 module.exports = minerva;
diff --git a/frontend-js/src/test/js/Export-test.js b/frontend-js/src/test/js/Export-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..0a63026bd57d466136ec89de99bf5d90d8d9dce4
--- /dev/null
+++ b/frontend-js/src/test/js/Export-test.js
@@ -0,0 +1,28 @@
+"use strict";
+
+var Export = require('../../main/js/Export');
+var logger = require('./logger');
+
+var assert = require('assert');
+
+var originalNavigator = null;
+describe('Export', function() {
+
+  describe('init', function() {
+    it('default behaviour', function() {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new Export({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js
index 7093188f2bc75d046c4bee2d07bbc04bac978cef..cb575f3384c06e952ffdc550afeecff86a8a2011 100644
--- a/frontend-js/src/test/js/ServerConnector-test.js
+++ b/frontend-js/src/test/js/ServerConnector-test.js
@@ -66,12 +66,11 @@ describe('ServerConnector', function() {
   });
 
   it('getElements with empty list of ids', function() {
-    return ServerConnector.getLightAliases([]).then(function(result) {
-      assert.equal(result.length, 2);
-      var reaction = result[0];
-      assert.ok(reaction instanceof Alias);
-      assert.equal(reaction.getId(), 329176);
-      assert.equal(reaction.getModelId(), 15781);
+    return ServerConnector.getAliases({}).then(function(result) {
+      assert.equal(result.length, 30);
+      var alias = result[0];
+      assert.ok(alias instanceof Alias);
+      assert.equal(alias.getModelId(), 15781);
     });
   });
 
diff --git a/frontend-js/src/test/js/gui/leftPanel/Panel-test.js b/frontend-js/src/test/js/gui/Panel-test.js
similarity index 73%
rename from frontend-js/src/test/js/gui/leftPanel/Panel-test.js
rename to frontend-js/src/test/js/gui/Panel-test.js
index 88d3dd98fd626b96e8fc870e6337a847130f0f98..f1d8211feb384b3056a92480cd74e059da2f351a 100644
--- a/frontend-js/src/test/js/gui/leftPanel/Panel-test.js
+++ b/frontend-js/src/test/js/gui/Panel-test.js
@@ -2,15 +2,15 @@
 
 /* exported logger */
 
-var Helper = require('../../helper');
+var Helper = require('../helper');
 
-require('../../mocha-config.js');
+require('../mocha-config.js');
 
-var Panel = require('../../../../main/js/gui/leftPanel/Panel');
+var Panel = require('../../../main/js/gui/Panel');
 
 var chai = require('chai');
 var assert = chai.assert;
-var logger = require('../../logger');
+var logger = require('../logger');
 
 describe('Panel', function() {
 
diff --git a/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js b/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
new file mode 100644
index 0000000000000000000000000000000000000000..5805bf9d56b19cc3df800a23a398738545ad82fb
--- /dev/null
+++ b/frontend-js/src/test/js/gui/export/ElementExportPanel-test.js
@@ -0,0 +1,210 @@
+"use strict";
+
+var ElementExportPanel = require('../../../../main/js/gui/export/ElementExportPanel');
+var MiriamType = require('../../../../main/js/map/data/MiriamType');
+var logger = require('../../logger');
+
+var Helper = require('../../Helper');
+
+var assert = require('assert');
+
+describe('ElementExportPanel', function() {
+
+  var helper;
+  before(function() {
+    helper = new Helper();
+  });
+
+  describe('getSelectedTypes', function() {
+    it('select single element', function() {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        $("input[name='Degraded']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedTypes();
+      }).then(function(selectedTypes) {
+        assert.deepEqual([ "Degraded" ], selectedTypes);
+      });
+    });
+    it('select all', function() {
+      var exportObject;
+      var project;
+      var elementTypes;
+
+      return ServerConnector.getConfiguration().then(function(configuration) {
+        elementTypes = configuration.getElementTypes();
+        return ServerConnector.getProject();
+      }).then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        $("input[name='Degraded']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        $("input[name='ALL']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedTypes();
+      }).then(function(selectedTypes) {
+        assert.deepEqual(elementTypes, selectedTypes);
+      });
+    });
+  });
+
+  describe('getSelectedColumns', function() {
+    it('select single element', function() {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        $("input[name='column_name']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedColumns();
+      }).then(function(selectedTypes) {
+        assert.equal([ "name" ], selectedTypes[0].columnName);
+      });
+    });
+    it('select all', function() {
+      var exportObject;
+      var project;
+      var elementTypes;
+
+      return ServerConnector.getConfiguration().then(function(configuration) {
+        elementTypes = configuration.getElementTypes();
+        return ServerConnector.getProject();
+      }).then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        $("input[name='column_name']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        $("input[name='ALL']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        return exportObject.getSelectedColumns();
+      }).then(function(selectedTypes) {
+        assert.equal(exportObject.getAllColumns().length, selectedTypes.length);
+      });
+    });
+  });
+
+  describe('getSelectedMiriamTypes', function() {
+    it('select single element', function() {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        var dlb = exportObject.getMiriamTypesDualListbox();
+        var listItem = dlb.available[0];
+        dlb.addSelected(listItem);
+        return exportObject.getSelectedMiriamTypes();
+      }).then(function(result) {
+        assert.equal(result.length, 1);
+        assert.ok(result[0] instanceof MiriamType);
+      });
+    });
+  });
+
+  describe('getSelectedIncludedCompartments', function() {
+    it('empty selection', function() {
+      helper.setUrl("http://test/?id=complex_model_with_submaps");
+
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        assert.ok(exportObject.getIncludedCompartmentsDualListbox().available.length > 0);
+        return exportObject.getSelectedIncludedCompartments();
+      }).then(function(result) {
+        assert.equal(result.length, 0);
+      });
+    });
+  });
+
+  describe('getSelectedExcludedCompartments', function() {
+    it('empty selection', function() {
+      helper.setUrl("http://test/?id=complex_model_with_submaps");
+
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        var dlb = exportObject.getExcludedCompartmentsDualListbox();
+        var listItem = dlb.available[0];
+        dlb.addSelected(listItem);
+        return exportObject.getSelectedExcludedCompartments();
+      }).then(function(result) {
+        assert.equal(result.length, 1);
+      });
+    });
+  });
+
+  describe('createResponseString', function() {
+    it('get all', function() {
+      var exportObject;
+      var project;
+      return ServerConnector.getProject().then(function(result) {
+        project = result;
+        exportObject = new ElementExportPanel({
+          element : testDiv,
+          project : project
+        });
+        return exportObject.init();
+      }).then(function() {
+        $("input[name='ALL']", $(testDiv)).each(function(index, element) {
+          element.checked = true;
+        });
+        return exportObject.createResponseString();
+      }).then(function(result) {
+        // protein id
+        logger.debug (result)
+        assert.equal(result.indexOf("[object Object]"), -1);
+        assert.ok(result.indexOf("329156") >= 0);
+      });
+    });
+  });
+
+});
diff --git a/frontend-js/src/test/js/helper.js b/frontend-js/src/test/js/helper.js
index cf10fe386f3580d6899f5d9941a4d8056d68e220..539ad29dbf954598b09d3cccb9a714d54e43dc6b 100644
--- a/frontend-js/src/test/js/helper.js
+++ b/frontend-js/src/test/js/helper.js
@@ -27,6 +27,8 @@ var User = require("../../main/js/map/data/User");
 var Cookies = require('js-cookie');
 var jsdom = require('jsdom');
 
+var GuiConnector = require('../../main/js/GuiConnector');
+
 function Helper() {
   this.idCounter = 1000000;
 }
@@ -355,10 +357,11 @@ Helper.prototype.createCustomMap = function(project) {
  */
 Helper.prototype.setUrl = function(url) {
   var cookies = Cookies.get();
-  jsdom.changeURL(window, url);
+  dom.reconfigure({  url: url });
   for ( var cookie in cookies) {
     Cookies.set(cookie, cookies[cookie]);
   }
+  GuiConnector.init();
 };
 
 Helper.EPSILON = 1e-6;
diff --git a/frontend-js/src/test/js/map/data/MapModel-test.js b/frontend-js/src/test/js/map/data/MapModel-test.js
index 64d9fd6b8d03f55d884ec5da35fdaabb08220f75..92682f85555996d2629b88d5088efb9f2c6c697a 100644
--- a/frontend-js/src/test/js/map/data/MapModel-test.js
+++ b/frontend-js/src/test/js/map/data/MapModel-test.js
@@ -23,9 +23,8 @@ describe('MapModel', function() {
       idObject : 123
     });
 
-    assert.equal(123, model.id);
+    assert.equal(123, model.getId());
 
-    assert.ok(model.getAliases());
     assert.ok(model.getLayoutsData());
   });
 
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 253c6bebd7eb54d647b457649553c30c1f0a7a00..c6707b206f3c59147110ef4d647032bb733e7bc8 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -490,4 +490,16 @@ describe('minerva global', function() {
 
   });
 
+  it('create Export', function() {
+    var options = null;
+    return ServerConnectorMock.getProject().then(function(project) {
+      options = helper.createCustomMapOptions(project);
+
+      return minerva.createExport(options);
+    }).then(function(result) {
+      assert.ok(result);
+      assert.equal(logger.getWarnings().length, 0);
+    });
+  });
+
 });
diff --git a/frontend-js/src/test/js/mocha-config.js b/frontend-js/src/test/js/mocha-config.js
index 823dfc3ef0c133745daec8488016a6561d25dde0..db423ba524b9944c97eaf67a6aaab6fa9f2358f5 100644
--- a/frontend-js/src/test/js/mocha-config.js
+++ b/frontend-js/src/test/js/mocha-config.js
@@ -14,8 +14,9 @@ global.navigator = {
 };
 
 var jsdom = require('jsdom');
-global.document = jsdom.jsdom(undefined);
-global.window = document.defaultView;
+global.dom = new jsdom.JSDOM();
+global.window = dom.window;
+global.document = window.document;
 
 global.$ = require('jQuery');
 global.jQuery = $;
@@ -23,6 +24,17 @@ global.window.$ = $;
 
 // additions to jsdom implementations:
 global.Option = window.Option;
+
+var originalCreateElement = document.createElement;
+document.createElement = function(arg) {
+  var result = originalCreateElement.call(this, arg);
+  //woraround for: https://github.com/tmpvar/jsdom/issues/961 
+  if ("li" === arg) {
+    result.dataset = [];
+  }
+  return result;
+};
+
 window.open = function() {
   var result = {};
   result.focus = function() {
diff --git a/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID&
index 309b4b885947a49b6453a7d9cf1f0574f33a0950..328a5df52c4c125d31c1ed89541791af3fc0c772 100644
--- a/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/configuration/token=MOCK_TOKEN_ID&
@@ -1 +1 @@
-{"modelFormats":[{"handler":"lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser","name":"CellDesigner SBML"},{"handler":"lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter","name":"SBGN-ML"}],"elementTypes":["Drug","Degraded","Phenotype","Gene","RNA","Unknown","Compartment","Antisense RNA","Ion","Simple molecule","Protein","Complex"],"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"}],"reactionTypes":["Unknown reduced modulation","Reduced physical stimulation","Translation","State transition","Transcription","Unknown reduced trigger","Negative influence","Unknown positive influence","Positive influence","Unknown transition","Truncation","Reduced trigger","Boolean logic gate","Unknown reduced physical stimulation","Generic Reaction","Heterodimer associaation","Reduced modulation","Unknown negative influence","Dissociation","Known transition omitted","Transport"]}
\ No newline at end of file
+{"modelFormats":[{"handler":"lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser","name":"CellDesigner SBML"},{"handler":"lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter","name":"SBGN-ML"}],"elementTypes":["Drug","Degraded","Phenotype","Gene","RNA","Unknown","Compartment","Antisense RNA","Ion","Simple molecule","Protein","Complex"],"miriamTypes":{"CHEMBL_TARGET":{"commonName":"ChEMBL target","uris":["urn:miriam:chembl.target"],"homepage":"https://www.ebi.ac.uk/chembldb/","registryIdentifier":"MIR:00000085"},"UNIPROT":{"commonName":"Uniprot","uris":["urn:miriam:uniprot"],"homepage":"http://www.uniprot.org/","registryIdentifier":"MIR:00000005"},"MI_R_BASE_MATURE_SEQUENCE":{"commonName":"miRBase Mature Sequence Database","uris":["urn:miriam:mirbase.mature"],"homepage":"http://www.mirbase.org/","registryIdentifier":"MIR:00000235"},"PFAM":{"commonName":"Protein Family Database","uris":["urn:miriam:pfam"],"homepage":"http://pfam.xfam.org//","registryIdentifier":"MIR:00000028"},"ENSEMBL_PLANTS":{"commonName":"Ensembl Plants","uris":["urn:miriam:ensembl.plant"],"homepage":"http://plants.ensembl.org/","registryIdentifier":"MIR:00000205"},"WIKIPEDIA":{"commonName":"Wikipedia (English)","uris":["urn:miriam:wikipedia.en"],"homepage":"http://en.wikipedia.org/wiki/Main_Page","registryIdentifier":"MIR:00000384"},"CHEBI":{"commonName":"Chebi","uris":["urn:miriam:obo.chebi","urn:miriam:chebi"],"homepage":"http://www.ebi.ac.uk/chebi/","registryIdentifier":"MIR:00000002"},"WIKIDATA":{"commonName":"Wikidata","uris":["urn:miriam:wikidata"],"homepage":"https://www.wikidata.org/","registryIdentifier":"MIR:00000549"},"REACTOME":{"commonName":"Reactome","uris":["urn:miriam:reactome"],"homepage":"http://www.reactome.org/","registryIdentifier":"MIR:00000018"},"EC":{"commonName":"Enzyme Nomenclature","uris":["urn:miriam:ec-code"],"homepage":"http://www.enzyme-database.org/","registryIdentifier":"MIR:00000004"},"UNIPROT_ISOFORM":{"commonName":"UniProt Isoform","uris":["urn:miriam:uniprot.isoform"],"homepage":"http://www.uniprot.org/","registryIdentifier":"MIR:00000388"},"OMIM":{"commonName":"Online Mendelian Inheritance in Man","uris":["urn:miriam:omim"],"homepage":"http://omim.org/","registryIdentifier":"MIR:00000016"},"DRUGBANK_TARGET_V4":{"commonName":"DrugBank Target v4","uris":["urn:miriam:drugbankv4.target"],"homepage":"http://www.drugbank.ca/targets","registryIdentifier":"MIR:00000528"},"MIR_TAR_BASE_MATURE_SEQUENCE":{"commonName":"miRTarBase Mature Sequence Database","uris":["urn:miriam:mirtarbase"],"homepage":"http://mirtarbase.mbc.nctu.edu.tw/","registryIdentifier":"MIR:00100739"},"CHEMBL_COMPOUND":{"commonName":"ChEMBL","uris":["urn:miriam:chembl.compound"],"homepage":"https://www.ebi.ac.uk/chembldb/","registryIdentifier":"MIR:00000084"},"KEGG_PATHWAY":{"commonName":"Kegg Pathway","uris":["urn:miriam:kegg.pathway"],"homepage":"http://www.genome.jp/kegg/pathway.html","registryIdentifier":"MIR:00000012"},"CAS":{"commonName":"Chemical Abstracts Service","uris":["urn:miriam:cas"],"homepage":"http://commonchemistry.org","registryIdentifier":"MIR:00000237"},"REFSEQ":{"commonName":"RefSeq","uris":["urn:miriam:refseq"],"homepage":"http://www.ncbi.nlm.nih.gov/projects/RefSeq/","registryIdentifier":"MIR:00000039"},"WORM_BASE":{"commonName":"WormBase","uris":["urn:miriam:wormbase"],"homepage":"http://wormbase.bio2rdf.org/fct","registryIdentifier":"MIR:00000027"},"MI_R_BASE_SEQUENCE":{"commonName":"miRBase Sequence Database","uris":["urn:miriam:mirbase"],"homepage":"http://www.mirbase.org/","registryIdentifier":"MIR:00000078"},"TAIR_LOCUS":{"commonName":"TAIR Locus","uris":["urn:miriam:tair.locus"],"homepage":"http://arabidopsis.org/index.jsp","registryIdentifier":"MIR:00000050"},"PHARM":{"commonName":"PharmGKB Pathways","uris":["urn:miriam:pharmgkb.pathways"],"homepage":"http://www.pharmgkb.org/","registryIdentifier":"MIR:00000089"},"PANTHER":{"commonName":"PANTHER Family","uris":["urn:miriam:panther.family","urn:miriam:panther"],"homepage":"http://www.pantherdb.org/","registryIdentifier":"MIR:00000060"},"TAXONOMY":{"commonName":"Taxonomy","uris":["urn:miriam:taxonomy"],"homepage":"http://www.ncbi.nlm.nih.gov/taxonomy/","registryIdentifier":"MIR:00000006"},"UNIGENE":{"commonName":"UniGene","uris":["urn:miriam:unigene"],"homepage":"http://www.ncbi.nlm.nih.gov/unigene","registryIdentifier":"MIR:00000346"},"HGNC":{"commonName":"HGNC","uris":["urn:miriam:hgnc"],"homepage":"http://www.genenames.org","registryIdentifier":"MIR:00000080"},"HGNC_SYMBOL":{"commonName":"HGNC Symbol","uris":["urn:miriam:hgnc.symbol"],"homepage":"http://www.genenames.org","registryIdentifier":"MIR:00000362"},"COG":{"commonName":"Clusters of Orthologous Groups","uris":["urn:miriam:cogs"],"homepage":"https://www.ncbi.nlm.nih.gov/COG/","registryIdentifier":"MIR:00000296"},"WIKIPATHWAYS":{"commonName":"WikiPathways","uris":["urn:miriam:wikipathways"],"homepage":"http://www.wikipathways.org/","registryIdentifier":"MIR:00000076"},"HMDB":{"commonName":"HMDB","uris":["urn:miriam:hmdb"],"homepage":"http://www.hmdb.ca/","registryIdentifier":"MIR:00000051"},"CHEMSPIDER":{"commonName":"ChemSpider","uris":["urn:miriam:chemspider"],"homepage":"http://www.chemspider.com//","registryIdentifier":"MIR:00000138"},"ENSEMBL":{"commonName":"Ensembl","uris":["urn:miriam:ensembl"],"homepage":"www.ensembl.org","registryIdentifier":"MIR:00000003"},"GO":{"commonName":"Gene Ontology","uris":["urn:miriam:obo.go","urn:miriam:go"],"homepage":"http://amigo.geneontology.org/amigo","registryIdentifier":"MIR:00000022"},"KEGG_REACTION":{"commonName":"Kegg Reaction","uris":["urn:miriam:kegg.reaction"],"homepage":"http://www.genome.jp/kegg/reaction/","registryIdentifier":"MIR:00000014"},"KEGG_ORTHOLOGY":{"commonName":"KEGG Orthology","uris":["urn:miriam:kegg.orthology"],"homepage":"http://www.genome.jp/kegg/ko.html","registryIdentifier":"MIR:00000116"},"PUBCHEM":{"commonName":"PubChem-compound","uris":["urn:miriam:pubchem.compound"],"homepage":"http://pubchem.ncbi.nlm.nih.gov/","registryIdentifier":"MIR:00000034"},"MESH_2012":{"commonName":"MeSH 2012","uris":["urn:miriam:mesh.2012","urn:miriam:mesh"],"homepage":"http://www.nlm.nih.gov/mesh/","registryIdentifier":"MIR:00000270"},"MGD":{"commonName":"Mouse Genome Database","uris":["urn:miriam:mgd"],"homepage":"http://www.informatics.jax.org/","registryIdentifier":"MIR:00000037"},"ENTREZ":{"commonName":"Entrez Gene","uris":["urn:miriam:ncbigene","urn:miriam:entrez.gene"],"homepage":"http://www.ncbi.nlm.nih.gov/gene","registryIdentifier":"MIR:00000069"},"PUBCHEM_SUBSTANCE":{"commonName":"PubChem-substance","uris":["urn:miriam:pubchem.substance"],"homepage":"http://pubchem.ncbi.nlm.nih.gov/","registryIdentifier":"MIR:00000033"},"CCDS":{"commonName":"Consensus CDS","uris":["urn:miriam:ccds"],"homepage":"http://www.ncbi.nlm.nih.gov/CCDS/","registryIdentifier":"MIR:00000375"},"KEGG_GENES":{"commonName":"Kegg Genes","uris":["urn:miriam:kegg.genes","urn:miriam:kegg.genes:hsa"],"homepage":"http://www.genome.jp/kegg/genes.html","registryIdentifier":"MIR:00000070"},"TOXICOGENOMIC_CHEMICAL":{"commonName":"Toxicogenomic Chemical","uris":["urn:miriam:ctd.chemical"],"homepage":"http://ctdbase.org/","registryIdentifier":"MIR:00000098"},"SGD":{"commonName":"Saccharomyces Genome Database","uris":["urn:miriam:sgd"],"homepage":"http://www.yeastgenome.org/","registryIdentifier":"MIR:00000023"},"KEGG_COMPOUND":{"commonName":"Kegg Compound","uris":["urn:miriam:kegg.compound"],"homepage":"http://www.genome.jp/kegg/ligand.html","registryIdentifier":"MIR:00000013"},"INTERPRO":{"commonName":"InterPro","uris":["urn:miriam:interpro"],"homepage":"http://www.ebi.ac.uk/interpro/","registryIdentifier":"MIR:00000011"},"UNKNOWN":{"commonName":"Unknown","uris":[],"homepage":null,"registryIdentifier":null},"DRUGBANK":{"commonName":"DrugBank","uris":["urn:miriam:drugbank"],"homepage":"http://www.drugbank.ca/","registryIdentifier":"MIR:00000102"},"PUBMED":{"commonName":"PubMed","uris":["urn:miriam:pubmed"],"homepage":"http://www.ncbi.nlm.nih.gov/PubMed/","registryIdentifier":"MIR:00000015"}},"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"}],"reactionTypes":["Unknown reduced modulation","Reduced physical stimulation","Translation","State transition","Transcription","Unknown reduced trigger","Negative influence","Unknown positive influence","Positive influence","Unknown transition","Truncation","Reduced trigger","Boolean logic gate","Unknown reduced physical stimulation","Generic Reaction","Heterodimer associaation","Reduced modulation","Unknown negative influence","Dissociation","Known transition omitted","Transport"]}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16728/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16728/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..889f5e5170b558bce7298da14762cd810791e1e9
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16728/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"modelId":16728,"bounds":{"x":189.0,"width":291.0,"y":33.0,"height":296.0},"id":345332},{"modelId":16728,"bounds":{"x":35.0,"width":144.0,"y":45.0,"height":142.0},"id":345323}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16729/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16729/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16729/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16730/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16730/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16730/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16731/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16731/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/16731/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/all/bioEntities/elements/id=345323,345332&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/all/bioEntities/elements/id=345323,345332&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..79fd51eed023e3d999e04f70375e7de602c44392
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/all/bioEntities/elements/id=345323,345332&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":16728,"synonyms":[],"fullName":null,"complexId":null,"type":"Compartment","abbreviation":null,"compartmentId":null,"name":"c2","bounds":{"x":189.0,"width":291.0,"y":33.0,"height":296.0},"formula":null,"id":345332,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":16728,"synonyms":[],"fullName":null,"complexId":null,"type":"Compartment","abbreviation":null,"compartmentId":null,"name":"c1","bounds":{"x":35.0,"width":144.0,"y":45.0,"height":142.0},"formula":null,"id":345323,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/statistics/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/statistics/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0b8b40ad7fca85b9e5cd0f71375f36ca370de6f5
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/statistics/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+{"reactionAnnotations":{"COG":0,"CHEBI":0,"EC":0,"TOXICOGENOMIC_CHEMICAL":0,"DRUGBANK":0,"PFAM":0,"KEGG_PATHWAY":0,"SGD":0,"CHEMBL_COMPOUND":0,"CHEMSPIDER":0,"TAXONOMY":0,"ENSEMBL":0,"PUBMED":0,"CCDS":0,"ENTREZ":0,"MI_R_BASE_MATURE_SEQUENCE":0,"PUBCHEM_SUBSTANCE":0,"WIKIDATA":0,"CAS":0,"OMIM":0,"PHARM":0,"WORM_BASE":0,"KEGG_REACTION":0,"KEGG_ORTHOLOGY":0,"CHEMBL_TARGET":0,"HMDB":0,"DRUGBANK_TARGET_V4":0,"PANTHER":0,"GO":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"UNIPROT_ISOFORM":0,"WIKIPEDIA":0,"REACTOME":0,"HGNC":0,"UNIPROT":0,"INTERPRO":0,"WIKIPATHWAYS":0,"MESH_2012":0,"KEGG_COMPOUND":0,"MI_R_BASE_SEQUENCE":0,"UNIGENE":0,"MGD":0,"ENSEMBL_PLANTS":0,"PUBCHEM":0,"HGNC_SYMBOL":0,"REFSEQ":0,"KEGG_GENES":0,"TAIR_LOCUS":0,"UNKNOWN":0},"elementAnnotations":{"COG":0,"CHEBI":0,"EC":0,"TOXICOGENOMIC_CHEMICAL":0,"DRUGBANK":0,"PFAM":0,"KEGG_PATHWAY":0,"SGD":0,"CHEMBL_COMPOUND":0,"CHEMSPIDER":0,"TAXONOMY":0,"ENSEMBL":0,"PUBMED":0,"CCDS":0,"ENTREZ":0,"MI_R_BASE_MATURE_SEQUENCE":0,"PUBCHEM_SUBSTANCE":0,"WIKIDATA":0,"CAS":0,"OMIM":0,"PHARM":0,"WORM_BASE":0,"KEGG_REACTION":0,"KEGG_ORTHOLOGY":0,"CHEMBL_TARGET":0,"HMDB":0,"DRUGBANK_TARGET_V4":0,"PANTHER":0,"GO":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"UNIPROT_ISOFORM":0,"WIKIPEDIA":0,"REACTOME":0,"HGNC":0,"UNIPROT":0,"INTERPRO":0,"WIKIPATHWAYS":0,"MESH_2012":0,"KEGG_COMPOUND":0,"MI_R_BASE_SEQUENCE":0,"UNIGENE":0,"MGD":0,"ENSEMBL_PLANTS":0,"PUBCHEM":0,"HGNC_SYMBOL":0,"REFSEQ":0,"KEGG_GENES":0,"TAIR_LOCUS":0,"UNKNOWN":0}}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/15781/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/15781/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0637a088a01e8ddab3bf3fa98dbe804cbde1a0dc
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/15781/bioEntities/elements/columns=id,bounds,modelId&type=Compartment&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/15781/bioEntities/elements/columns=id,bounds,modelId&type=Drug,Complex,Phenotype,Gene,RNA,Unknown,Degraded,Antisense RNA,Ion,Simple molecule,Protein,Compartment&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/15781/bioEntities/elements/columns=id,bounds,modelId&type=Drug,Complex,Phenotype,Gene,RNA,Unknown,Degraded,Antisense RNA,Ion,Simple molecule,Protein,Compartment&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..4f45bc6123592d1aa8c9120dc4fdde8e0bb6d31a
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/15781/bioEntities/elements/columns=id,bounds,modelId&type=Drug,Complex,Phenotype,Gene,RNA,Unknown,Degraded,Antisense RNA,Ion,Simple molecule,Protein,Compartment&token=MOCK_TOKEN_ID&	
@@ -0,0 +1 @@
+[{"modelId":15781,"bounds":{"x":11.0,"width":118.0,"y":236.0,"height":66.0},"id":329166},{"modelId":15781,"bounds":{"x":683.0,"width":70.0,"y":132.0,"height":25.0},"id":329176},{"modelId":15781,"bounds":{"x":1022.7317629179333,"width":140.0,"y":209.5,"height":25.0},"id":329181},{"modelId":15781,"bounds":{"x":271.0,"width":101.0,"y":207.0,"height":164.0},"id":329158},{"modelId":15781,"bounds":{"x":0.0,"width":80.0,"y":186.0,"height":30.0},"id":329177},{"modelId":15781,"bounds":{"x":455.0,"width":70.0,"y":169.5,"height":25.0},"id":329161},{"modelId":15781,"bounds":{"x":918.0,"width":80.0,"y":427.0,"height":40.0},"id":329162},{"modelId":15781,"bounds":{"x":712.0,"width":80.0,"y":384.0,"height":40.0},"id":329174},{"modelId":15781,"bounds":{"x":849.0,"width":70.0,"y":309.0,"height":25.0},"id":329180},{"modelId":15781,"bounds":{"x":101.0,"width":90.0,"y":129.5,"height":25.0},"id":329167},{"modelId":15781,"bounds":{"x":1044.7317629179333,"width":140.0,"y":27.50000000000091,"height":25.0},"id":329164},{"modelId":15781,"bounds":{"x":165.0,"width":80.0,"y":43.0,"height":50.0},"id":329179},{"modelId":15781,"bounds":{"x":1214.2682370820667,"width":70.0,"y":128.5000000000009,"height":25.0},"id":329163},{"modelId":15781,"bounds":{"x":419.0,"width":80.0,"y":45.0,"height":40.0},"id":329182},{"modelId":15781,"bounds":{"x":279.0,"width":80.0,"y":233.0,"height":40.0},"id":329159},{"modelId":15781,"bounds":{"x":213.0,"width":80.0,"y":128.0,"height":30.0},"id":329172},{"modelId":15781,"bounds":{"x":105.0,"width":70.0,"y":203.5,"height":25.0},"id":329169},{"modelId":15781,"bounds":{"x":358.5,"width":25.0,"y":125.5,"height":25.0},"id":329165},{"modelId":15781,"bounds":{"x":695.0,"width":80.0,"y":239.0,"height":40.0},"id":329178},{"modelId":15781,"bounds":{"x":0.0,"width":90.0,"y":118.5,"height":25.0},"id":329168},{"modelId":15781,"bounds":{"x":12.0,"width":80.0,"y":6.0,"height":40.0},"id":329173},{"modelId":15781,"bounds":{"x":160.0,"width":119.0,"y":332.0,"height":63.0},"id":329171},{"modelId":15781,"bounds":{"x":289.0,"width":80.0,"y":39.0,"height":40.0},"id":329157},{"modelId":15781,"bounds":{"x":959.0,"width":70.0,"y":271.0,"height":25.0},"id":329156},{"modelId":15781,"bounds":{"x":819.0,"width":70.0,"y":134.0,"height":25.0},"id":329160},{"modelId":15781,"bounds":{"x":1197.2682370820667,"width":70.0,"y":287.5,"height":25.0},"id":329185},{"modelId":15781,"bounds":{"x":1225.7682370820667,"width":80.0,"y":66.0,"height":40.0},"id":329170},{"modelId":15781,"bounds":{"x":401.0,"width":30.0,"y":235.0,"height":30.0},"id":329175},{"modelId":15781,"bounds":{"x":1243.7682370820667,"width":25.0,"y":12.50000000000091,"height":25.0},"id":329184},{"modelId":15781,"bounds":{"x":656.0,"width":80.0,"y":42.0,"height":40.0},"id":329183}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId&token=MOCK_TOKEN_ID&
deleted file mode 100644
index 40bfb945c3f73ef38d4dc5fbfdec3ca4f0d5608e..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/columns=id,bounds,modelId&token=MOCK_TOKEN_ID&
+++ /dev/null
@@ -1 +0,0 @@
-[{"modelId":15781,"bounds":{"x":683.0,"y":132.0,"width":70.0,"height":25.0},"id":329176},{"modelId":15781,"bounds":{"x":11.0,"y":236.0,"width":118.0,"height":66.0},"id":329166}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329156,329157,329158,329159,329160,329161,329162,329163,329164,329165,329166,329167,329168,329169,329170,329171,329172,329173,329174,329175,329176,329177,329178,329179,329180,329181,329182,329183,329184,329185&token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329156,329157,329158,329159,329160,329161,329162,329163,329164,329165,329166,329167,329168,329169,329170,329171,329172,329173,329174,329175,329176,329177,329178,329179,329180,329181,329182,329183,329184,329185&token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..349f525341e87f0094ac0e5f6e6e9aa27250b543
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/id=329156,329157,329158,329159,329160,329161,329162,329163,329164,329165,329166,329167,329168,329169,329170,329171,329172,329173,329174,329175,329176,329177,329178,329179,329180,329181,329182,329183,329184,329185&token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Drug","abbreviation":null,"compartmentId":null,"name":"s10","bounds":{"x":0.0,"width":80.0,"y":186.0,"height":30.0},"formula":null,"id":329177,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"D-beta hydroxybutyrate","bounds":{"x":1022.7317629179333,"width":140.0,"y":209.5,"height":25.0},"formula":null,"id":329181,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"ADP","bounds":{"x":819.0,"width":70.0,"y":134.0,"height":25.0},"formula":null,"id":329160,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"RNA","abbreviation":null,"compartmentId":null,"name":"s5","bounds":{"x":0.0,"width":90.0,"y":118.5,"height":25.0},"formula":null,"id":329168,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s23","bounds":{"x":656.0,"width":80.0,"y":42.0,"height":40.0},"formula":null,"id":329183,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"s9","bounds":{"x":455.0,"width":70.0,"y":169.5,"height":25.0},"formula":null,"id":329161,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"REACT_2390.1","link":"http://www.reactome.org/PathwayBrowser/#REACT_2390.1","id":860340,"type":"REACTOME"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"NADH","bounds":{"x":1214.2682370820667,"width":70.0,"y":128.5000000000009,"height":25.0},"formula":null,"id":329163,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s22","bounds":{"x":712.0,"width":80.0,"y":384.0,"height":40.0},"formula":null,"id":329174,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"REACT_5224.1","link":"http://www.reactome.org/PathwayBrowser/#REACT_5224.1","id":860341,"type":"REACTOME"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"acetoacetate","bounds":{"x":1044.7317629179333,"width":140.0,"y":27.50000000000091,"height":25.0},"formula":null,"id":329164,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s4","bounds":{"x":419.0,"width":80.0,"y":45.0,"height":40.0},"formula":null,"id":329182,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Antisense RNA","abbreviation":null,"compartmentId":null,"name":"s6","bounds":{"x":101.0,"width":90.0,"y":129.5,"height":25.0},"formula":null,"id":329167,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Degraded","abbreviation":null,"compartmentId":null,"name":"s13","bounds":{"x":401.0,"width":30.0,"y":235.0,"height":30.0},"formula":null,"id":329175,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"NAD+","bounds":{"x":1197.2682370820667,"width":70.0,"y":287.5,"height":25.0},"formula":null,"id":329185,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s2","bounds":{"x":165.0,"width":80.0,"y":43.0,"height":50.0},"formula":null,"id":329179,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Ion","abbreviation":null,"compartmentId":null,"name":"s8","bounds":{"x":358.5,"width":25.0,"y":125.5,"height":25.0},"formula":null,"id":329165,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Complex","abbreviation":null,"compartmentId":null,"name":"s12","bounds":{"x":271.0,"width":101.0,"y":207.0,"height":164.0},"formula":null,"id":329158,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"ATP","bounds":{"x":683.0,"width":70.0,"y":132.0,"height":25.0},"formula":null,"id":329176,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"REACT_5847.1","link":"http://www.reactome.org/PathwayBrowser/#REACT_5847.1","id":860353,"type":"REACTOME"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Ion","abbreviation":null,"compartmentId":null,"name":"H+","bounds":{"x":1243.7682370820667,"width":25.0,"y":12.50000000000091,"height":25.0},"formula":null,"id":329184,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":"CNC","formerSymbols":[],"notes":"ymbol: CNC\r\nghfjkghfdjkghkdf\r\nfdghjkfdhgjkdfgjhdf\r\njdsfkljsdklfjsdf\r\nsjdkfjsdklfjkl\r\ndsjfkjl\r\nsdfkkjfskldjfkls\r\n\nRecName: Full=Sodium/calcium exchanger 1; AltName: Full=Na(+)/Ca(2+)-exchange protein 1; Flags: Precursor;","references":[{"resource":"REACT_20130","link":"http://www.reactome.org/PathwayBrowser/#REACT_20130","id":860342,"type":"REACTOME"},{"resource":"2141","link":"http://www.genenames.org/cgi-bin/gene_symbol_report?hgnc_id=2141","id":860343,"type":"HGNC"},{"resource":"6546","link":null,"id":860344,"type":"KEGG_GENES"},{"resource":"NP_001106272.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001106272.1","id":860345,"type":"REFSEQ"},{"resource":"NP_001106271.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001106271.1","id":860346,"type":"REFSEQ"},{"resource":"NP_001106273.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001106273.1","id":860347,"type":"REFSEQ"},{"resource":"NP_001239553.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001239553.1","id":860348,"type":"REFSEQ"},{"resource":"PA314","link":"http://www.pharmgkb.org/pathway/PA314","id":860349,"type":"PHARM"},{"resource":"NP_066920.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_066920.1","id":860350,"type":"REFSEQ"},{"resource":"6546","link":"http://www.ncbi.nlm.nih.gov/gene/6546","id":860351,"type":"ENTREZ"}],"modelId":15781,"synonyms":["CNC","NCX1"],"fullName":"Carney complex, multiple neoplasia and lentiginosis","complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"CNC","bounds":{"x":11.0,"width":118.0,"y":236.0,"height":66.0},"formula":null,"id":329166,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Unknown","abbreviation":null,"compartmentId":null,"name":"s11","bounds":{"x":105.0,"width":70.0,"y":203.5,"height":25.0},"formula":null,"id":329169,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s3","bounds":{"x":289.0,"width":80.0,"y":39.0,"height":40.0},"formula":null,"id":329157,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s23","bounds":{"x":695.0,"width":80.0,"y":239.0,"height":40.0},"formula":null,"id":329178,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"gfsdhj","bounds":{"x":160.0,"width":119.0,"y":332.0,"height":63.0},"formula":null,"id":329171,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"GTP","bounds":{"x":849.0,"width":70.0,"y":309.0,"height":25.0},"formula":null,"id":329180,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s22","bounds":{"x":918.0,"width":80.0,"y":427.0,"height":40.0},"formula":null,"id":329162,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"GDP","bounds":{"x":959.0,"width":70.0,"y":271.0,"height":25.0},"formula":null,"id":329156,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":329158,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s14","bounds":{"x":279.0,"width":80.0,"y":233.0,"height":40.0},"formula":null,"id":329159,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Phenotype","abbreviation":null,"compartmentId":null,"name":"s7","bounds":{"x":213.0,"width":80.0,"y":128.0,"height":30.0},"formula":null,"id":329172,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"description of S1\r\nthird line","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s1","bounds":{"x":12.0,"width":80.0,"y":6.0,"height":40.0},"formula":null,"id":329173,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"622","link":"http://www.ncbi.nlm.nih.gov/gene/622","id":860352,"type":"ENTREZ"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"BDH1","bounds":{"x":1225.7682370820667,"width":80.0,"y":66.0,"height":40.0},"formula":null,"id":329170,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..349f525341e87f0094ac0e5f6e6e9aa27250b543
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/bioEntities/elements/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Drug","abbreviation":null,"compartmentId":null,"name":"s10","bounds":{"x":0.0,"width":80.0,"y":186.0,"height":30.0},"formula":null,"id":329177,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"D-beta hydroxybutyrate","bounds":{"x":1022.7317629179333,"width":140.0,"y":209.5,"height":25.0},"formula":null,"id":329181,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"ADP","bounds":{"x":819.0,"width":70.0,"y":134.0,"height":25.0},"formula":null,"id":329160,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"RNA","abbreviation":null,"compartmentId":null,"name":"s5","bounds":{"x":0.0,"width":90.0,"y":118.5,"height":25.0},"formula":null,"id":329168,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s23","bounds":{"x":656.0,"width":80.0,"y":42.0,"height":40.0},"formula":null,"id":329183,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"s9","bounds":{"x":455.0,"width":70.0,"y":169.5,"height":25.0},"formula":null,"id":329161,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"REACT_2390.1","link":"http://www.reactome.org/PathwayBrowser/#REACT_2390.1","id":860340,"type":"REACTOME"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"NADH","bounds":{"x":1214.2682370820667,"width":70.0,"y":128.5000000000009,"height":25.0},"formula":null,"id":329163,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s22","bounds":{"x":712.0,"width":80.0,"y":384.0,"height":40.0},"formula":null,"id":329174,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"REACT_5224.1","link":"http://www.reactome.org/PathwayBrowser/#REACT_5224.1","id":860341,"type":"REACTOME"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"acetoacetate","bounds":{"x":1044.7317629179333,"width":140.0,"y":27.50000000000091,"height":25.0},"formula":null,"id":329164,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s4","bounds":{"x":419.0,"width":80.0,"y":45.0,"height":40.0},"formula":null,"id":329182,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Antisense RNA","abbreviation":null,"compartmentId":null,"name":"s6","bounds":{"x":101.0,"width":90.0,"y":129.5,"height":25.0},"formula":null,"id":329167,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Degraded","abbreviation":null,"compartmentId":null,"name":"s13","bounds":{"x":401.0,"width":30.0,"y":235.0,"height":30.0},"formula":null,"id":329175,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"NAD+","bounds":{"x":1197.2682370820667,"width":70.0,"y":287.5,"height":25.0},"formula":null,"id":329185,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s2","bounds":{"x":165.0,"width":80.0,"y":43.0,"height":50.0},"formula":null,"id":329179,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Ion","abbreviation":null,"compartmentId":null,"name":"s8","bounds":{"x":358.5,"width":25.0,"y":125.5,"height":25.0},"formula":null,"id":329165,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Complex","abbreviation":null,"compartmentId":null,"name":"s12","bounds":{"x":271.0,"width":101.0,"y":207.0,"height":164.0},"formula":null,"id":329158,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"ATP","bounds":{"x":683.0,"width":70.0,"y":132.0,"height":25.0},"formula":null,"id":329176,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"REACT_5847.1","link":"http://www.reactome.org/PathwayBrowser/#REACT_5847.1","id":860353,"type":"REACTOME"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Ion","abbreviation":null,"compartmentId":null,"name":"H+","bounds":{"x":1243.7682370820667,"width":25.0,"y":12.50000000000091,"height":25.0},"formula":null,"id":329184,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":"CNC","formerSymbols":[],"notes":"ymbol: CNC\r\nghfjkghfdjkghkdf\r\nfdghjkfdhgjkdfgjhdf\r\njdsfkljsdklfjsdf\r\nsjdkfjsdklfjkl\r\ndsjfkjl\r\nsdfkkjfskldjfkls\r\n\nRecName: Full=Sodium/calcium exchanger 1; AltName: Full=Na(+)/Ca(2+)-exchange protein 1; Flags: Precursor;","references":[{"resource":"REACT_20130","link":"http://www.reactome.org/PathwayBrowser/#REACT_20130","id":860342,"type":"REACTOME"},{"resource":"2141","link":"http://www.genenames.org/cgi-bin/gene_symbol_report?hgnc_id=2141","id":860343,"type":"HGNC"},{"resource":"6546","link":null,"id":860344,"type":"KEGG_GENES"},{"resource":"NP_001106272.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001106272.1","id":860345,"type":"REFSEQ"},{"resource":"NP_001106271.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001106271.1","id":860346,"type":"REFSEQ"},{"resource":"NP_001106273.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001106273.1","id":860347,"type":"REFSEQ"},{"resource":"NP_001239553.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_001239553.1","id":860348,"type":"REFSEQ"},{"resource":"PA314","link":"http://www.pharmgkb.org/pathway/PA314","id":860349,"type":"PHARM"},{"resource":"NP_066920.1","link":"http://www.ncbi.nlm.nih.gov/entrez/viewer.fcgi?val=NP_066920.1","id":860350,"type":"REFSEQ"},{"resource":"6546","link":"http://www.ncbi.nlm.nih.gov/gene/6546","id":860351,"type":"ENTREZ"}],"modelId":15781,"synonyms":["CNC","NCX1"],"fullName":"Carney complex, multiple neoplasia and lentiginosis","complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"CNC","bounds":{"x":11.0,"width":118.0,"y":236.0,"height":66.0},"formula":null,"id":329166,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Unknown","abbreviation":null,"compartmentId":null,"name":"s11","bounds":{"x":105.0,"width":70.0,"y":203.5,"height":25.0},"formula":null,"id":329169,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s3","bounds":{"x":289.0,"width":80.0,"y":39.0,"height":40.0},"formula":null,"id":329157,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s23","bounds":{"x":695.0,"width":80.0,"y":239.0,"height":40.0},"formula":null,"id":329178,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"gfsdhj","bounds":{"x":160.0,"width":119.0,"y":332.0,"height":63.0},"formula":null,"id":329171,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"GTP","bounds":{"x":849.0,"width":70.0,"y":309.0,"height":25.0},"formula":null,"id":329180,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s22","bounds":{"x":918.0,"width":80.0,"y":427.0,"height":40.0},"formula":null,"id":329162,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Simple molecule","abbreviation":null,"compartmentId":null,"name":"GDP","bounds":{"x":959.0,"width":70.0,"y":271.0,"height":25.0},"formula":null,"id":329156,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":329158,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s14","bounds":{"x":279.0,"width":80.0,"y":233.0,"height":40.0},"formula":null,"id":329159,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Phenotype","abbreviation":null,"compartmentId":null,"name":"s7","bounds":{"x":213.0,"width":80.0,"y":128.0,"height":30.0},"formula":null,"id":329172,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"description of S1\r\nthird line","references":[],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"s1","bounds":{"x":12.0,"width":80.0,"y":6.0,"height":40.0},"formula":null,"id":329173,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]},{"symbol":null,"formerSymbols":[],"notes":"","references":[{"resource":"622","link":"http://www.ncbi.nlm.nih.gov/gene/622","id":860352,"type":"ENTREZ"}],"modelId":15781,"synonyms":[],"fullName":null,"complexId":null,"type":"Protein","abbreviation":null,"compartmentId":null,"name":"BDH1","bounds":{"x":1225.7682370820667,"width":80.0,"y":66.0,"height":40.0},"formula":null,"id":329170,"linkedSubmodel":null,"hierarchyVisibilityLevel":[]}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/statistics/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/statistics/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..929cc68f9c59295ea64afef542c1b3a3ef16caa7
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/statistics/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+{"reactionAnnotations":{"SGD":0,"HGNC_SYMBOL":0,"GO":0,"MI_R_BASE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"REACTOME":2,"ENSEMBL":0,"OMIM":0,"CHEBI":0,"KEGG_COMPOUND":0,"DRUGBANK":0,"UNIGENE":0,"KEGG_ORTHOLOGY":0,"CHEMBL_TARGET":0,"WORM_BASE":0,"ENSEMBL_PLANTS":0,"REFSEQ":0,"ENTREZ":0,"UNKNOWN":0,"MI_R_BASE_MATURE_SEQUENCE":0,"UNIPROT_ISOFORM":0,"COG":0,"TAXONOMY":0,"KEGG_REACTION":0,"TOXICOGENOMIC_CHEMICAL":0,"CHEMSPIDER":0,"TAIR_LOCUS":0,"UNIPROT":0,"PHARM":0,"CCDS":0,"HGNC":0,"WIKIPEDIA":0,"HMDB":0,"PANTHER":0,"WIKIDATA":0,"PUBCHEM_SUBSTANCE":0,"CAS":0,"KEGG_PATHWAY":0,"MGD":0,"PUBMED":1,"CHEMBL_COMPOUND":0,"PFAM":0,"MESH_2012":0,"EC":0,"PUBCHEM":0,"DRUGBANK_TARGET_V4":0,"WIKIPATHWAYS":0,"INTERPRO":0,"KEGG_GENES":0},"elementAnnotations":{"SGD":0,"HGNC_SYMBOL":0,"GO":0,"MI_R_BASE_SEQUENCE":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"REACTOME":4,"ENSEMBL":0,"OMIM":0,"CHEBI":0,"KEGG_COMPOUND":0,"DRUGBANK":0,"UNIGENE":0,"KEGG_ORTHOLOGY":0,"CHEMBL_TARGET":0,"WORM_BASE":0,"ENSEMBL_PLANTS":0,"REFSEQ":5,"ENTREZ":2,"UNKNOWN":0,"MI_R_BASE_MATURE_SEQUENCE":0,"UNIPROT_ISOFORM":0,"COG":0,"TAXONOMY":0,"KEGG_REACTION":0,"TOXICOGENOMIC_CHEMICAL":0,"CHEMSPIDER":0,"TAIR_LOCUS":0,"UNIPROT":0,"PHARM":1,"CCDS":0,"HGNC":1,"WIKIPEDIA":0,"HMDB":0,"PANTHER":0,"WIKIDATA":0,"PUBCHEM_SUBSTANCE":0,"CAS":0,"KEGG_PATHWAY":0,"MGD":0,"PUBMED":0,"CHEMBL_COMPOUND":0,"PFAM":0,"MESH_2012":0,"EC":0,"PUBCHEM":0,"DRUGBANK_TARGET_V4":0,"WIKIPATHWAYS":0,"INTERPRO":0,"KEGG_GENES":1}}
\ 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 abe96fcaf95f5e1123465b45a38b8105386cccbe..200c6958ad5c838acdb07e09de5e8234ae014475 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
@@ -28,6 +28,7 @@ public class ConfigurationController extends BaseController {
 		result.put("overlayTypes", configurationController.getOverlayTypes(token));
 		result.put("elementTypes", configurationController.getElementTypes(token));
 		result.put("reactionTypes", configurationController.getReactionTypes(token));
+		result.put("miriamTypes", configurationController.getMiriamTypes(token));
 		return result;
 	}
 
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
index 8ce9ac5c13a0b268c57ec0f0b1a6c004aec3a075..30367df7cf9928650dbc0611a9812ac45c5917e8 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/configuration/ConfigurationRestImpl.java
@@ -22,6 +22,7 @@ import lcsb.mapviewer.converter.graphics.ImageGenerators;
 import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
 import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter;
 import lcsb.mapviewer.model.map.BioEntity;
+import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.modelutils.map.ClassTreeNode;
@@ -169,4 +170,22 @@ public class ConfigurationRestImpl {
 		return getClassStringTypesList(Reaction.class);
 	}
 
+	public Map<String, Object> getMiriamTypes(String id) {
+		Map<String, Object> result = new HashMap<>();
+		for (MiriamType type : MiriamType.values()) {
+			result.put(type.name(), createMiriamTypeResponse(type));
+		}
+		return result;
+	}
+
+	private Map<String, Object> createMiriamTypeResponse(MiriamType type) {
+		Map<String, Object> result = new HashMap<>();
+		result.put("commonName", type.getCommonName());
+		result.put("homepage", type.getDbHomepage());
+		result.put("registryIdentifier", type.getRegistryIdentifier());
+		result.put("uris", type.getUris());
+
+		return result;
+	}
+
 }
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
index a21b6e6164c5429eabd594ddeff02cb59c8c3210..ca0c72a1213ceb9a5309643f95ef843e61b1a0b2 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectController.java
@@ -37,6 +37,14 @@ public class ProjectController extends BaseController {
 		return projectController.getMetaData(projectId, token);
 	}
 
+	@RequestMapping(value = "/projects/{projectId}/statistics", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public Object getStatistics(//
+			@PathVariable(value = "projectId") String projectId, //
+			@CookieValue(value = Configuration.AUTH_TOKEN) String token //
+	) throws SecurityException, ObjectNotFoundException {
+		return projectController.getStatistics(projectId, token);
+	}
+
 	@RequestMapping(value = "/projects/{projectId}:downloadSource", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
 	public ResponseEntity<byte[]> getProjectSource(//
 			@CookieValue(value = Configuration.AUTH_TOKEN) String token, //
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
index a90edd7c34d3a31fbd94bfc0f0263a1fa2b5fb1d..cba3a43808693c1ebe96e3858c2a5b76aa157f2a 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectRestImpl.java
@@ -8,6 +8,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -41,6 +42,8 @@ import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.cache.FileEntry;
 import lcsb.mapviewer.model.cache.UploadedFileEntry;
 import lcsb.mapviewer.model.map.InconsistentModelException;
+import lcsb.mapviewer.model.map.MiriamData;
+import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.OverviewImage;
 import lcsb.mapviewer.model.map.OverviewImageLink;
 import lcsb.mapviewer.model.map.OverviewLink;
@@ -48,6 +51,8 @@ import lcsb.mapviewer.model.map.layout.ColorSchema;
 import lcsb.mapviewer.model.map.layout.InvalidColorSchemaException;
 import lcsb.mapviewer.model.map.layout.Layout;
 import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.model.map.reaction.Reaction;
+import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.model.user.User;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.interfaces.ILayoutService;
@@ -388,4 +393,51 @@ public class ProjectRestImpl extends BaseRestImpl {
 
 	}
 
+	public Map<String, Object> getStatistics(String projectId, String token) throws SecurityException, ObjectNotFoundException {
+		Map<String, Object> result = new HashMap<String, Object>();
+		AuthenticationToken authenticationToken = userService.getToken(token);
+
+		Model model = modelService.getLastModelByProjectId(projectId, authenticationToken);
+		if (model == null) {
+			throw new ObjectNotFoundException("Project with given id doesn't exist");
+		}
+
+		Map<MiriamType, Integer> elementAnnotations = new HashMap<>();
+		for (MiriamType mt : MiriamType.values()) {
+			elementAnnotations.put(mt, 0);
+		}
+		Set<Model> models = new HashSet<>();
+		models.add(model);
+		models.addAll(model.getSubmodels());
+
+		for (Model model2 : models) {
+			for (Element alias : model2.getElements()) {
+				for (MiriamData md : alias.getMiriamData()) {
+					Integer amount = elementAnnotations.get(md.getDataType());
+					amount += 1;
+					elementAnnotations.put(md.getDataType(), amount);
+				}
+			}
+		}
+		result.put("elementAnnotations", elementAnnotations);
+
+		Map<MiriamType, Integer> reactionAnnotations = new HashMap<>();
+		for (MiriamType mt : MiriamType.values()) {
+			reactionAnnotations.put(mt, 0);
+		}
+		for (Model model2 : models) {
+			for (Reaction reaction : model2.getReactions()) {
+				for (MiriamData md : reaction.getMiriamData()) {
+					Integer amount = reactionAnnotations.get(md.getDataType());
+					amount += 1;
+					reactionAnnotations.put(md.getDataType(), amount);
+				}
+			}
+		}
+
+		result.put("reactionAnnotations", reactionAnnotations);
+
+		return result;
+	}
+
 }
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsController.java
index 8fd5ac43cf5e07240c13d8ee38592f273dad1f00..21b5336199ad0f71bc68dd588c58abfa50d53081 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsController.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsController.java
@@ -27,10 +27,11 @@ public class ElementsController extends BaseController {
 			@PathVariable(value = "projectId") String projectId, //
 			@PathVariable(value = "modelId") String modelId, //
 			@RequestParam(value = "id", defaultValue = "") String id, //
+			@RequestParam(value = "type", defaultValue = "") String type, //
 			@RequestParam(value = "columns", defaultValue = "") String columns, //
 			@CookieValue(value = Configuration.AUTH_TOKEN) String token//
 	) throws SecurityException {
-		return projectController.getElements(projectId, id, columns, modelId, token);
+		return projectController.getElements(projectId, id, columns, modelId, token, type);
 	}
 
 }
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsRestImpl.java
index d9ce7b914dbe1640c8cd8f14fd9b2f89a50e6d1f..087f49f4b5dc44ead6eebba48b8767b657f6d372 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementsRestImpl.java
@@ -36,7 +36,7 @@ public class ElementsRestImpl extends BaseRestImpl {
 	@Autowired
 	private OverviewImageViewFactory factory;
 
-	public List<Map<String, Object>> getElements(String projectId, String id, String columns, String modelId, String token)
+	public List<Map<String, Object>> getElements(String projectId, String id, String columns, String modelId, String token, String type)
 			throws UserAccessException, SecurityException {
 		Set<Integer> ids = new HashSet<>();
 		if (!id.equals("")) {
@@ -44,6 +44,13 @@ public class ElementsRestImpl extends BaseRestImpl {
 				ids.add(Integer.valueOf(str));
 			}
 		}
+		Set<String> types = new HashSet<>();
+		if (!type.isEmpty()) {
+			for (String str : type.split(",")) {
+				types.add(str.toLowerCase());
+			}
+		}
+
 		Set<String> columnsSet = createElementColumnSet(columns);
 
 		List<Map<String, Object>> result = new ArrayList<>();
@@ -53,7 +60,9 @@ public class ElementsRestImpl extends BaseRestImpl {
 		for (Model model2 : models) {
 			for (Element element : model2.getElements()) {
 				if (ids.size() == 0 || ids.contains(element.getId())) {
-					result.add(preparedElement(element, columnsSet));
+					if (types.size() == 0 || types.contains(element.getStringType().toLowerCase())) {
+						result.add(preparedElement(element, columnsSet));
+					}
 				}
 			}
 		}
@@ -70,6 +79,8 @@ public class ElementsRestImpl extends BaseRestImpl {
 				value = element.getId();
 			} else if (column.equals("modelid")) {
 				value = element.getModelData().getId();
+			} else if (column.equals("elementid")) {
+				value = element.getElementId();
 			} else if (column.equals("name")) {
 				value = element.getName();
 			} else if (column.equals("type")) {
@@ -129,6 +140,7 @@ public class ElementsRestImpl extends BaseRestImpl {
 		Set<String> columnsSet = new HashSet<>();
 		if (columns.equals("")) {
 			columnsSet.add("id");
+			columnsSet.add("elementId");
 			columnsSet.add("modelId");
 			columnsSet.add("name");
 			columnsSet.add("type");
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java
index c424749d187a2e9cf32f69cf86694aae3645580e..52b5c6aa884540de6efa5ed1602bf858750a62a2 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/configuration/ConfigurationRestImplTest.java
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.api.configuration;
 
+import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
 
 import java.util.List;
@@ -14,6 +15,7 @@ import org.junit.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 
 import lcsb.mapviewer.api.RestTestFunctions;
+import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.reaction.type.StateTransitionReaction;
 import lcsb.mapviewer.model.map.species.GenericProtein;
 import lcsb.mapviewer.services.view.ConfigurationView;
@@ -81,7 +83,6 @@ public class ConfigurationRestImplTest extends RestTestFunctions {
 			e.printStackTrace();
 			throw e;
 		}
-
 	}
 
 	@Test
@@ -94,7 +95,17 @@ public class ConfigurationRestImplTest extends RestTestFunctions {
 			e.printStackTrace();
 			throw e;
 		}
+	}
 
+	@Test
+	public void testGetMiriamTypes() throws Exception {
+		try {
+			Map<?,?> list = configurationRestImpl.getMiriamTypes(token.getId());
+			assertNotNull(list.get(MiriamType.PUBMED.name()));
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
 	}
 
 }
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java
index d9d477bee8dd8c3ae0268530438385f4949bc122..12a789d393bd4674120a9568735b6ac54bae29e6 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ProjectRestImplTest.java
@@ -1,10 +1,13 @@
 package lcsb.mapviewer.api.projects;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.fail;
 import static org.mockito.Matchers.any;
 import static org.mockito.Matchers.anyString;
 
+import java.util.Map;
+
 import org.apache.log4j.Logger;
 import org.junit.After;
 import org.junit.AfterClass;
@@ -21,6 +24,7 @@ import lcsb.mapviewer.api.RestTestFunctions;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.converter.graphics.PdfImageGenerator;
 import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
+import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.services.interfaces.IModelService;
 
@@ -124,6 +128,28 @@ public class ProjectRestImplTest extends RestTestFunctions {
 		}
 	}
 
+	@Test
+	public void testGetStatistics() throws Exception {
+		try {
+			ProjectRestImpl projectRest = createMockProjectRest("testFiles/model/sample.xml");
+			Map<String, Object> result = projectRest.getStatistics("sample", token.getId());
+			Gson gson = new Gson();
+			assertNotNull(gson.toJson(result));
+
+			Map<?, ?> elementAnnotations = (Map<?, ?>) result.get("elementAnnotations");
+			assertEquals(elementAnnotations.get(MiriamType.CAS), 0);
+			assertEquals(elementAnnotations.get(MiriamType.ENTREZ), 1);
+
+			Map<?, ?> reactionAnnotations = (Map<?, ?>) result.get("reactionAnnotations");
+			assertEquals(reactionAnnotations.get(MiriamType.ENTREZ), 0);
+			assertEquals(reactionAnnotations.get(MiriamType.PUBMED), 1);
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
 	@Test
 	public void testGetMetaDataForComplexWithImages() throws Exception {
 		try {
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementRestImplTest.java
index f3c30757319e0f2098957d09eb3da05e0b809b58..8cc6d689ba44e9c600f646ff1290167135c709d9 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementRestImplTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/bioEntities/elements/ElementRestImplTest.java
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.api.projects.models.bioEntities.elements;
 
+import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
 import static org.mockito.Matchers.any;
@@ -8,6 +9,7 @@ import static org.mockito.Matchers.anyString;
 import java.util.List;
 import java.util.Map;
 
+import org.apache.log4j.Logger;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
@@ -19,14 +21,16 @@ import com.fasterxml.jackson.databind.ObjectMapper;
 
 import lcsb.mapviewer.api.RestTestFunctions;
 import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.model.map.species.GenericProtein;
 import lcsb.mapviewer.services.interfaces.IModelService;
 
 public class ElementRestImplTest extends RestTestFunctions {
+	Logger					 logger	= Logger.getLogger(RestTestFunctions.class);
 
 	@Autowired
 	ElementsRestImpl _elementsRestImpl;
 
-	ObjectMapper mapper = new ObjectMapper();
+	ObjectMapper		 mapper	= new ObjectMapper();
 
 	@AfterClass
 	public static void tearDownAfterClass() throws Exception {
@@ -44,7 +48,7 @@ public class ElementRestImplTest extends RestTestFunctions {
 	public void testGetElementsProcessAllColumns() throws Exception {
 		try {
 			ElementsRestImpl projectRest = createMockProjectRest("testFiles/model/sample.xml");
-			List<Map<String, Object>> result = projectRest.getElements("sample", "", "", "*", token.getId());
+			List<Map<String, Object>> result = projectRest.getElements("sample", "", "", "*", token.getId(), "");
 			for (Map<String, Object> element : result) {
 				for (String paramName : element.keySet()) {
 					Object val = element.get(paramName);
@@ -57,7 +61,21 @@ public class ElementRestImplTest extends RestTestFunctions {
 			}
 			String json = mapper.writeValueAsString(result);
 			assertNotNull(json);
-			
+
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	@Test
+	public void testGetElementsByType() throws Exception {
+		try {
+			String proteinType = new GenericProtein("1").getStringType();
+			ElementsRestImpl projectRest = createMockProjectRest("testFiles/model/sample.xml");
+			List<Map<String, Object>> result = projectRest.getElements("sample", "", "", "*", token.getId(), proteinType);
+			assertEquals(12, result.size());
+
 		} catch (Exception e) {
 			e.printStackTrace();
 			throw e;
diff --git a/web/.gitignore b/web/.gitignore
index 3a1f4b74967f5ce7841e10a963c327f921692a4b..b334afad6491840a0b5c204e1ea0b214baac12db 100644
--- a/web/.gitignore
+++ b/web/.gitignore
@@ -1,4 +1,5 @@
 /node_modules/
 /coverage/
+/src/main/webapp/resources/css/minerva.css
 /src/main/webapp/resources/js/minerva.js
 /src/main/webapp/resources/js/minerva.js.map
diff --git a/web/pom.xml b/web/pom.xml
index 8e1ec90cb6d4c87eea0c219ef90eee7128b79747..db2c44d95b4458d191c8bdb615e6e1a03a0c9c92 100644
--- a/web/pom.xml
+++ b/web/pom.xml
@@ -203,8 +203,7 @@
                 <version>2.7</version>
                 <executions>
                     <execution>
-                        <id>copy-resources</id>
-                        <!-- here the phase you need -->
+                        <id>copy-js</id>
                         <phase>prepare-package</phase>
                         <goals>
                             <goal>copy-resources</goal>
@@ -222,6 +221,24 @@
                             </resources>
                         </configuration>
                     </execution>
+                    <execution>
+                        <id>copy-css</id>
+                        <phase>prepare-package</phase>
+                        <goals>
+                            <goal>copy-resources</goal>
+                        </goals>
+                        <configuration>
+                            <outputDirectory>${basedir}/src/main/webapp/resources/css/</outputDirectory>
+                            <resources>
+                                <resource>
+                                    <directory>${basedir}/../frontend-js/dist/</directory>
+                                    <includes>
+          														<include>**/*.css</include>
+        														</includes>
+                                </resource>
+                            </resources>
+                        </configuration>
+                    </execution>
                 </executions>
             </plugin>
         </plugins>
diff --git a/web/src/main/webapp/WEB-INF/components/admin/header.xhtml b/web/src/main/webapp/WEB-INF/components/admin/header.xhtml
index 7361ab78ee149d75a73cf319fc0b98a6bd62164e..3f4bf95ce2fd7a0df3814e6ac9ac802808ca0da0 100644
--- a/web/src/main/webapp/WEB-INF/components/admin/header.xhtml
+++ b/web/src/main/webapp/WEB-INF/components/admin/header.xhtml
@@ -4,7 +4,7 @@
 	xmlns:ui="http://java.sun.com/jsf/facelets"
 	xmlns:p="http://primefaces.org/ui">
 
-	<h:outputStylesheet library="css" name="global.css"	/>
+	<h:outputStylesheet library="css" name="minerva.css"	/>
 				
 	<div class="minerva-header">
 		<a href="#{request.contextPath}/?id=#{mapMB.currentMapId}" class="mainTitle"><i class="fa fa-home" style="font-size:17px"></i> #{mapMB.currentProject.name}</a>
diff --git a/web/src/main/webapp/export-new.xhtml b/web/src/main/webapp/export-new.xhtml
new file mode 100644
index 0000000000000000000000000000000000000000..e84a149b5e2969e49651600830450d5271be382b
--- /dev/null
+++ b/web/src/main/webapp/export-new.xhtml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
+"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml"
+	xmlns:h="http://java.sun.com/jsf/html"
+	xmlns:f="http://java.sun.com/jsf/core"
+	xmlns:ui="http://java.sun.com/jsf/facelets"
+	xmlns:p="http://primefaces.org/ui">
+
+<f:view contentType="text/html">
+<h:head>
+	<script src="https://maps.google.com/maps/api/js?libraries=drawing&amp;v=3.26" type="text/javascript"/>
+
+	<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" type="text/javascript"/>
+	<script src="https://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.min.js" type="text/javascript"/>
+
+  <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
+  <script src="https://cdn.datatables.net/1.10.13/js/jquery.dataTables.min.js"></script>
+
+
+	<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.13/css/jquery.dataTables.min.css"/>	
+	<link rel="stylesheet" type="text/css" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"/>
+	
+	<link rel="shortcut icon" href="./resources/images/favicon.png" type="image/png" />
+
+	<h:outputScript library="js" name="minerva.js"  />
+	
+	<script type="text/javascript">
+//<![CDATA[
+
+function initMap(){
+	var element = document.getElementById('minervaAppDiv');
+  return minerva.createExport({
+		element : element, 
+	}).then(function(result){
+		customMap = result;
+		document.title = result.getProject().getName();
+	}).catch(function(rejectReason){
+		minerva.GuiConnector.alert(rejectReason);
+	});
+}
+
+//]]>
+		</script>
+</h:head>
+<h:body onload="initMap();" >
+<h:outputStylesheet library="css" name="style.css"/>
+<h:outputStylesheet library="css" name="minerva.css"	/>
+<h:outputStylesheet library="css" name="pileup.css"/>
+<h:outputStylesheet library="css" name="bootstrap.min.css"/>
+
+	<h:outputScript library="primefaces" name="jquery/jquery.js" target="head"	/>
+	<div id="minervaAppDiv" style="height: 100%;width: 100%;margin: 0;"/>
+
+</h:body>
+</f:view>
+</html>
diff --git a/web/src/main/webapp/index.xhtml b/web/src/main/webapp/index.xhtml
index ee5341d581deae5af4a8e02902ff9e71c5ceb1f2..f950f192d10f51a8dfaa31c11052bdc16080fdc7 100644
--- a/web/src/main/webapp/index.xhtml
+++ b/web/src/main/webapp/index.xhtml
@@ -48,7 +48,7 @@ function initMap(){
 </h:head>
 <h:body onload="initMap();" >
 <h:outputStylesheet library="css" name="style.css"/>
-<h:outputStylesheet library="css" name="global.css"	/>
+<h:outputStylesheet library="css" name="minerva.css"	/>
 <h:outputStylesheet library="css" name="pileup.css"/>
 <h:outputStylesheet library="css" name="bootstrap.min.css"/>