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 0b95943a44f02eea6dfb63cf89cb3b317a73aeed..ae8fcff5f13ee70d55bbf096d32dcb6fc20a01ae 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -758,6 +758,18 @@ public class ProjectService implements IProjectService {
 			topLayout.setHierarchicalView(buildInLayout.isNested());
 			model.addLayout(0, topLayout);
 			int submodelId = 1;
+			List<Layout> semanticLevelOverlays = new ArrayList<>();
+			if (buildInLayout.equals(BuildInLayout.SEMANTIC)) {
+				for (int i = 0; i <= model.getZoomLevels(); i++) {
+					String directory = params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + "-" + i + "-" + model.getId() + "/";
+					Layout semanticOverlay = new Layout(buildInLayout.getTitle() + "-" + i, directory, true);
+					semanticOverlay.setStatus(LayoutStatus.NA);
+					semanticOverlay.setProgress(0.0);
+					semanticOverlay.setHierarchicalView(buildInLayout.isNested());
+					semanticLevelOverlays.add(semanticOverlay);
+					model.addLayout(1, semanticOverlay);
+				}
+			}
 			for (ModelSubmodelConnection connection : model.getSubmodelConnections()) {
 				Layout layout = new Layout(buildInLayout.getTitle(), params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + submodelId + "/", true);
 				layout.setStatus(LayoutStatus.NA);
@@ -765,10 +777,21 @@ public class ProjectService implements IProjectService {
 				layout.setHierarchicalView(buildInLayout.isNested());
 				layout.setParentLayout(topLayout);
 				connection.getSubmodel().addLayout(0, layout);
-				submodelId++;
 
 				connection.getSubmodel().setZoomLevels(generator.computeZoomLevels(connection.getSubmodel().getModel()));
 				connection.getSubmodel().setTileSize(MapGenerator.TILE_SIZE);
+				if (buildInLayout.equals(BuildInLayout.SEMANTIC)) {
+					for (int i = 0; i <= model.getZoomLevels(); i++) {
+						String directory = params.getProjectDir() + "/" + buildInLayout.getDirectorySuffix() + "-" + i + "-" + submodelId + "/";
+						Layout semanticOverlay = new Layout(buildInLayout.getTitle() + "-" + i, directory, true);
+						semanticOverlay.setStatus(LayoutStatus.NA);
+						semanticOverlay.setProgress(0.0);
+						semanticOverlay.setHierarchicalView(buildInLayout.isNested());
+						semanticOverlay.setParentLayout(semanticLevelOverlays.get(i));
+						connection.getSubmodel().addLayout(1, semanticOverlay);
+					}
+				}
+				submodelId++;
 			}
 		}