diff --git a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
index c3c79221e18ce603f331f65360db27a913b218a4..85621deee6444c15c125e59854c7b6914daebea9 100644
--- a/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
+++ b/frontend-js/src/main/js/gui/admin/AddProjectDialog.js
@@ -291,6 +291,11 @@ AddProjectDialog.prototype.createGeneralTabContent = function () {
     defaultValue: false,
     inputName: "project-semantic-zooming"
   }));
+  table.appendChild(self.createCheckboxRow({
+    labelName: "Semantic zooming contains multiple overlays:",
+    defaultValue: false,
+    inputName: "project-semantic-zooming-contains-multiple-overlays"
+  }));
 
   var saveProjectButton = Functions.createElement({
     type: "button",
@@ -705,6 +710,7 @@ AddProjectDialog.prototype.init = function () {
     self.bindProjectUploadPreferences(user, "validateMiriam", "project-verify-annotations");
     self.bindProjectUploadPreferences(user, "cacheData", "project-cache-data");
     self.bindProjectUploadPreferences(user, "semanticZooming", "project-semantic-zooming");
+    self.bindProjectUploadPreferences(user, "semanticZoomingContainsMultipleOverlays", "project-semantic-zooming-contains-multiple-overlays");
     self.bindProjectUploadPreferences(user, "sbgn", "project-sbgn-visualization");
   });
 };
@@ -1074,6 +1080,14 @@ AddProjectDialog.prototype.isSemanticZooming = function () {
   return $("[name='project-semantic-zooming']", this.getElement()).is(':checked');
 };
 
+/**
+ *
+ * @returns {boolean}
+ */
+AddProjectDialog.prototype.isSemanticZoomingContainsMultipleOverlays = function () {
+  return $("[name='project-semantic-zooming-contains-multiple-overlays']", this.getElement()).is(':checked');
+};
+
 /**
  *
  * @param {string} filename
@@ -1145,6 +1159,7 @@ AddProjectDialog.prototype.onSaveClicked = function () {
       "mapCanvasType": self.getMapCanvasTypeId(),
       "sbgn": self.isSbgn(),
       "semantic-zoom": self.isSemanticZooming(),
+      "semantic-zoom-contains-multiple-layouts": self.isSemanticZoomingContainsMultipleOverlays(),
       "annotate": self.isAnnotateAutomatically(),
       "verify-annotations": self.isVerifyAnnotations(),
       "zip-entries": self.getZipEntries()
diff --git a/frontend-js/src/main/js/map/data/UserPreferences.js b/frontend-js/src/main/js/map/data/UserPreferences.js
index 634c42897d40282807b4ca7166b6fdf43cdc0d21..fba86c1bec960a5e282514b8dd16415fa4a4b0f4 100644
--- a/frontend-js/src/main/js/map/data/UserPreferences.js
+++ b/frontend-js/src/main/js/map/data/UserPreferences.js
@@ -66,6 +66,7 @@ UserPreferences.prototype.setProjectUpload = function (projectUpload) {
     annotateModel: projectUpload["annotate-model"],
     cacheData: projectUpload["cache-data"],
     semanticZooming: projectUpload["semantic-zooming"],
+    semanticZoomingContainsMultipleOverlays: projectUpload["semantic-zooming-contains-multiple-overlays"],
     sbgn: projectUpload["sbgn"]
   };
 };
@@ -182,7 +183,8 @@ UserPreferences.prototype.toExport = function () {
       "annotate-model": this._projectUpload.annotateModel,
       "cache-data": this._projectUpload.cacheData,
       "sbgn": this._projectUpload.sbgn,
-      "semantic-zooming": this._projectUpload.semanticZooming
+      "semantic-zooming": this._projectUpload.semanticZooming,
+      "semantic-zooming-contains-multiple-overlays":this._projectUpload.semanticZoomingContainsMultipleOverlays
     },
     "element-annotators": this._elementAnnotators,
     "element-valid-annotations": this._elementValidAnnotations,
diff --git a/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java b/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java
index 79ae0db71f0cb9965f5950ddb193d2bedce3dbe4..afe8badee0fc58ae7affcc8f91bf9660d11e7e00 100644
--- a/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java
+++ b/model/src/main/java/lcsb/mapviewer/model/user/UserAnnotationSchema.java
@@ -74,6 +74,7 @@ public class UserAnnotationSchema implements Serializable {
   private Boolean autoResizeMap = true;
 
   private Boolean semanticZooming = false;
+  private Boolean semanticZoomContainsMultipleOverlays = false;
 
   /**
    * Should map be visualized as sbgn?
@@ -528,4 +529,12 @@ public class UserAnnotationSchema implements Serializable {
     option.setValue(value);
   }
 
+  public Boolean getSemanticZoomContainsMultipleOverlays() {
+    return semanticZoomContainsMultipleOverlays;
+  }
+
+  public void setSemanticZoomContainsMultipleOverlays(Boolean semanticZoomContainsMultipleOverlays) {
+    this.semanticZoomContainsMultipleOverlays = semanticZoomContainsMultipleOverlays;
+  }
+
 }
diff --git a/persist/src/main/resources/db/migration/12.1.0~alpha.1/V12.1.0.20180830__add_user_preferences_semantic_zooming.sql b/persist/src/main/resources/db/migration/12.1.0~alpha.1/V12.1.0.20180830__add_user_preferences_semantic_zooming.sql
new file mode 100644
index 0000000000000000000000000000000000000000..3b6ff2378827b9dbb880901e5cf29145d87caeac
--- /dev/null
+++ b/persist/src/main/resources/db/migration/12.1.0~alpha.1/V12.1.0.20180830__add_user_preferences_semantic_zooming.sql
@@ -0,0 +1,2 @@
+--user prferences for semantic zooming
+alter table user_annotation_schema_table add column semanticzoomcontainsmultipleoverlays boolean default false;
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 f7201f9c88f8ac79c7d04cf054f8ab66d01d69dc..ec2559f0b9ff6cc15aa4096efc27c93876daee7d 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
@@ -635,6 +635,7 @@ public class ProjectRestImpl extends BaseRestImpl {
     params.projectOrganism(getFirstValue(data.get("organism")));
     params.sbgnFormat(getFirstValue(data.get("sbgn")));
     params.semanticZoom(getFirstValue(data.get("semantic-zoom")));
+    params.semanticZoomContainsMultipleLayouts(getFirstValue(data.get("semantic-zoom-contains-multiple-layouts")));
     params.version(getFirstValue(data.get("version")));
     params.annotations(getFirstValue(data.get("annotate")));
     MapCanvasType mapCanvasType;
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java
index 4753bfa1e50f66992d8eec1b52614698b46c57b4..069b94fa576559ebd0505b02c523496e46c3f0a5 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/users/UserRestImpl.java
@@ -325,6 +325,7 @@ public class UserRestImpl extends BaseRestImpl {
     result.put("cache-data", schema.getCacheData());
     result.put("auto-resize", schema.getAutoResizeMap());
     result.put("semantic-zooming", schema.getSemanticZooming());
+    result.put("semantic-zooming-contains-multiple-overlays", schema.getSemanticZoomContainsMultipleOverlays());
     result.put("sbgn", schema.getSbgnFormat());
     return result;
   }
@@ -522,6 +523,8 @@ public class UserRestImpl extends BaseRestImpl {
           schema.setAutoResizeMap(value);
         } else if (key.equals("semantic-zooming")) {
           schema.setSemanticZooming(value);
+        } else if (key.equals("semantic-zooming-contains-multiple-overlays")) {
+          schema.setSemanticZoomContainsMultipleOverlays(value);
         } else if (key.equals("sbgn")) {
           schema.setSbgnFormat(value);
         } else {
diff --git a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
index ad62006ce7d52684bb3aed28400144f91131200f..5afc54a15ace7e7fb525159b9a4d23543e5b9493 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -643,7 +643,7 @@ public class ProjectService implements IProjectService {
       topModel.addLayout(0, topLayout);
       int submodelId = 1;
       List<Layout> semanticLevelOverlays = new ArrayList<>();
-      if (buildInLayout.equals(BuildInLayout.SEMANTIC)) {
+      if (buildInLayout.equals(BuildInLayout.SEMANTIC) && params.isSemanticZoomContainsMultipleLayouts()) {
         for (int i = 0; i <= topModel.getZoomLevels(); i++) {
           String directory = params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + "-" + i + "-"
               + topModel.getId() + "/";
@@ -667,7 +667,7 @@ public class ProjectService implements IProjectService {
 
         connection.getSubmodel().setZoomLevels(generator.computeZoomLevels(connection.getSubmodel().getModel()));
         connection.getSubmodel().setTileSize(MapGenerator.TILE_SIZE);
-        if (buildInLayout.equals(BuildInLayout.SEMANTIC)) {
+        if (buildInLayout.equals(BuildInLayout.SEMANTIC) && params.isSemanticZoomContainsMultipleLayouts()) {
           for (int i = 0; i <= topModel.getZoomLevels(); i++) {
             String directory = params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + "-" + i + "-"
                 + submodelId + "/";
diff --git a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java
index aa3cf038b8ef5595a537c69d0d500ef8ba49da79..80e1f978fa6b5cff605f9da120ef79234b3832d3 100644
--- a/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java
+++ b/service/src/main/java/lcsb/mapviewer/services/utils/CreateProjectParams.java
@@ -64,11 +64,12 @@ public class CreateProjectParams {
    */
   private boolean complex;
   private boolean semanticZoom;
+  private boolean semanticZoomContainsMultipleLayouts = false;
 
   /**
    * List of zip entries in the complex model definition.
    */
-  private List<ZipEntryFile> zipEntries = new ArrayList<ZipEntryFile>();
+  private List<ZipEntryFile> zipEntries = new ArrayList<>();
 
   /**
    * Should the elements be annotated by the external resources.
@@ -794,6 +795,19 @@ public class CreateProjectParams {
     return this.semanticZoom;
   }
 
+  public CreateProjectParams semanticZoomContainsMultipleLayouts(boolean semanticZoomContainsMultipleLayouts) {
+    this.semanticZoomContainsMultipleLayouts = semanticZoomContainsMultipleLayouts;
+    return this;
+  }
+
+  public CreateProjectParams semanticZoomContainsMultipleLayouts(String value) {
+    return this.semanticZoomContainsMultipleLayouts("true".equals(value));
+  }
+
+  public boolean isSemanticZoomContainsMultipleLayouts() {
+    return this.semanticZoomContainsMultipleLayouts;
+  }
+
   public IConverter getParser() {
     return this.parser;
   }