diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java
index d333ce8ea556ba185a1657f8d28b7532323c6b85..f919988d80f043daca52c96347389006256e4063 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/Layout.java
@@ -72,6 +72,13 @@ public class Layout implements Serializable {
 	 */
 	private boolean						hierarchicalView = false;
 
+	/**
+	 * If overlay contain hierarchical view then it might be fixed on some
+	 * specific level. This parameter defines the level at which it's fixed or
+	 * contains null if it's general hierarchical view.
+	 */
+	private Integer						hierarchyViewLevel;
+
 	/**
 	 * ModelData to which layout is assigend.
 	 */
@@ -107,7 +114,7 @@ public class Layout implements Serializable {
 	 */
 	@ManyToOne(fetch = FetchType.LAZY)
 	private Layout						parentLayout		 = null;
-	
+
 	/**
 	 * Short description used for this layout.
 	 */
@@ -163,6 +170,8 @@ public class Layout implements Serializable {
 		if (layout.inputData != null) {
 			this.inputData = new UploadedFileEntry(layout.getInputData());
 		}
+		this.hierarchyViewLevel = layout.hierarchyViewLevel;
+
 	}
 
 	/**
@@ -421,4 +430,21 @@ public class Layout implements Serializable {
 		this.inputData = inputData;
 	}
 
+	/**
+	 * @return the hierarchyViewLevel
+	 * @see #hierarchyViewLevel
+	 */
+	public Integer getHierarchyViewLevel() {
+		return hierarchyViewLevel;
+	}
+
+	/**
+	 * @param hierarchyViewLevel
+	 *          the hierarchyViewLevel to set
+	 * @see #hierarchyViewLevel
+	 */
+	public void setHierarchyViewLevel(Integer hierarchyViewLevel) {
+		this.hierarchyViewLevel = hierarchyViewLevel;
+	}
+
 }
diff --git a/persist/src/db/11/fix_db_20170629.sql b/persist/src/db/11/fix_db_20170629.sql
new file mode 100644
index 0000000000000000000000000000000000000000..4ddf369a6d38c5903b4082fc4c39f5626fa2598d
--- /dev/null
+++ b/persist/src/db/11/fix_db_20170629.sql
@@ -0,0 +1,2 @@
+-- semantic zooming
+alter table layout add column hierarchyviewlevel integer;
\ No newline at end of file
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 6113612cedeee927cefa1b7ba65690bdca4cb080..2794c4adcc2fabfa0c15d41f9a6e770172f0529e 100644
--- a/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
+++ b/service/src/main/java/lcsb/mapviewer/services/impl/ProjectService.java
@@ -647,18 +647,15 @@ public class ProjectService implements IProjectService {
 
 		MapGeneratorParams imgParams = generator.new MapGeneratorParams()
 				.directory(directory).sbgn(params.isSbgnFormat()).nested(layout.isHierarchicalView()).updater(updater);
-		if (layout.getTitle().contains(BuildInLayout.SEMANTIC.getTitle())) {
-			if (Character.isDigit(layout.getTitle().charAt(layout.getTitle().length() - 1))) {
-				output = prepareSemanticZoomModel(model, layout.getTitle().replaceAll("[^0-9.]", ""));
-			}
+		if (layout.getHierarchyViewLevel() != null) {
+			output = prepareSemanticZoomModel(model, layout.getHierarchyViewLevel());
 		}
 		imgParams.model(output);
 		generator.generateMapImages(imgParams);
 	}
 
-	private Model prepareSemanticZoomModel(final Model model, String levelStr) {
+	private Model prepareSemanticZoomModel(final Model model, int level) {
 		SemanticZoomLevelMatcher matcher = new SemanticZoomLevelMatcher();
-		int level = Integer.valueOf(levelStr);
 		Model output = new CopyCommand(model).execute();
 		for (BioEntity bioEntity : output.getBioEntities()) {
 			if (matcher.isVisible(level, bioEntity.getVisibilityLevel())) {
@@ -761,6 +758,7 @@ public class ProjectService implements IProjectService {
 					semanticOverlay.setStatus(LayoutStatus.NA);
 					semanticOverlay.setProgress(0.0);
 					semanticOverlay.setHierarchicalView(buildInLayout.isNested());
+					semanticOverlay.setHierarchyViewLevel(i);
 					semanticLevelOverlays.add(semanticOverlay);
 					model.addLayout(1, semanticOverlay);
 				}
@@ -783,6 +781,7 @@ public class ProjectService implements IProjectService {
 						semanticOverlay.setProgress(0.0);
 						semanticOverlay.setHierarchicalView(buildInLayout.isNested());
 						semanticOverlay.setParentLayout(semanticLevelOverlays.get(i));
+						semanticOverlay.setHierarchyViewLevel(i);
 						connection.getSubmodel().addLayout(1, semanticOverlay);
 					}
 				}