diff --git a/README.md b/README.md
index ebefb9ef5ec76f5bf38e152f5aca93d1c6982b9f..861648d99c5e64126470d7438abf13c19892bd67 100644
--- a/README.md
+++ b/README.md
@@ -98,6 +98,16 @@ curl -X GET --cookie "MINERVA_AUTH_TOKEN=xxxxxxxx" http://pg-sandbox.uni.lu/mine
 ```	
 
 #### (sub)Maps
+* List of (sub)maps in a project
+  * URL: `/projects/{projectId}/models/`
+  * Method: GET
+  * Parameters:  
+		* `projectId` - identifier of the project
+  * Example:
+```
+curl -X GET --cookie "MINERVA_AUTH_TOKEN=xxxxxxxx" "http://pg-sandbox.uni.lu/minerva/api/projects/pdmap_dec15/models/"
+```	
+
 * Download map as a model file (ie. in CellDesigner format)
   * URL: `/projects/{projectId}/models/{modelId}:downloadModel`
   * Method: GET
diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 45af28dfb1affff12ce7a34172a04a7d620ab6b9..88b8109a4d4e84649e92eba0f963f543d44feb37 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -21,6 +21,7 @@ var InvalidCredentialsError = require('./InvalidCredentialsError');
 var LayoutAlias = require('./map/data/LayoutAlias');
 var LayoutData = require('./map/data/LayoutData');
 var LayoutReaction = require('./map/data/LayoutReaction');
+var MapModel = require('./map/data/MapModel');
 var MiRna = require('./map/data/MiRna');
 var NetworkError = require('./NetworkError');
 var Project = require('./map/data/Project');
@@ -624,6 +625,23 @@ ServerConnector.getConfigurationParam = function(paramId) {
   });
 };
 
+ServerConnector.getModels = function(projectId) {
+  var queryParams = {};
+  var filterParams = {};
+  var project;
+  var self = this;
+  return self.getProjectId(projectId).then(function(result) {
+    queryParams.projectId = result;
+    return self.readFile(self.getModelsUrl(queryParams, filterParams));
+  }).then(function(content) {
+    var models = [];
+    var parsedJson = JSON.parse(content);
+    for (var i = 0; i < parsedJson.length; i++) {
+      models.push(new MapModel(parsedJson[i]));
+    }
+    return models;
+  });
+};
 ServerConnector.getProject = function(projectId) {
   var queryParams = {};
   var filterParams = {};
@@ -634,6 +652,9 @@ ServerConnector.getProject = function(projectId) {
     return self.readFile(self.getProjectsUrl(queryParams, filterParams));
   }).then(function(content) {
     project = new Project(content);
+    return self.getModels(projectId);
+  }).then(function(models) {
+    project.setModel(models[0]);
     return self.getOverlays(projectId);
   }).then(function(overlays) {
     project.getModel().addLayouts(overlays);
diff --git a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
index 0c5c96d604ec7d3806ef80ebfa7abd7044d099d3..391ba195a7ff15e8676951f8a6988cb737df3f14 100644
--- a/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
+++ b/frontend-js/src/main/js/gui/leftPanel/ProjectInfoPanel.js
@@ -228,7 +228,9 @@ ProjectInfoPanel.prototype.refresh = function() {
     projectNameText.innerHTML = project.getName();
     projectVersionText.innerHTML = project.getVersion();
     projectDescriptionText.innerHTML = project.getDescription();
-    projectPublicationsText.innerHTML = project.getPublicationCount();
+    return ServerConnector.getProjectStatistics();
+  }).then(function(statistics) {
+    projectPublicationsText.innerHTML = statistics.getPublicationCount();
     return ServerConnector.getLoggedUser();
   }).then(function(user) {
     self.showUserProfilePage(user);
diff --git a/frontend-js/src/main/js/map/data/Project.js b/frontend-js/src/main/js/map/data/Project.js
index 8abcdd1b5265bc3c8432ce6b75c092cc4cdeb505..85c8b64da14a8553eceaf4cf340c7ba1c023a057 100644
--- a/frontend-js/src/main/js/map/data/Project.js
+++ b/frontend-js/src/main/js/map/data/Project.js
@@ -5,6 +5,8 @@ var ObjectWithListeners = require('../../ObjectWithListeners');
 var Annotation = require("./Annotation");
 var Model = require('./MapModel');
 
+var logger = require('../../logger');
+
 function Project(data) {
   // call super constructor
   ObjectWithListeners.call(this);
@@ -53,8 +55,6 @@ Project.prototype.loadFromData = function(data) {
     this.setOrganism(data.organism);
     this.setPublicationCount(data.publicationCount);
 
-    this.setModel(new Model(data.map));
-
     this.callListeners("onreload");
   }
 };
diff --git a/frontend-js/src/main/js/map/data/ProjectStatistics.js b/frontend-js/src/main/js/map/data/ProjectStatistics.js
index d905df46d6122a4f7b4b30f4360a90da862f0bba..e30fe8b0cbb34f7021b6e3fabec5dd60cc5bda45 100644
--- a/frontend-js/src/main/js/map/data/ProjectStatistics.js
+++ b/frontend-js/src/main/js/map/data/ProjectStatistics.js
@@ -12,6 +12,7 @@ function ProjectStatistics(data, configuration) {
 
   this.setReactionAnnotations(data.reactionAnnotations, configuration);
   this.setElementAnnotations(data.elementAnnotations, configuration);
+  this.setPublicationCount(data.publications, configuration);
 }
 
 ProjectStatistics.prototype = Object.create(ObjectWithListeners.prototype);
@@ -49,4 +50,11 @@ ProjectStatistics.prototype.getElementAnnotations = function() {
   return this._elementAnnotations;
 };
 
+ProjectStatistics.prototype.setPublicationCount = function(count) {
+  this._publicationsCount = count;
+};
+ProjectStatistics.prototype.getPublicationCount = function() {
+  return this._publicationsCount;
+};
+
 module.exports = ProjectStatistics;
diff --git a/frontend-js/src/test/js/ServerConnector-test.js b/frontend-js/src/test/js/ServerConnector-test.js
index a4bfb5cc62b4a8e0766b4cb2679789abf7e20a5f..730bca8fa4bf409b466d4fc8e62d3f2e90c18eac 100644
--- a/frontend-js/src/test/js/ServerConnector-test.js
+++ b/frontend-js/src/test/js/ServerConnector-test.js
@@ -9,6 +9,7 @@ var HttpStatus = require('http-status-codes');
 var Alias = require('../../main/js/map/data/Alias');
 var Configuration = require('../../main/js/Configuration');
 var LayoutAlias = require('../../main/js/map/data/LayoutAlias');
+var MapModel = require('../../main/js/map/data/MapModel');
 var NetworkError = require('../../main/js/NetworkError');
 var Project = require('../../main/js/map/data/Project');
 var Reaction = require('../../main/js/map/data/Reaction');
@@ -34,6 +35,13 @@ describe('ServerConnector', function() {
     });
   });
 
+  it('getModels', function() {
+    return ServerConnector.getModels("sample").then(function(models) {
+      assert.equal(1, models.length);
+      assert.ok(models[0] instanceof MapModel);
+    });
+  });
+
   it('getPublications', function() {
     return ServerConnector.getPublications().then(function(result) {
       assert.equal(result.totalSize, 1);
diff --git a/frontend-js/src/test/js/gui/OverviewDialog-test.js b/frontend-js/src/test/js/gui/OverviewDialog-test.js
index f38ec2696df1b51fd8ef8380b736ced13285ad12..02fd8ab3ae0fc51989d32cce3beb388b34976e03 100644
--- a/frontend-js/src/test/js/gui/OverviewDialog-test.js
+++ b/frontend-js/src/test/js/gui/OverviewDialog-test.js
@@ -15,8 +15,8 @@ var logger = require('../logger');
 describe('OverviewDialog', function() {
 
   it('open image', function() {
-    return ServerConnector.readFile("testFiles/projectWithImages.json").then(function(fileContent) {
-      var project = new Project(JSON.parse(fileContent));
+    helper.setUrl("http://test/?id=complex_model_with_images");
+    return ServerConnector.getProject().then(function(project) {
       var options = helper.createOptions(project);
       var map = new CustomMap(options);
 
@@ -31,8 +31,8 @@ describe('OverviewDialog', function() {
   });
 
   it('open invalid image', function() {
-    return ServerConnector.readFile("testFiles/projectWithImages.json").then(function(fileContent) {
-      var project = new Project(JSON.parse(fileContent));
+    helper.setUrl("http://test/?id=complex_model_with_images");
+    return ServerConnector.getProject().then(function(project) {
       var options = helper.createOptions(project);
       var map = new CustomMap(options);
 
@@ -48,8 +48,8 @@ describe('OverviewDialog', function() {
 
   describe('openLink', function() {
     it('link to map', function() {
-      return ServerConnector.readFile("testFiles/projectWithImages.json").then(function(fileContent) {
-        var project = new Project(JSON.parse(fileContent));
+      helper.setUrl("http://test/?id=complex_model_with_images");
+      return ServerConnector.getProject().then(function(project) {
         var options = helper.createOptions(project);
         var map = new CustomMap(options);
 
diff --git a/frontend-js/src/test/js/map/data/Project-test.js b/frontend-js/src/test/js/map/data/Project-test.js
index 169244b48a1131b378b33f36307fc6e0fd9efd62..e2857d6e12091c92a1132fc01f45f5e7cbf5881b 100644
--- a/frontend-js/src/test/js/map/data/Project-test.js
+++ b/frontend-js/src/test/js/map/data/Project-test.js
@@ -8,70 +8,38 @@ var chai = require('chai');
 var assert = chai.assert;
 
 describe('Project', function() {
-  it("contructor", function() {
-    return ServerConnector.readFile("testFiles/project.json").then(function(res) {
-      var project = new Project(res);
-      assert.ok(project);
-
-      assert.equal(project.getVersion(), "0");
-      assert.equal(project.getId(), 14898);
-      assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
-      assert.equal(project.getProjectId(), "sample");
-      assert.equal(project.getDescription(), "");
-      assert.deepEqual(project.getOverviewImages(), []);
-
-      var model = project.getModel();
-      assert.equal(model.getName(), "UNKNOWN DISEASE MAP2");
-      assert.equal(model.getId(), 15781);
-      assert.equal(model.getTileSize(), 256);
-      assert.equal(model.getWidth(), 1305);
-      assert.equal(model.getHeight(), 473);
-      assert.equal(model.getMinZoom(), 2);
-      assert.equal(model.getMaxZoom(), 5);
-      assert.equal(model.getLayoutsData().length, 3);
-
-      assert.equal(model.getCenterLatLng().lat(), 79.18277721779353);
-      assert.equal(model.getCenterLatLng().lng(), -135.06093781915757);
-      assert.equal(model.getTopLeftLatLng().lat(), 85.05112877980659);
-      assert.equal(model.getTopLeftLatLng().lng(), -180.0);
-      assert.equal(model.getBottomRightLatLng().lat(), 81.26928406550978);
-      assert.equal(model.getBottomRightLatLng().lng(), -90.0);
-
-      assert.equal(logger.getWarnings().length, 0);
+  describe("constructor", function() {
+    it("default", function() {
+      return ServerConnector.readFile("testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&").then(function(res) {
+        var project = new Project(res);
+        assert.ok(project);
+
+        assert.equal(project.getVersion(), "0");
+        assert.equal(project.getId(), 14898);
+        assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
+        assert.equal(project.getProjectId(), "sample");
+        assert.equal(project.getDescription(), "");
+        assert.deepEqual(project.getOverviewImages(), []);
+
+        assert.equal(logger.getWarnings().length, 0);
+      });
     });
-  });
-  it("contructor from Project obj", function() {
-    return ServerConnector.readFile("testFiles/project.json").then(function(res) {
-      var tmpProject = new Project(res);
-
-      var project = new Project(tmpProject);
-      assert.ok(project);
-
-      assert.equal(project.getVersion(), "0");
-      assert.equal(project.getId(), 14898);
-      assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
-      assert.equal(project.getProjectId(), "sample");
-      assert.equal(project.getDescription(), "");
-      assert.deepEqual(project.getOverviewImages(), []);
-
-      var model = project.getModel();
-      assert.equal(model.getName(), "UNKNOWN DISEASE MAP2");
-      assert.equal(model.getId(), 15781);
-      assert.equal(model.getTileSize(), 256);
-      assert.equal(model.getWidth(), 1305);
-      assert.equal(model.getHeight(), 473);
-      assert.equal(model.getMinZoom(), 2);
-      assert.equal(model.getMaxZoom(), 5);
-      assert.equal(model.getLayoutsData().length, 3);
-
-      assert.equal(model.getCenterLatLng().lat(), 79.18277721779353);
-      assert.equal(model.getCenterLatLng().lng(), -135.06093781915757);
-      assert.equal(model.getTopLeftLatLng().lat(), 85.05112877980659);
-      assert.equal(model.getTopLeftLatLng().lng(), -180.0);
-      assert.equal(model.getBottomRightLatLng().lat(), 81.26928406550978);
-      assert.equal(model.getBottomRightLatLng().lng(), -90.0);
-
-      assert.equal(logger.getWarnings().length, 0);
+    it("from Project obj", function() {
+      return ServerConnector.readFile("testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&").then(function(res) {
+        var tmpProject = new Project(res);
+
+        var project = new Project(tmpProject);
+        assert.ok(project);
+
+        assert.equal(project.getVersion(), "0");
+        assert.equal(project.getId(), 14898);
+        assert.equal(project.getName(), "UNKNOWN DISEASE MAP");
+        assert.equal(project.getProjectId(), "sample");
+        assert.equal(project.getDescription(), "");
+        assert.deepEqual(project.getOverviewImages(), []);
+
+        assert.equal(logger.getWarnings().length, 0);
+      });
     });
   });
 });
diff --git a/frontend-js/src/test/js/minerva-test.js b/frontend-js/src/test/js/minerva-test.js
index 9425790ab9708720eff2d41940ace5093fffc956..6d989ae49367d46f79e121cd6197df6d322d0d2f 100644
--- a/frontend-js/src/test/js/minerva-test.js
+++ b/frontend-js/src/test/js/minerva-test.js
@@ -55,8 +55,8 @@ describe('minerva global', function() {
   });
 
   it('create with overview', function() {
-    return ServerConnectorMock.readFile("testFiles/projectWithImages.json").then(function(fileContent) {
-      var project = new Project(JSON.parse(fileContent));
+    helper.setUrl("http://test/?id=complex_model_with_images");
+    return ServerConnectorMock.getProject().then(function(project) {
       var options = helper.createOptions(project);
 
       return minerva.create(options);
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/models/all/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/models/all/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..f71a795beacd84a38018bf292dc4d7906885f882
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/models/all/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"version":null,"name":"main","idObject":19397,"tileSize":256,"width":495,"height":357,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17987,"modelId":19397,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":17988,"modelId":19397,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":17989,"modelId":19397,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty0","creator":"","inputDataAvailable":"false"}],"submodels":[{"version":null,"name":"s3","idObject":19399,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17978,"modelId":19399,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested3","creator":"","inputDataAvailable":"false"},{"idObject":17979,"modelId":19399,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal3","creator":"","inputDataAvailable":"false"},{"idObject":17980,"modelId":19399,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty3","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s2","idObject":19400,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17984,"modelId":19400,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested2","creator":"","inputDataAvailable":"false"},{"idObject":17985,"modelId":19400,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal2","creator":"","inputDataAvailable":"false"},{"idObject":17986,"modelId":19400,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty2","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s1","idObject":19398,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":17981,"modelId":19398,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested1","creator":"","inputDataAvailable":"false"},{"idObject":17982,"modelId":19398,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal1","creator":"","inputDataAvailable":"false"},{"idObject":17983,"modelId":19398,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty1","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0},"submodelType":"PATHWAY"}],"centerLatLng":{"lat":79.18840067864828,"lng":-135.0909090909091},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.71754541589858,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s3","idObject":19399,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17978,"modelId":19399,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested3","creator":"","inputDataAvailable":"false"},{"idObject":17979,"modelId":19399,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal3","creator":"","inputDataAvailable":"false"},{"idObject":17980,"modelId":19399,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty3","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s2","idObject":19400,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17984,"modelId":19400,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested2","creator":"","inputDataAvailable":"false"},{"idObject":17985,"modelId":19400,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal2","creator":"","inputDataAvailable":"false"},{"idObject":17986,"modelId":19400,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty2","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s1","idObject":19398,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":17981,"modelId":19398,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested1","creator":"","inputDataAvailable":"false"},{"idObject":17982,"modelId":19398,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal1","creator":"","inputDataAvailable":"false"},{"idObject":17983,"modelId":19398,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty1","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0},"submodelType":"UNKNOWN"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/statistics/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/statistics/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..0e57e7d5d1106a9458b581f9737c13c30df655a7
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/statistics/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+{"reactionAnnotations":{"UNKNOWN":0,"MI_R_BASE_SEQUENCE":0,"WORM_BASE":0,"COG":0,"HGNC":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"CHEBI":0,"DRUGBANK_TARGET_V4":0,"KEGG_ORTHOLOGY":0,"KEGG_COMPOUND":0,"PUBMED":0,"PHARM":0,"CAS":0,"REFSEQ":0,"WIKIPATHWAYS":0,"UNIPROT_ISOFORM":0,"OMIM":0,"UNIGENE":0,"TOXICOGENOMIC_CHEMICAL":0,"MESH_2012":0,"WIKIPEDIA":0,"HGNC_SYMBOL":0,"ENTREZ":0,"MI_R_BASE_MATURE_SEQUENCE":0,"CHEMBL_COMPOUND":0,"MGD":0,"PANTHER":0,"GO":0,"UNIPROT":0,"SGD":0,"WIKIDATA":0,"CCDS":0,"PUBCHEM":0,"EC":0,"HMDB":0,"INTERPRO":0,"DRUGBANK":0,"KEGG_PATHWAY":0,"TAXONOMY":0,"ENSEMBL_PLANTS":0,"TAIR_LOCUS":0,"KEGG_GENES":0,"REACTOME":0,"ENSEMBL":0,"KEGG_REACTION":0,"PUBCHEM_SUBSTANCE":0,"CHEMSPIDER":0,"PFAM":0,"CHEMBL_TARGET":0},"elementAnnotations":{"UNKNOWN":0,"MI_R_BASE_SEQUENCE":0,"WORM_BASE":0,"COG":0,"HGNC":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"CHEBI":0,"DRUGBANK_TARGET_V4":0,"KEGG_ORTHOLOGY":0,"KEGG_COMPOUND":0,"PUBMED":0,"PHARM":0,"CAS":0,"REFSEQ":0,"WIKIPATHWAYS":0,"UNIPROT_ISOFORM":0,"OMIM":0,"UNIGENE":0,"TOXICOGENOMIC_CHEMICAL":0,"MESH_2012":0,"WIKIPEDIA":0,"HGNC_SYMBOL":0,"ENTREZ":0,"MI_R_BASE_MATURE_SEQUENCE":0,"CHEMBL_COMPOUND":0,"MGD":0,"PANTHER":0,"GO":0,"UNIPROT":0,"SGD":0,"WIKIDATA":0,"CCDS":0,"PUBCHEM":0,"EC":0,"HMDB":0,"INTERPRO":0,"DRUGBANK":0,"KEGG_PATHWAY":0,"TAXONOMY":0,"ENSEMBL_PLANTS":0,"TAIR_LOCUS":0,"KEGG_GENES":0,"REACTOME":0,"ENSEMBL":0,"KEGG_REACTION":0,"PUBCHEM_SUBSTANCE":0,"CHEMSPIDER":0,"PFAM":0,"CHEMBL_TARGET":0},"publications":0}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/token=MOCK_TOKEN_ID&
index e8518f0cb3b6d40abeee366be090671826e24444..9693fbe4938f164fba86283f3d950368e5bfc432 100644
--- a/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_images/token=MOCK_TOKEN_ID&
@@ -1 +1 @@
-{"version":"0","disease":null,"organism":null,"idObject":18115,"name":"UNKNOWN DISEASE MAP","projectId":"complex_model_with_images","description":"","map":{"version":null,"name":"main","idObject":19397,"tileSize":256,"width":495,"height":357,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17987,"modelId":19397,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":17988,"modelId":19397,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":17989,"modelId":19397,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty0","creator":"","inputDataAvailable":"false"}],"submodels":[{"version":null,"name":"s3","idObject":19399,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17978,"modelId":19399,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested3","creator":"","inputDataAvailable":"false"},{"idObject":17979,"modelId":19399,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal3","creator":"","inputDataAvailable":"false"},{"idObject":17980,"modelId":19399,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty3","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s2","idObject":19400,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":17984,"modelId":19400,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested2","creator":"","inputDataAvailable":"false"},{"idObject":17985,"modelId":19400,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal2","creator":"","inputDataAvailable":"false"},{"idObject":17986,"modelId":19400,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty2","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s1","idObject":19398,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":17981,"modelId":19398,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested1","creator":"","inputDataAvailable":"false"},{"idObject":17982,"modelId":19398,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal1","creator":"","inputDataAvailable":"false"},{"idObject":17983,"modelId":19398,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty1","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0},"submodelType":"PATHWAY"}],"centerLatLng":{"lat":79.18840067864828,"lng":-135.0909090909091},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.71754541589858,"lng":-90.0},"submodelType":"UNKNOWN"},"publicationCount":0,"overviewImageViews":[{"idObject":1261,"filename":"fbdbe43de73fe38f62889b89cb863adb/sub_image.png","width":963,"height":639,"links":[{"idObject":2369,"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":1,"latLng":{"lat":84.89177465079632,"lng":-161.8181818181818},"modelLinkId":19397,"imageLinkId":null,"query":null,"type":"OverviewModelLink"}]},{"idObject":1262,"filename":"fbdbe43de73fe38f62889b89cb863adb/test.png","width":963,"height":639,"links":[{"idObject":2370,"polygon":[{"x":10.0,"y":10.0},{"x":100.0,"y":10.0},{"x":100.0,"y":100.0},{"x":10.0,"y":100.0}],"zoomLevel":null,"latLng":null,"modelLinkId":null,"imageLinkId":1261,"query":null,"type":"OverviewImageLink"},{"idObject":2371,"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":0,"latLng":{"lat":84.89177465079632,"lng":-178.1818181818182},"modelLinkId":19397,"imageLinkId":null,"query":null,"type":"OverviewModelLink"}]}],"topOverviewImage":{"idObject":1262,"filename":"fbdbe43de73fe38f62889b89cb863adb/test.png","width":963,"height":639,"links":[{"idObject":2370,"polygon":[{"x":10.0,"y":10.0},{"x":100.0,"y":10.0},{"x":100.0,"y":100.0},{"x":10.0,"y":100.0}],"zoomLevel":null,"latLng":null,"modelLinkId":null,"imageLinkId":1261,"query":null,"type":"OverviewImageLink"},{"idObject":2371,"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":0,"latLng":{"lat":84.89177465079632,"lng":-178.1818181818182},"modelLinkId":19397,"imageLinkId":null,"query":null,"type":"OverviewModelLink"}]}}
\ No newline at end of file
+{"version":"0","disease":null,"organism":null,"idObject":18115,"name":"UNKNOWN DISEASE MAP","projectId":"complex_model_with_images","description":"","overviewImageViews":[{"idObject":1261,"filename":"fbdbe43de73fe38f62889b89cb863adb/sub_image.png","width":963,"height":639,"links":[{"idObject":2369,"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":1,"latLng":{"lat":84.89177465079632,"lng":-161.8181818181818},"modelLinkId":19397,"imageLinkId":null,"query":null,"type":"OverviewModelLink"}]},{"idObject":1262,"filename":"fbdbe43de73fe38f62889b89cb863adb/test.png","width":963,"height":639,"links":[{"idObject":2370,"polygon":[{"x":10.0,"y":10.0},{"x":100.0,"y":10.0},{"x":100.0,"y":100.0},{"x":10.0,"y":100.0}],"zoomLevel":null,"latLng":null,"modelLinkId":null,"imageLinkId":1261,"query":null,"type":"OverviewImageLink"},{"idObject":2371,"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":0,"latLng":{"lat":84.89177465079632,"lng":-178.1818181818182},"modelLinkId":19397,"imageLinkId":null,"query":null,"type":"OverviewModelLink"}]}],"topOverviewImage":{"idObject":1262,"filename":"fbdbe43de73fe38f62889b89cb863adb/test.png","width":963,"height":639,"links":[{"idObject":2370,"polygon":[{"x":10.0,"y":10.0},{"x":100.0,"y":10.0},{"x":100.0,"y":100.0},{"x":10.0,"y":100.0}],"zoomLevel":null,"latLng":null,"modelLinkId":null,"imageLinkId":1261,"query":null,"type":"OverviewImageLink"},{"idObject":2371,"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":0,"latLng":{"lat":84.89177465079632,"lng":-178.1818181818182},"modelLinkId":19397,"imageLinkId":null,"query":null,"type":"OverviewModelLink"}]}}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/all/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/all/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..19fa38ecdf18b5a74896e1113d84f726663b9f9b
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/models/all/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"version":null,"name":"main","idObject":16728,"tileSize":256,"width":515,"height":362,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":14959,"modelId":16728,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":14960,"modelId":16728,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":14961,"modelId":16728,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty0","creator":"","inputDataAvailable":"false"},{"idObject":18083,"modelId":16728,"name":"C:\\fakepath\\a.txt","description":"","status":"OK","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/.18083","creator":"","inputDataAvailable":"true"}],"submodels":[{"version":null,"name":"s1","idObject":16729,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":14953,"modelId":16729,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested3","creator":"","inputDataAvailable":"false"},{"idObject":14954,"modelId":16729,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal3","creator":"","inputDataAvailable":"false"},{"idObject":14955,"modelId":16729,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty3","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0},"submodelType":"PATHWAY"},{"version":null,"name":"s2","idObject":16731,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":14956,"modelId":16731,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested1","creator":"","inputDataAvailable":"false"},{"idObject":14957,"modelId":16731,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal1","creator":"","inputDataAvailable":"false"},{"idObject":14958,"modelId":16731,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty1","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s3","idObject":16730,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":14950,"modelId":16730,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested2","creator":"","inputDataAvailable":"false"},{"idObject":14951,"modelId":16730,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal2","creator":"","inputDataAvailable":"false"},{"idObject":14952,"modelId":16730,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty2","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0},"submodelType":"UNKNOWN"}],"centerLatLng":{"lat":79.18773841616675,"lng":-135.0873786407767},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":75.1456787592211,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s1","idObject":16729,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":14953,"modelId":16729,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested3","creator":"","inputDataAvailable":"false"},{"idObject":14954,"modelId":16729,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal3","creator":"","inputDataAvailable":"false"},{"idObject":14955,"modelId":16729,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty3","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s2","idObject":16731,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":14956,"modelId":16731,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested1","creator":"","inputDataAvailable":"false"},{"idObject":14957,"modelId":16731,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal1","creator":"","inputDataAvailable":"false"},{"idObject":14958,"modelId":16731,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty1","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s3","idObject":16730,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":14950,"modelId":16730,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested2","creator":"","inputDataAvailable":"false"},{"idObject":14951,"modelId":16730,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal2","creator":"","inputDataAvailable":"false"},{"idObject":14952,"modelId":16730,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty2","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0},"submodelType":"UNKNOWN"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/token=MOCK_TOKEN_ID&
index c5458476d93a09c500629a6926e4ed1fc194db12..b1da9104535a9829b0168df81a6e76e5ad56ebe0 100644
--- a/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/projects/complex_model_with_submaps/token=MOCK_TOKEN_ID&
@@ -1 +1 @@
-{"version":"0","disease":null,"organism":null,"idObject":15763,"name":"UNKNOWN DISEASE MAP","projectId":"complex_model_with_submaps","description":"","map":{"version":null,"name":"main","idObject":16728,"tileSize":256,"width":515,"height":362,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":14959,"modelId":16728,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":14960,"modelId":16728,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":14961,"modelId":16728,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty0","creator":"","inputDataAvailable":"false"},{"idObject":18083,"modelId":16728,"name":"C:\\fakepath\\a.txt","description":"","status":"OK","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/.18083","creator":"","inputDataAvailable":"true"}],"submodels":[{"version":null,"name":"s1","idObject":16729,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":14953,"modelId":16729,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested3","creator":"","inputDataAvailable":"false"},{"idObject":14954,"modelId":16729,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal3","creator":"","inputDataAvailable":"false"},{"idObject":14955,"modelId":16729,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty3","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0},"submodelType":"PATHWAY"},{"version":null,"name":"s2","idObject":16731,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":14956,"modelId":16731,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested1","creator":"","inputDataAvailable":"false"},{"idObject":14957,"modelId":16731,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal1","creator":"","inputDataAvailable":"false"},{"idObject":14958,"modelId":16731,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty1","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0},"submodelType":"UNKNOWN"},{"version":null,"name":"s3","idObject":16730,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"idObject":14950,"modelId":16730,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_nested2","creator":"","inputDataAvailable":"false"},{"idObject":14951,"modelId":16730,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_normal2","creator":"","inputDataAvailable":"false"},{"idObject":14952,"modelId":16730,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"0e6072e4c8d73a05d8bd8ec873761725/_empty2","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0},"submodelType":"UNKNOWN"}],"centerLatLng":{"lat":79.18773841616675,"lng":-135.0873786407767},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":75.1456787592211,"lng":-90.0},"submodelType":"UNKNOWN"},"publicationCount":0,"overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
+{"version":"0","disease":null,"organism":null,"idObject":15763,"name":"UNKNOWN DISEASE MAP","projectId":"complex_model_with_submaps","description":"","overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/drug_target_sample/models/all/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/drug_target_sample/models/all/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..467d548b152ac46815ebc2a84145cc57e5cf5726
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/drug_target_sample/models/all/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"version":null,"name":"UNKNOWN DISEASE MAP","idObject":20637,"tileSize":256,"width":1305,"height":473,"minZoom":2,"maxZoom":5,"layouts":[{"idObject":19771,"modelId":20637,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"77aacd78e20c6a6610f696eb1f1aa4b0/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":19772,"modelId":20637,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"77aacd78e20c6a6610f696eb1f1aa4b0/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":19773,"modelId":20637,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"77aacd78e20c6a6610f696eb1f1aa4b0/_empty0","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18277721779353,"lng":-135.06093781915757},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":81.26928406550978,"lng":-90.0},"submodelType":"UNKNOWN"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/drug_target_sample/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/drug_target_sample/token=MOCK_TOKEN_ID&
index 685f9b480c96e79a9b15dcbc156de9be0b8e0d01..d75e17d06d3be7226cd2b024dec6fa18a18ddc46 100644
--- a/frontend-js/testFiles/apiCalls/projects/drug_target_sample/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/projects/drug_target_sample/token=MOCK_TOKEN_ID&
@@ -1 +1 @@
-{"version":"0","disease":null,"organism":{"resource":"9606","link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=9606","id":1104514,"type":"TAXONOMY"},"idObject":19186,"name":"UNKNOWN DISEASE MAP","projectId":"drug_target_sample","description":"","map":{"version":null,"name":"UNKNOWN DISEASE MAP","idObject":20637,"tileSize":256,"width":1305,"height":473,"minZoom":2,"maxZoom":5,"layouts":[{"idObject":19771,"modelId":20637,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"77aacd78e20c6a6610f696eb1f1aa4b0/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":19772,"modelId":20637,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"77aacd78e20c6a6610f696eb1f1aa4b0/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":19773,"modelId":20637,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"77aacd78e20c6a6610f696eb1f1aa4b0/_empty0","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.18277721779353,"lng":-135.06093781915757},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":81.26928406550978,"lng":-90.0},"submodelType":"UNKNOWN"},"publicationCount":1,"overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
+{"version":"0","disease":null,"organism":{"resource":"9606","link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=9606","id":1104514,"type":"TAXONOMY"},"idObject":19186,"name":"UNKNOWN DISEASE MAP","projectId":"drug_target_sample","description":"","overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/empty/models/all/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/empty/models/all/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..f8279f50e7be0d3d028d263f8b48e72c2d1263cc
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/empty/models/all/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"version":null,"name":"UNKNOWN DISEASE MAP","idObject":20638,"tileSize":256,"width":600,"height":400,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":19774,"modelId":20638,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"a2e4822a98337283e39f7b60acf85ec9/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":19775,"modelId":20638,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"a2e4822a98337283e39f7b60acf85ec9/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":19776,"modelId":20638,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"a2e4822a98337283e39f7b60acf85ec9/_empty0","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.17133464081945,"lng":-135.0},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":75.95934455387827,"lng":-90.0},"submodelType":"UNKNOWN"}]
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/empty/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/empty/token=MOCK_TOKEN_ID&
index 077f4046876b04b2dfe564856ee549086d9e321c..6660298ee7b57a49c063c5521f5afde74fc2d644 100644
--- a/frontend-js/testFiles/apiCalls/projects/empty/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/projects/empty/token=MOCK_TOKEN_ID&
@@ -1 +1 @@
-{"version":"0","disease":null,"organism":null,"idObject":19187,"name":"UNKNOWN DISEASE MAP","projectId":"empty","description":"","map":{"version":null,"name":"UNKNOWN DISEASE MAP","idObject":20638,"tileSize":256,"width":600,"height":400,"minZoom":2,"maxZoom":4,"layouts":[{"idObject":19774,"modelId":20638,"name":"Pathways and compartments","description":null,"status":"Not available","progress":"0.00","directory":"a2e4822a98337283e39f7b60acf85ec9/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":19775,"modelId":20638,"name":"Network","description":null,"status":"Not available","progress":"0.00","directory":"a2e4822a98337283e39f7b60acf85ec9/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":19776,"modelId":20638,"name":"Empty","description":null,"status":"Not available","progress":"0.00","directory":"a2e4822a98337283e39f7b60acf85ec9/_empty0","creator":"","inputDataAvailable":"false"}],"submodels":[],"centerLatLng":{"lat":79.17133464081945,"lng":-135.0},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":75.95934455387827,"lng":-90.0},"submodelType":"UNKNOWN"},"publicationCount":0,"overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
+{"version":"0","disease":null,"organism":null,"idObject":19187,"name":"UNKNOWN DISEASE MAP","projectId":"empty","description":"","overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/models/all/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/models/all/token=MOCK_TOKEN_ID&
new file mode 100644
index 0000000000000000000000000000000000000000..ffb8ec95f2a609c97a1b0d277e0062d9dea90941
--- /dev/null
+++ b/frontend-js/testFiles/apiCalls/projects/sample/models/all/token=MOCK_TOKEN_ID&
@@ -0,0 +1 @@
+[{"version":null,"name":"UNKNOWN DISEASE MAP","idObject":15781,"tileSize":256,"width":1305,"height":473,"minZoom":2,"maxZoom":5,"layouts":[{"idObject":14081,"modelId":15781,"name":"Pathways and compartments","description":"","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":14082,"modelId":15781,"name":"Network","description":"","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":14083,"modelId":15781,"name":"Empty","description":"","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_empty0","creator":"","inputDataAvailable":"false"},{"idObject":18076,"modelId":15781,"name":"C:\\fakepath\\test.txt","description":"xxx","status":"OK","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/.18076","creator":"","inputDataAvailable":"true"},{"idObject":18077,"modelId":15781,"name":"xxx","description":"yyy","status":"OK","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/.18077","creator":"","inputDataAvailable":"true"}],"submodels":[],"centerLatLng":{"lat":79.18277721779353,"lng":-135.06093781915757},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":81.26928406550978,"lng":-90.0},"submodelType":"UNKNOWN"}]
\ 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&
index 929cc68f9c59295ea64afef542c1b3a3ef16caa7..e486585b45d892ed464f93acc9ccc8d3eeed2fff 100644
--- a/frontend-js/testFiles/apiCalls/projects/sample/statistics/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/projects/sample/statistics/token=MOCK_TOKEN_ID&
@@ -1 +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
+{"reactionAnnotations":{"UNKNOWN":0,"MI_R_BASE_SEQUENCE":0,"WORM_BASE":0,"COG":0,"HGNC":0,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"CHEBI":0,"DRUGBANK_TARGET_V4":0,"KEGG_ORTHOLOGY":0,"KEGG_COMPOUND":0,"PUBMED":1,"PHARM":0,"CAS":0,"REFSEQ":0,"WIKIPATHWAYS":0,"UNIPROT_ISOFORM":0,"OMIM":0,"UNIGENE":0,"TOXICOGENOMIC_CHEMICAL":0,"MESH_2012":0,"WIKIPEDIA":0,"HGNC_SYMBOL":0,"ENTREZ":0,"MI_R_BASE_MATURE_SEQUENCE":0,"CHEMBL_COMPOUND":0,"MGD":0,"PANTHER":0,"GO":0,"UNIPROT":0,"SGD":0,"WIKIDATA":0,"CCDS":0,"PUBCHEM":0,"EC":0,"HMDB":0,"INTERPRO":0,"DRUGBANK":0,"KEGG_PATHWAY":0,"TAXONOMY":0,"ENSEMBL_PLANTS":0,"TAIR_LOCUS":0,"KEGG_GENES":0,"REACTOME":2,"ENSEMBL":0,"KEGG_REACTION":0,"PUBCHEM_SUBSTANCE":0,"CHEMSPIDER":0,"PFAM":0,"CHEMBL_TARGET":0},"elementAnnotations":{"UNKNOWN":0,"MI_R_BASE_SEQUENCE":0,"WORM_BASE":0,"COG":0,"HGNC":1,"MIR_TAR_BASE_MATURE_SEQUENCE":0,"CHEBI":0,"DRUGBANK_TARGET_V4":0,"KEGG_ORTHOLOGY":0,"KEGG_COMPOUND":0,"PUBMED":0,"PHARM":1,"CAS":0,"REFSEQ":5,"WIKIPATHWAYS":0,"UNIPROT_ISOFORM":0,"OMIM":0,"UNIGENE":0,"TOXICOGENOMIC_CHEMICAL":0,"MESH_2012":0,"WIKIPEDIA":0,"HGNC_SYMBOL":0,"ENTREZ":2,"MI_R_BASE_MATURE_SEQUENCE":0,"CHEMBL_COMPOUND":0,"MGD":0,"PANTHER":0,"GO":0,"UNIPROT":0,"SGD":0,"WIKIDATA":0,"CCDS":0,"PUBCHEM":0,"EC":0,"HMDB":0,"INTERPRO":0,"DRUGBANK":0,"KEGG_PATHWAY":0,"TAXONOMY":0,"ENSEMBL_PLANTS":0,"TAIR_LOCUS":0,"KEGG_GENES":1,"REACTOME":4,"ENSEMBL":0,"KEGG_REACTION":0,"PUBCHEM_SUBSTANCE":0,"CHEMSPIDER":0,"PFAM":0,"CHEMBL_TARGET":0},"publications":1}
\ No newline at end of file
diff --git a/frontend-js/testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID& b/frontend-js/testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&
index de46921fd2d951aa249b764d214c912789761b19..2854eb409636931a81242b5c1ea33fbc3b784969 100644
--- a/frontend-js/testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&
+++ b/frontend-js/testFiles/apiCalls/projects/sample/token=MOCK_TOKEN_ID&
@@ -1 +1 @@
-{"version":"0","disease":{"resource":"D010300","link":"http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300","id":1104479,"type":"MESH_2012"},"organism":{"resource":"1570291","link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=1570291","id":1104480,"type":"TAXONOMY"},"idObject":14898,"name":"UNKNOWN DISEASE MAP","projectId":"sample","description":"","map":{"version":null,"name":"UNKNOWN DISEASE MAP","idObject":15781,"tileSize":256,"width":1305,"height":473,"minZoom":2,"maxZoom":5,"layouts":[{"idObject":14081,"modelId":15781,"name":"Pathways and compartments","description":"","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_nested0","creator":"","inputDataAvailable":"false"},{"idObject":14082,"modelId":15781,"name":"Network","description":"","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_normal0","creator":"","inputDataAvailable":"false"},{"idObject":14083,"modelId":15781,"name":"Empty","description":"","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_empty0","creator":"","inputDataAvailable":"false"},{"idObject":18076,"modelId":15781,"name":"C:\\fakepath\\test.txt","description":"xxx","status":"OK","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/.18076","creator":"","inputDataAvailable":"true"},{"idObject":18077,"modelId":15781,"name":"xxx","description":"yyy","status":"OK","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/.18077","creator":"","inputDataAvailable":"true"}],"submodels":[],"centerLatLng":{"lat":79.18277721779353,"lng":-135.06093781915757},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":81.26928406550978,"lng":-90.0},"submodelType":"UNKNOWN"},"publicationCount":1,"overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
+{"version":"0","disease":{"resource":"D010300","link":"http://bioportal.bioontology.org/ontologies/1351?p=terms&conceptid=D010300","id":1104479,"type":"MESH_2012"},"organism":{"resource":"1570291","link":"http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?mode=Info&id=1570291","id":1104480,"type":"TAXONOMY"},"idObject":14898,"name":"UNKNOWN DISEASE MAP","projectId":"sample","description":"","overviewImageViews":[],"topOverviewImage":null}
\ No newline at end of file
diff --git a/frontend-js/testFiles/project.json b/frontend-js/testFiles/project.json
deleted file mode 100644
index fa052d1df622691b47b04d680c0f29b38e866157..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/project.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"0","idObject":14898,"name":"UNKNOWN DISEASE MAP","projectId":"sample","description":"","map":{"name":"UNKNOWN DISEASE MAP2","idObject":15781,"tileSize":256,"width":1305,"height":473,"minZoom":2,"maxZoom":5,"layouts":[{"modelId":15781,"name":"Pathways and compartments","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_nested0","creator":"","inputDataAvailable":"false","idObject":14081},{"modelId":15781,"name":"Network","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_normal0","creator":"","inputDataAvailable":"false","idObject":14082},{"modelId":15781,"name":"Empty","status":"Not available","progress":"0.00","directory":"5e8ff9bf55ba3508199d22e984129be6/_empty0","creator":"","inputDataAvailable":"false","idObject":14083}],"submodels":[],"centerLatLng":{"lat":79.18277721779353,"lng":-135.06093781915757},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":81.26928406550978,"lng":-90.0}},"overviewImageViews":[]}
\ No newline at end of file
diff --git a/frontend-js/testFiles/projectWithImages.json b/frontend-js/testFiles/projectWithImages.json
deleted file mode 100644
index b989ec48df62f47ce57be130dd7028861f6240a5..0000000000000000000000000000000000000000
--- a/frontend-js/testFiles/projectWithImages.json
+++ /dev/null
@@ -1 +0,0 @@
-{"version":"0","idObject":18115,"name":"UNKNOWN DISEASE MAP","projectId":"complex_model_with_images","description":"","map":{"name":"main","idObject":19397,"tileSize":256,"width":495,"height":357,"minZoom":2,"maxZoom":3,"layouts":[{"modelId":19397,"name":"Pathways and compartments","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested0","creator":"","inputDataAvailable":"false","idObject":17987},{"modelId":19397,"name":"Network","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal0","creator":"","inputDataAvailable":"false","idObject":17988},{"modelId":19397,"name":"Empty","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty0","creator":"","inputDataAvailable":"false","idObject":17989}],"submodels":[{"name":"s2","idObject":19400,"tileSize":256,"width":451,"height":253,"minZoom":2,"maxZoom":3,"layouts":[{"modelId":19400,"name":"Pathways and compartments","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested2","creator":"","inputDataAvailable":"false","idObject":17984},{"modelId":19400,"name":"Network","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal2","creator":"","inputDataAvailable":"false","idObject":17985},{"modelId":19400,"name":"Empty","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty2","creator":"","inputDataAvailable":"false","idObject":17986}],"submodels":[],"centerLatLng":{"lat":79.19006423440219,"lng":-135.09977827050997},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":78.0903352323621,"lng":-90.0}},{"name":"s3","idObject":19399,"tileSize":256,"width":421,"height":315,"minZoom":2,"maxZoom":3,"layouts":[{"modelId":19399,"name":"Pathways and compartments","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested3","creator":"","inputDataAvailable":"false","idObject":17978},{"modelId":19399,"name":"Network","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal3","creator":"","inputDataAvailable":"false","idObject":17979},{"modelId":19399,"name":"Empty","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty3","creator":"","inputDataAvailable":"false","idObject":17980}],"submodels":[],"centerLatLng":{"lat":79.19139766235872,"lng":-135.10688836104512},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.06362505154212,"lng":-90.0}},{"name":"s1","idObject":19398,"tileSize":256,"width":571,"height":276,"minZoom":2,"maxZoom":4,"layouts":[{"modelId":19398,"name":"Pathways and compartments","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_nested1","creator":"","inputDataAvailable":"false","idObject":17981},{"modelId":19398,"name":"Network","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_normal1","creator":"","inputDataAvailable":"false","idObject":17982},{"modelId":19398,"name":"Empty","status":"Not available","progress":"0.00","directory":"fbdbe43de73fe38f62889b89cb863adb/_empty1","creator":"","inputDataAvailable":"false","idObject":17983}],"submodels":[],"centerLatLng":{"lat":79.18613072613702,"lng":-135.07880910683014},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":79.44906929997262,"lng":-90.0}}],"centerLatLng":{"lat":79.18840067864828,"lng":-135.0909090909091},"topLeftLatLng":{"lat":85.05112877980659,"lng":-180.0},"bottomRightLatLng":{"lat":74.71754541589858,"lng":-90.0}},"overviewImageViews":[{"filename":"fbdbe43de73fe38f62889b89cb863adb/sub_image.png","width":963,"height":639,"links":[{"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":1,"latLng":{"lat":84.89177465079632,"lng":-161.8181818181818},"modelLinkId":19397,"type":"OverviewModelLink","idObject":2369}],"idObject":1261},{"filename":"fbdbe43de73fe38f62889b89cb863adb/test.png","width":963,"height":639,"links":[{"polygon":[{"x":10.0,"y":10.0},{"x":100.0,"y":10.0},{"x":100.0,"y":100.0},{"x":10.0,"y":100.0}],"imageLinkId":1261,"type":"OverviewImageLink","idObject":2370},{"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":0,"latLng":{"lat":84.89177465079632,"lng":-178.1818181818182},"modelLinkId":19397,"type":"OverviewModelLink","idObject":2371}],"idObject":1262}],"topOverviewImage":{"filename":"fbdbe43de73fe38f62889b89cb863adb/test.png","width":963,"height":639,"links":[{"polygon":[{"x":10.0,"y":10.0},{"x":100.0,"y":10.0},{"x":100.0,"y":100.0},{"x":10.0,"y":100.0}],"imageLinkId":1261,"type":"OverviewImageLink","idObject":2370},{"polygon":[{"x":200.0,"y":200.0},{"x":200.0,"y":400.0},{"x":400.0,"y":400.0},{"x":400.0,"y":200.0}],"zoomLevel":0,"latLng":{"lat":84.89177465079632,"lng":-178.1818181818182},"modelLinkId":19397,"type":"OverviewModelLink","idObject":2371}],"idObject":1262}}
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
index 56071ddde9682e481a222acbb34b1021b3363bad..ac78d8b8d3665ee9c2839b91150ed323cc98d978 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
@@ -26,6 +26,7 @@ import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.services.SecurityException;
 import lcsb.mapviewer.services.interfaces.IModelService;
+import lcsb.mapviewer.services.interfaces.IProjectService;
 import lcsb.mapviewer.services.interfaces.IUserService;
 import lcsb.mapviewer.services.search.ElementMatcher;
 import lcsb.mapviewer.services.search.data.ElementIdentifier.ElementIdentifierType;
@@ -33,7 +34,7 @@ import lcsb.mapviewer.services.view.AnnotationView;
 
 @Transactional(value = "txManager")
 public abstract class BaseRestImpl {
-	
+
 	/**
 	 * Default class logger.
 	 */
@@ -42,6 +43,9 @@ public abstract class BaseRestImpl {
 	@Autowired
 	private IModelService		modelService;
 
+	@Autowired
+	private IProjectService	projectService;
+
 	@Autowired
 	private IUserService		userService;
 
@@ -262,4 +266,20 @@ public abstract class BaseRestImpl {
 		}
 	}
 
+	/**
+	 * @return the projectService
+	 * @see #projectService
+	 */
+	public IProjectService getProjectService() {
+		return projectService;
+	}
+
+	/**
+	 * @param projectService the projectService to set
+	 * @see #projectService
+	 */
+	public void setProjectService(IProjectService projectService) {
+		this.projectService = projectService;
+	}
+
 }
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java
index 8b4e0560e0a125cd69f1b7e2cb29b18c2378e795..58365826a5a547972bb6fe8a927ff2aa6c017c76 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/ProjectMetaData.java
@@ -47,10 +47,6 @@ public class ProjectMetaData implements Serializable {
 	 */
 	private String									description;
 
-	private ModelMetaData						map;
-
-	private Integer									publicationCount;
-
 	/**
 	 * List of overview images attached to this model.
 	 */
@@ -169,23 +165,6 @@ public class ProjectMetaData implements Serializable {
 		this.projectId = projectId;
 	}
 
-	/**
-	 * @return the map
-	 * @see #map
-	 */
-	public ModelMetaData getMap() {
-		return map;
-	}
-
-	/**
-	 * @param map
-	 *          the map to set
-	 * @see #map
-	 */
-	public void setMap(ModelMetaData map) {
-		this.map = map;
-	}
-
 	/**
 	 * @return the idObject
 	 * @see #idObject
@@ -236,22 +215,4 @@ public class ProjectMetaData implements Serializable {
 	public void setOrganism(Map<String, Object> organism) {
 		this.organism = organism;
 	}
-
-	/**
-	 * @return the publicationCount
-	 * @see #publicationCount
-	 */
-	public Integer getPublicationCount() {
-		return publicationCount;
-	}
-
-	/**
-	 * @param publicationCount
-	 *          the publicationCount to set
-	 * @see #publicationCount
-	 */
-	public void setPublicationCount(Integer publicationCount) {
-		this.publicationCount = publicationCount;
-	}
-
 }
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 a64ef7f781d081252867ed3badc89b2f645c2a27..6f4f9a1d17c8a19eb9d1a9963ea161389d02424a 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
@@ -129,7 +129,7 @@ public class ProjectRestImpl extends BaseRestImpl {
 			result.setVersion(model.getMapVersion());
 			result.setDescription(model.getNotes());
 
-			Set<OverviewImage> set = new HashSet<OverviewImage>();
+			Set<OverviewImage> set = new HashSet<>();
 			set.addAll(model.getOverviewImages());
 			for (OverviewImage image : model.getOverviewImages()) {
 				for (OverviewLink ol : image.getLinks()) {
@@ -144,13 +144,6 @@ public class ProjectRestImpl extends BaseRestImpl {
 				logger.warn("Cannot determine top level image. Taking first one. " + model.getOverviewImages().get(0).getFilename());
 				result.setTopOverviewImage(factory.create(model.getOverviewImages().get(0)));
 			}
-			result.setMap(new ModelMetaData(model));
-
-			List<Model> models = new ArrayList<>();
-			models.add(model);
-			models.addAll(model.getSubmodels());
-			result.setPublicationCount(publicationsRestImpl.getPublications(models).size());
-
 		}
 
 		return result;
@@ -434,6 +427,8 @@ public class ProjectRestImpl extends BaseRestImpl {
 		}
 
 		result.put("reactionAnnotations", reactionAnnotations);
+		
+		result.put("publications", publicationsRestImpl.getPublications(models).size());
 
 		return result;
 	}
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java
new file mode 100644
index 0000000000000000000000000000000000000000..1cecb23458d9dbb5021a4df738b7d44872f1474d
--- /dev/null
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelController.java
@@ -0,0 +1,44 @@
+package lcsb.mapviewer.api.projects.models;
+
+import java.util.List;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.MediaType;
+import org.springframework.web.bind.annotation.CookieValue;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import lcsb.mapviewer.api.BaseController;
+import lcsb.mapviewer.api.ObjectNotFoundException;
+import lcsb.mapviewer.common.Configuration;
+import lcsb.mapviewer.services.SecurityException;
+
+@RestController
+public class ModelController extends BaseController {
+	@Autowired
+	private ModelRestImpl modelController;
+
+	@RequestMapping(value = "/projects/{projectId:.+}/models/", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public List<ModelMetaData> getModels(//
+			@PathVariable(value = "projectId") String projectId, //
+			@CookieValue(value = Configuration.AUTH_TOKEN) String token //
+	) throws SecurityException, ObjectNotFoundException {
+		return modelController.getModels(projectId, token);
+	}
+
+	@RequestMapping(value = "/projects/{projectId:.+}/models/{modelId:.+}", method = { RequestMethod.GET }, produces = { MediaType.APPLICATION_JSON_VALUE })
+	public Object getModel(//
+			@PathVariable(value = "modelId") String modelId, //
+			@PathVariable(value = "projectId") String projectId, //
+			@CookieValue(value = Configuration.AUTH_TOKEN) String token //
+	) throws SecurityException, ObjectNotFoundException {
+		if (modelId.equals("*")) {
+			return modelController.getModels(projectId, token);
+		} else {
+			return modelController.getModel(projectId, modelId, token);
+		}
+	}
+
+}
\ No newline at end of file
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ModelMetaData.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelMetaData.java
similarity index 94%
rename from rest-api/src/main/java/lcsb/mapviewer/api/projects/ModelMetaData.java
rename to rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelMetaData.java
index 273364a57e42d047251b7e1cf358cce2bcb69a54..62181d0b379a22f618a5cb6fa1d51622a282704e 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/ModelMetaData.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelMetaData.java
@@ -1,4 +1,4 @@
-package lcsb.mapviewer.api.projects;
+package lcsb.mapviewer.api.projects.models;
 
 import java.awt.geom.Point2D;
 import java.io.Serializable;
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java
new file mode 100644
index 0000000000000000000000000000000000000000..e2a747e9973f376d5fb3dd2c05c4f6796c3d3045
--- /dev/null
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/ModelRestImpl.java
@@ -0,0 +1,58 @@
+package lcsb.mapviewer.api.projects.models;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.log4j.Logger;
+import org.springframework.transaction.annotation.Transactional;
+
+import lcsb.mapviewer.api.BaseRestImpl;
+import lcsb.mapviewer.api.ObjectNotFoundException;
+import lcsb.mapviewer.model.Project;
+import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.services.SecurityException;
+import lcsb.mapviewer.services.view.AuthenticationToken;
+
+@Transactional(value = "txManager")
+public class ModelRestImpl extends BaseRestImpl {
+
+	/**
+	 * Default class logger.
+	 */
+	@SuppressWarnings("unused")
+	private Logger logger = Logger.getLogger(ModelRestImpl.class);
+
+	public List<ModelMetaData> getModels(String projectId, String token) throws SecurityException, ObjectNotFoundException {
+		AuthenticationToken authenticationToken = getUserService().getToken(token);
+		Project project = getProjectService().getProjectByProjectId(projectId, authenticationToken);
+		if (project == null) {
+			throw new ObjectNotFoundException("Project with given id doesn't exist");
+		}
+		List<ModelMetaData> result = createData(project, authenticationToken);
+		return result;
+	}
+
+	public ModelMetaData getModel(String projectId, String modelId, String token) throws SecurityException, ObjectNotFoundException {
+		AuthenticationToken authenticationToken = getUserService().getToken(token);
+		Model model = getModelService().getLastModelByProjectId(projectId, authenticationToken);
+		Model submodel = model.getSubmodelById(modelId);
+		if (submodel == null) {
+			return null;
+		} else {
+			return new ModelMetaData(submodel);
+		}
+	}
+
+	private List<ModelMetaData> createData(Project project, AuthenticationToken token) {
+		List<ModelMetaData> result = new ArrayList<>();
+		Model model = getModelService().getLastModelByProjectId(project.getProjectId(), token);
+
+		List<Model> models = new ArrayList<>();
+		models.add(model);
+		models.addAll(model.getSubmodels());
+		for (Model model2 : models) {
+			result.add(new ModelMetaData(model2));
+		}
+		return result;
+	}
+}
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java
index ace3974815517e448e1de1e8908cd432a6c0854f..0d3e0349126edced91c82d2ad674c564cbd97505 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/projects/models/publications/PublicationsRestImpl.java
@@ -1,6 +1,7 @@
 package lcsb.mapviewer.api.projects.models.publications;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -56,7 +57,7 @@ public class PublicationsRestImpl extends BaseRestImpl {
 	@Autowired
 	private OverviewImageViewFactory factory;
 
-	public SortedMap<MiriamData, List<BioEntity>> getPublications(List<Model> models) {
+	public SortedMap<MiriamData, List<BioEntity>> getPublications(Collection<Model> models) {
 		SortedMap<MiriamData, List<BioEntity>> publications = new TreeMap<>();
 		for (Model modelData : models) {
 			for (Element element : modelData.getElements()) {
diff --git a/rest-api/src/main/resources/applicationContext-rest.xml b/rest-api/src/main/resources/applicationContext-rest.xml
index 5cbacb6fc6473c8ce69a2acb2117cc956ad83528..2642267ee9757e4925f78b5142c8022365264033 100644
--- a/rest-api/src/main/resources/applicationContext-rest.xml
+++ b/rest-api/src/main/resources/applicationContext-rest.xml
@@ -15,6 +15,7 @@
 
 	<bean id="CommentRestImpl" class="lcsb.mapviewer.api.projects.comments.CommentRestImpl"/>
 	<bean id="ProjectRestImpl" class="lcsb.mapviewer.api.projects.ProjectRestImpl"/>
+	<bean id="ModelRestImpl" class="lcsb.mapviewer.api.projects.models.ModelRestImpl"/>
 	<bean id="BioEntitiesRestImpl" class="lcsb.mapviewer.api.projects.models.bioEntities.BioEntitiesRestImpl"/>
 	<bean id="ChemicalRestImpl" class="lcsb.mapviewer.api.projects.chemicals.ChemicalRestImpl"/>
 	<bean id="ElementsRestImpl" class="lcsb.mapviewer.api.projects.models.bioEntities.elements.ElementsRestImpl"/>
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java
index 521d3701fe25873c35726f782374abdef87d39f8..243de1dad24d1043b65385b0ad480c7f711c2be0 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/ModelMetaDataTest.java
@@ -9,7 +9,7 @@ import org.junit.Test;
 
 import com.google.gson.Gson;
 
-import lcsb.mapviewer.api.projects.ModelMetaData;
+import lcsb.mapviewer.api.projects.models.ModelMetaData;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
 
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/AllModelsTests.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/AllModelsTests.java
index 58bce555cf36a931dfc0b2cc6857edcb846f6004..3cb26a74c6f9c5eded78255a02e75de3bd9b137f 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/AllModelsTests.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/AllModelsTests.java
@@ -10,7 +10,8 @@ import lcsb.mapviewer.api.projects.models.publications.AllPublicationsTests;
 @RunWith(Suite.class)
 @SuiteClasses({ //
 		AllBioeEntitiesTests.class, //
-		AllPublicationsTests.class//
+		AllPublicationsTests.class, //
+		ModelRestImplTest.class,//
 })
 public class AllModelsTests {
 
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..8340abe87ecc4061b61e2ab7a6dcd37e9a994217
--- /dev/null
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/projects/models/ModelRestImplTest.java
@@ -0,0 +1,58 @@
+package lcsb.mapviewer.api.projects.models;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.anyString;
+
+import java.util.List;
+import java.util.Map;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.Mockito;
+import org.springframework.beans.factory.annotation.Autowired;
+
+import lcsb.mapviewer.api.RestTestFunctions;
+import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.services.interfaces.IModelService;
+
+public class ModelRestImplTest extends RestTestFunctions {
+
+	@Autowired
+	ModelRestImpl _projectRestImpl;
+
+	@AfterClass
+	public static void tearDownAfterClass() throws Exception {
+	}
+
+	@Before
+	public void setUp() throws Exception {
+	}
+
+	@After
+	public void tearDown() throws Exception {
+	}
+
+	@Test
+	public void testModels() throws Exception {
+		try {
+			ModelRestImpl modelRest = createMockProjectRest("testFiles/model/sample.xml");
+			List<ModelMetaData> result = modelRest.getModels("sample", token.getId());
+			assertEquals(1, result.size());
+		} catch (Exception e) {
+			e.printStackTrace();
+			throw e;
+		}
+	}
+
+	private ModelRestImpl createMockProjectRest(String string) throws Exception {
+		Model model = super.getModelForFile(string, true);
+		IModelService mockModelService = Mockito.mock(IModelService.class);
+		Mockito.when(mockModelService.getLastModelByProjectId(anyString(), any())).thenReturn(model);
+		_projectRestImpl.setModelService(mockModelService);
+		return _projectRestImpl;
+	}
+
+}