diff --git a/commons/src/main/java/lcsb/mapviewer/common/Comparator.java b/commons/src/main/java/lcsb/mapviewer/common/Comparator.java
index ed0446f4017c16bc13baf7f35c0efb21acbc4aaf..474bf8ce7ff720e5d8cd69b11c82d9da62f96e95 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/Comparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/Comparator.java
@@ -8,7 +8,10 @@ import org.apache.log4j.Logger;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public abstract class Comparator<T extends Object> implements java.util.Comparator<T> {
-  Logger logger = Logger.getLogger(Comparator.class);
+  /**
+   * Default class logger.
+   */
+  private static Logger logger = Logger.getLogger(Comparator.class);
   private Class<T> comparatorClazz;
   private boolean exactClassMatch;
   private List<Comparator<? extends T>> subClassComparatorList = new ArrayList<>();
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
index 5ae981421a0b2475796e037b261d2bf0f5858da3..793a591aa4dbd60979578b98ffcaa352e9ec1b3a 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
@@ -10,18 +10,18 @@ import java.util.Comparator;
  */
 public class IntegerComparator implements Comparator<Integer> {
 
-	@Override
-	public int compare(Integer arg0, Integer arg1) {
-		if (arg0 == null) {
-			if (arg1 == null) {
-				return 0;
-			} else {
-				return 1;
-			}
-		} else if (arg1 == null) {
-			return -1;
-		}
-		return arg0.compareTo(arg1);
-	}
+  @Override
+  public int compare(Integer arg0, Integer arg1) {
+    if (arg0 == null) {
+      if (arg1 == null) {
+        return 0;
+      } else {
+        return 1;
+      }
+    } else if (arg1 == null) {
+      return -1;
+    }
+    return arg0.compareTo(arg1);
+  }
 
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
index e02724a703244c00854c404a6fbb2b296c7f49ce..bed6b9ef4f8997dbd948ad30f6110dade4d233ed 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
@@ -6,6 +6,7 @@ import lcsb.mapviewer.common.Comparator;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.comparator.ColorComparator;
 import lcsb.mapviewer.common.comparator.DoubleComparator;
+import lcsb.mapviewer.common.comparator.IntegerComparator;
 import lcsb.mapviewer.common.comparator.SetComparator;
 import lcsb.mapviewer.common.comparator.StringComparator;
 import lcsb.mapviewer.common.comparator.StringListComparator;
@@ -83,6 +84,13 @@ public class ElementComparator extends Comparator<Element> {
       return doubleComparator.compare(arg0.getY(), arg1.getY());
     }
 
+    IntegerComparator integerComparator = new IntegerComparator();
+    if (integerComparator.compare(arg0.getZ(), arg1.getZ()) != 0) {
+      logger.debug("Z-index different: " + arg0.getZ() + ", " + arg1.getZ());
+      return integerComparator.compare(arg0.getZ(), arg1.getZ());
+    }
+
+
     if (doubleComparator.compare(arg0.getWidth(), arg1.getWidth()) != 0) {
       logger.debug("Width different: " + arg0.getWidth() + ", " + arg1.getWidth());
       return doubleComparator.compare(arg0.getWidth(), arg1.getWidth());
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java
index b4bc5fde0310f146aeb6400521a3f5deed49a10b..43c37006a98b7f1c320e39edacbb545af60b8c61 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/species/ElementComparatorTest.java
@@ -318,4 +318,38 @@ public class ElementComparatorTest {
     }
   }
 
+  @Test
+  public void testCompareZIndex() throws Exception {
+    try {
+      SimpleMolecule species1 = createSimpleMolecule();
+      SimpleMolecule species2 = createSimpleMolecule();
+
+      species1.setZ(12);
+      assertTrue(comparator.compare(species1, species2) != 0);
+      assertTrue(comparator.compare(species2, species1) != 0);
+
+      species1 = createSimpleMolecule();
+      species2 = createSimpleMolecule();
+
+      species1.setZ(12);
+      species2.setZ(13);
+
+      assertTrue(comparator.compare(species1, species2) != 0);
+      assertTrue(comparator.compare(species2, species1) != 0);
+
+      species1 = createSimpleMolecule();
+      species2 = createSimpleMolecule();
+
+      species1.setZ(12);
+      species2.setZ(12);
+
+      assertEquals(0, comparator.compare(species1, species2));
+      assertEquals(0, comparator.compare(species2, species1));
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
 }