diff --git a/frontend-js/src/main/js/ServerConnector.js b/frontend-js/src/main/js/ServerConnector.js
index 44d2c88c680b7ab6221a985455eeceeb522b263e..61e9d9d1141079e126911d30fe5a1103e2ab93aa 100644
--- a/frontend-js/src/main/js/ServerConnector.js
+++ b/frontend-js/src/main/js/ServerConnector.js
@@ -1684,6 +1684,34 @@ ServerConnector.addOverlay = function (params) {
   });
 };
 
+ServerConnector.addOverlayFromString = function(name, content) {
+  var fileName = name + ".txt";
+  var overlay = new DataOverlay({
+    name: name,
+    description: "",
+    filename: fileName
+  });
+  var fileContent = new TextEncoder("UTF8").encode(content);
+  GuiConnector.showProcessing();
+  self = this;
+  return self.getProjectId().then(function (projectid) {
+    
+    return ServerConnector.uploadFile({
+      filename: fileName,
+      content: fileContent
+    }).then(function (file) {
+      return ServerConnector.addOverlay({
+        fileId: file.id,
+        overlay: overlay,
+        projectId: self.getProjectId()
+      });
+    }).then(function (result) {
+      GuiConnector.hideProcessing();
+      return result;
+    });
+  });
+}
+
 ServerConnector.updateOverlay = function (overlay) {
   var self = this;
   var queryParams = {
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 173549cf1ecaa56ce007480ddcae3bd2cabcf5fe..e51b523d0a85bf810a38d827c5e7467011b747ac 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
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.api.projects;
 
+import java.awt.Color;
 import java.awt.geom.Path2D;
 import java.awt.geom.PathIterator;
 import java.io.ByteArrayInputStream;
@@ -29,6 +30,7 @@ import lcsb.mapviewer.api.BaseRestImpl;
 import lcsb.mapviewer.api.ObjectExistsException;
 import lcsb.mapviewer.api.ObjectNotFoundException;
 import lcsb.mapviewer.api.QueryException;
+import lcsb.mapviewer.api.projects.models.bioEntities.AllBioeEntitiesTests;
 import lcsb.mapviewer.api.projects.models.publications.PublicationsRestImpl;
 import lcsb.mapviewer.commands.ClearColorModelCommand;
 import lcsb.mapviewer.commands.ColorExtractor;
@@ -51,6 +53,7 @@ import lcsb.mapviewer.converter.zip.ZipEntryFile;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.cache.FileEntry;
 import lcsb.mapviewer.model.cache.UploadedFileEntry;
+import lcsb.mapviewer.model.map.BioEntity;
 import lcsb.mapviewer.model.map.InconsistentModelException;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.MiriamType;
@@ -329,13 +332,14 @@ public class ProjectRestImpl extends BaseRestImpl {
       String backgroundOverlayId, String overlayIds, String zoomLevel, String polygonString)
       throws SecurityException, QueryException, IOException, InvalidColorSchemaException, CommandExecutionException,
       ConverterException, InconsistentModelException {
+	  User user = getUserService().getUserByToken(token);
     Model topModel = getModelService().getLastModelByProjectId(projectId, token);
     if (topModel == null) {
       throw new ObjectNotFoundException("Project with given id doesn't exist");
     }
-
+    
     Model originalModel = topModel.getSubmodelById(modelId);
-
+        
     if (originalModel == null) {
       throw new ObjectNotFoundException("Model with given id doesn't exist");
     }
@@ -346,6 +350,26 @@ public class ProjectRestImpl extends BaseRestImpl {
     // create model bounded by the polygon
     SubModelCommand subModelCommand = new SubModelCommand(originalModel, polygon);
     Model part = subModelCommand.execute();
+    
+    //Get list of oeverlay ids
+    String overlayIdsList[] = overlayIds.split(",");
+    // Remove all colors
+    if (overlayIdsList.length > 0)
+    {
+	    
+	    for (Element element: part.getElements()){
+	    	element.setColor(Color.WHITE);
+	    }
+    }
+    // Color with overlays
+    for (String overlayId: overlayIdsList){
+    	Layout overlay = layoutService.getLayoutById(Integer.parseInt(overlayId), token);
+    	
+    	ColorSchemaReader reader = new ColorSchemaReader();
+    	Collection<ColorSchema> schemas = reader.readColorSchema(overlay.getInputData().getFileContent());
+  
+    	new ColorModelCommand(part, schemas, getUserService().getColorExtractorForUser(user)).execute();    	
+    }
 
     IConverter parser = getModelParser(handlerClass);
     InputStream is = parser.exportModelToInputStream(part);