diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java
index b2ac57a7e553a6786ed8a11931fe380a511c1b82..002935df68d27758b156b63c358b27ad9c64c726 100644
--- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/AbstractImageGenerator.java
@@ -8,7 +8,6 @@ import java.awt.geom.Rectangle2D;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 
@@ -18,11 +17,20 @@ import lcsb.mapviewer.commands.ColorExtractor;
 import lcsb.mapviewer.commands.SemanticZoomLevelMatcher;
 import lcsb.mapviewer.common.MimeType;
 import lcsb.mapviewer.converter.graphics.bioEntity.BioEntityConverterImpl;
-import lcsb.mapviewer.converter.graphics.layer.LayerConverter;
+import lcsb.mapviewer.converter.graphics.layer.LayerLineConverter;
+import lcsb.mapviewer.converter.graphics.layer.LayerOvalConverter;
+import lcsb.mapviewer.converter.graphics.layer.LayerRectConverter;
+import lcsb.mapviewer.converter.graphics.layer.LayerTextConverter;
+import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.BioEntity;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.compartment.PathwayCompartment;
 import lcsb.mapviewer.model.map.layout.ColorSchema;
 import lcsb.mapviewer.model.map.layout.graphics.Layer;
+import lcsb.mapviewer.model.map.layout.graphics.LayerOval;
+import lcsb.mapviewer.model.map.layout.graphics.LayerRect;
+import lcsb.mapviewer.model.map.layout.graphics.LayerText;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.species.Complex;
@@ -606,7 +614,7 @@ public abstract class AbstractImageGenerator {
   /**
    * Default class logger.
    */
-  private Logger logger = Logger.getLogger(AbstractImageGenerator.class);
+  private static Logger logger = Logger.getLogger(AbstractImageGenerator.class);
 
   /**
    * Graphics object which allows to draw objects.
@@ -641,7 +649,7 @@ public abstract class AbstractImageGenerator {
    * params}.
    * 
    * @param params
-   *          list of all params to create apropriate image
+   *          list of all params to create appropriate image
    * @throws DrawingException
    *           thrown when there was a problem with drawing a map
    * 
@@ -700,59 +708,58 @@ public abstract class AbstractImageGenerator {
     // Get the SBGN display format option from the model
     this.sbgnFormat = params.isSbgn();
 
-    // Correct order of displaying is: elements, reactions, compartments,
-    // layers.
-    // In this way we can display all reactions and overlay them by compartments
-    // or layers if they should be solid and hide complexity behind it
+    List<Drawable> bioEntities = new ArrayList<>();
+    bioEntities.addAll(params.getModel().getBioEntities());
+    for (Layer layer : params.getModel().getLayers()) {
+      bioEntities.addAll(layer.getDrawables());
+    }
+    bioEntities.sort(BioEntity.Z_INDEX_COMPARATOR);
 
     // draw all elements
-    for (Element element : params.getModel().getSortedSpeciesList()) {
-      // draw only elements that don't have parents (aren't included in any
-      // compartment/complexes)
+    for (Drawable element : bioEntities) {
       if (element instanceof Species) {
-        if (((Species) element).getComplex() == null && element.getCompartment() == null) {
-          drawSpecies((Species) element);
-        }
-      }
-    }
-    // draw all reactions
-    for (Reaction reaction : params.getModel().getSortedReactions()) {
-      drawReaction(reaction);
-    }
-    // draw all compartments
-    for (Compartment compartment : params.getModel().getSortedCompartments()) {
-      // draw only compartment that don't have parents (aren't included in any
-      // compartment/complexes)
-      if (compartment.getCompartment() == null) {
-        drawCompartment(compartment);
+        drawSpecies((Species) element);
+      } else if (element instanceof Reaction) {
+        drawReaction((Reaction) element);
+      } else if (element instanceof Compartment) {
+        drawCompartment((Compartment) element);
+      } else if (element instanceof LayerText) {
+        drawText((LayerText) element);
+      } else if (element instanceof LayerOval) {
+        drawOval((LayerOval) element);
+      } else if (element instanceof LayerRect) {
+        drawRect((LayerRect) element);
+      } else if (element instanceof PolylineData) {
+        drawLine((PolylineData) element);
+      } else {
+        throw new DrawingException("Unknown class type: " + element);
       }
     }
-
-    // draw all layers
-    for (Layer layer : params.getModel().getLayers()) {
-      drawLayer(layer);
-    }
     closeImageObject();
     setDrawn(true);
   }
 
+  private void drawText(LayerText element) {
+    new LayerTextConverter().draw(element, graphics);
+  }
+
+  private void drawRect(LayerRect element) {
+    new LayerRectConverter().draw(element, graphics);
+  }
+
+  private void drawOval(LayerOval element) {
+    new LayerOvalConverter().draw(element, graphics);
+  }
+
+  private void drawLine(PolylineData element) {
+    new LayerLineConverter().draw(element, graphics);
+  }
+
   /**
    * Method called after drawing. It should close drawing canvas properly.
    */
   protected abstract void closeImageObject();
 
-  /**
-   * This method draw layer on the graphics.
-   * 
-   * @param layer
-   *          layer to be drawn
-   */
-  private void drawLayer(final Layer layer) {
-    // get a converter nad set text borders to no
-    LayerConverter converter = new LayerConverter(false);
-    converter.drawLayer(layer, graphics);
-  }
-
   /**
    * Don't allow to create default public constructors with empty list of
    * parameters.
@@ -780,28 +787,7 @@ public abstract class AbstractImageGenerator {
 
     converter.draw(compartment, graphics, compartmentParams, params.getVisibleLayoutsForElement(compartment));
 
-    // If compartment should be filled, then we could skip drawing the inside
-    // compartments.
-
     if (zoomLevelMatcher.isTransparent(level, compartment.getTransparencyLevel()) || !params.nested) {
-      List<Element> result = new ArrayList<>();
-      result.addAll(compartment.getElements());
-      Collections.sort(result, Element.SIZE_COMPARATOR);
-
-      // draw all children of this compartment
-      for (Element child : result) {
-        // if a child is a standard species
-        if (child instanceof Species) {
-          drawSpecies((Species) child);
-        } else if (child instanceof Compartment) {
-          drawCompartment((Compartment) child);
-        } else {
-          // if a child is not a compartment or a species then we have a
-          // problem
-          throw new DrawingException(eu.getElementTag(child) + "Unknown Element type");
-        }
-
-      }
       if (!compartment.containsIdenticalSpecies()) {
         if (!(compartment instanceof PathwayCompartment)) {
           converter.drawText(compartment, graphics, compartmentParams);
@@ -848,21 +834,6 @@ public abstract class AbstractImageGenerator {
         new ConverterParams().scale(customScale).level(level).sbgnFormat(sbgnFormat).nested(params.nested),
         params.getVisibleLayoutsForElement(species));
 
-    // if the species is a complex then we may want to draw children
-    // objects
-    if (species instanceof Complex) {
-      Complex complex = (Complex) species;
-      // before drawing children check if the view is not set to brief
-      // mode
-      if (!complex.getState().equalsIgnoreCase("brief")) {
-        // depending on current zoom level, children are drawn or not
-        if (zoomLevelMatcher.isTransparent(level, complex.getTransparencyLevel()) || !params.nested) {
-          for (Species child : complex.getElements()) {
-            drawSpecies(child);
-          }
-        }
-      }
-    }
   }
 
   /**
diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerConverter.java
index 02b225525a3c5612dcd3d5aace0b6c4537298ada..75f7cc5ab545888984505b0b809325cb9cc2cbeb 100644
--- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerConverter.java
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerConverter.java
@@ -1,19 +1,15 @@
 package lcsb.mapviewer.converter.graphics.layer;
 
-import java.awt.Color;
 import java.awt.Graphics2D;
-import java.awt.geom.Ellipse2D;
-import java.awt.geom.Rectangle2D;
 
-import lcsb.mapviewer.converter.graphics.geometry.ArrowTransformation;
+import org.apache.log4j.Logger;
+
 import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.map.layout.graphics.Layer;
 import lcsb.mapviewer.model.map.layout.graphics.LayerOval;
 import lcsb.mapviewer.model.map.layout.graphics.LayerRect;
 import lcsb.mapviewer.model.map.layout.graphics.LayerText;
 
-import org.apache.log4j.Logger;
-
 /**
  * This class allows to draw layer on Graphics2D.
  * 
@@ -22,134 +18,53 @@ import org.apache.log4j.Logger;
  */
 public class LayerConverter {
 
-	/**
-	 * Default class logger.
-	 */
-	@SuppressWarnings("unused")
-	private static Logger				logger							= Logger.getLogger(LayerConverter.class.getName());
-
-	/**
-	 * Color used for text frames.
-	 */
-	private static final Color	FRAME_COLOR					= Color.LIGHT_GRAY;
-
-	/**
-	 * Should the border around text be visible.
-	 */
-	private boolean							visibleTextBorder		= true;
-
-	/**
-	 * This objects helps drawing arrows.
-	 */
-	private ArrowTransformation	arrowTransformation	= new ArrowTransformation();
-
-	/**
-	 * Default constructor.
-	 * 
-	 * @param visibleTextBorder
-	 *          should the text hav border
-	 */
-	public LayerConverter(final boolean visibleTextBorder) {
-		this.visibleTextBorder = visibleTextBorder;
-	}
-
-	/**
-	 * Draw the whole layer on the Graphics2D.
-	 * 
-	 * @param layer
-	 *          object to be drawn
-	 * @param graphics
-	 *          where we want to draw the object
-	 */
-	public void drawLayer(final Layer layer, final Graphics2D graphics) {
-		if (layer.isVisible()) {
-			for (LayerText text : layer.getTexts()) {
-				drawLayerText(text, graphics);
-			}
-			for (LayerRect rect : layer.getRectangles()) {
-				drawLayerRect(rect, graphics);
-			}
-			for (LayerOval oval : layer.getOvals()) {
-				drawLayerOval(oval, graphics);
-			}
-			for (PolylineData line : layer.getLines()) {
-				drawLayerLine(line, graphics);
-			}
-		}
-
-	}
-
-	/**
-	 * Draw text on the Graphics2D.
-	 * 
-	 * @param text
-	 *          object to be drawn
-	 * @param graphics
-	 *          where we want to draw the object
-	 */
-	private void drawLayerText(final LayerText text, final Graphics2D graphics) {
-		if (visibleTextBorder) {
-			Color tmpColor = graphics.getColor();
-			graphics.setColor(FRAME_COLOR);
-			Rectangle2D rect = new Rectangle2D.Double(text.getX(), text.getY(), text.getWidth(), text.getHeight());
-			graphics.draw(rect);
-			graphics.setColor(tmpColor);
-		}
-		int x = text.getX().intValue() + 2;
-		int y = text.getY().intValue();
-		y += graphics.getFontMetrics().getHeight();
-		graphics.drawString(text.getNotes(), x, y);
-
-	}
-
-	/**
-	 * Draws rectangle on the Graphics2D.
-	 * 
-	 * @param rect
-	 *          object to be drawn
-	 * @param graphics
-	 *          where we want to draw the object
-	 */
-	private void drawLayerRect(final LayerRect rect, final Graphics2D graphics) {
-		Color tmpColor = graphics.getColor();
-		graphics.setColor(rect.getColor());
-		Rectangle2D rectangle = new Rectangle2D.Double(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
-		graphics.draw(rectangle);
-		graphics.setColor(tmpColor);
-
-	}
-
-	/**
-	 * Draws line on the Graphics2D.
-	 * 
-	 * @param line
-	 *          object to be drawn
-	 * @param graphics
-	 *          where we want to draw the object
-	 */
-	private void drawLayerLine(final PolylineData line, final Graphics2D graphics) {
-		Color tmpColor = graphics.getColor();
-		graphics.setColor(line.getColor());
-		arrowTransformation.drawLine(line, graphics);
-
-		graphics.setColor(tmpColor);
-
-	}
-
-	/**
-	 * Draws oval on the Graphics2D.
-	 * 
-	 * @param oval
-	 *          object to be drawn
-	 * @param graphics
-	 *          where we want to draw the object
-	 */
-	private void drawLayerOval(final LayerOval oval, final Graphics2D graphics) {
-		Color tmpColor = graphics.getColor();
-		graphics.setColor(oval.getColor());
-		Ellipse2D o = new Ellipse2D.Double(oval.getX(), oval.getY(), oval.getWidth(), oval.getHeight());
-		graphics.draw(o);
-		graphics.setColor(tmpColor);
-
-	}
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private static Logger logger = Logger.getLogger(LayerConverter.class.getName());
+
+  LayerLineConverter lineConverter;
+  LayerRectConverter rectConverter;
+  LayerOvalConverter ovalConverter;
+  LayerTextConverter textConverter;
+
+  /**
+   * Default constructor.
+   * 
+   * @param visibleTextBorder
+   *          should the text have border
+   */
+  public LayerConverter(final boolean visibleTextBorder) {
+    this.lineConverter = new LayerLineConverter();
+    this.ovalConverter = new LayerOvalConverter();
+    this.rectConverter = new LayerRectConverter();
+    this.textConverter = new LayerTextConverter(visibleTextBorder);
+  }
+
+  /**
+   * Draw the whole layer on the Graphics2D.
+   * 
+   * @param layer
+   *          object to be drawn
+   * @param graphics
+   *          where we want to draw the object
+   */
+  public void drawLayer(final Layer layer, final Graphics2D graphics) {
+    if (layer.isVisible()) {
+      for (LayerText text : layer.getTexts()) {
+        textConverter.draw(text, graphics);
+      }
+      for (LayerRect rect : layer.getRectangles()) {
+        rectConverter.draw(rect, graphics);
+      }
+      for (LayerOval oval : layer.getOvals()) {
+        ovalConverter.draw(oval, graphics);
+      }
+      for (PolylineData line : layer.getLines()) {
+        lineConverter.draw(line, graphics);
+      }
+    }
+
+  }
 }
\ No newline at end of file
diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerLineConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerLineConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..db4382e3158dca277a9e60f39e3dbde841f5bf29
--- /dev/null
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerLineConverter.java
@@ -0,0 +1,46 @@
+package lcsb.mapviewer.converter.graphics.layer;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.converter.graphics.geometry.ArrowTransformation;
+import lcsb.mapviewer.model.graphics.PolylineData;
+
+/**
+ * This class allows to draw {@link PolylineData} on Graphics2D.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class LayerLineConverter {
+
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private static Logger logger = Logger.getLogger(LayerLineConverter.class.getName());
+
+  /**
+   * This objects helps drawing arrows.
+   */
+  private ArrowTransformation arrowTransformation = new ArrowTransformation();
+
+  /**
+   * Draws line on the Graphics2D.
+   * 
+   * @param line
+   *          object to be drawn
+   * @param graphics
+   *          where we want to draw the object
+   */
+  public void draw(final PolylineData line, final Graphics2D graphics) {
+    Color tmpColor = graphics.getColor();
+    graphics.setColor(line.getColor());
+    arrowTransformation.drawLine(line, graphics);
+
+    graphics.setColor(tmpColor);
+
+  }
+}
\ No newline at end of file
diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerOvalConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerOvalConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..92fc819dbc9a8ec4ad45e6c930aec3041936e871
--- /dev/null
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerOvalConverter.java
@@ -0,0 +1,40 @@
+package lcsb.mapviewer.converter.graphics.layer;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Ellipse2D;
+
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.model.map.layout.graphics.LayerOval;
+
+/**
+ * This class allows to draw {@link LayerOval} on Graphics2D.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class LayerOvalConverter {
+
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private static Logger logger = Logger.getLogger(LayerOvalConverter.class.getName());
+
+  /**
+   * Draws oval on the Graphics2D.
+   * 
+   * @param oval
+   *          object to be drawn
+   * @param graphics
+   *          where we want to draw the object
+   */
+  public void draw(final LayerOval oval, final Graphics2D graphics) {
+    Color tmpColor = graphics.getColor();
+    graphics.setColor(oval.getColor());
+    Ellipse2D o = new Ellipse2D.Double(oval.getX(), oval.getY(), oval.getWidth(), oval.getHeight());
+    graphics.draw(o);
+    graphics.setColor(tmpColor);
+  }
+}
\ No newline at end of file
diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerRectConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerRectConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..c448d58c10419f762cbca49c83bd50ceccd05d49
--- /dev/null
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerRectConverter.java
@@ -0,0 +1,42 @@
+package lcsb.mapviewer.converter.graphics.layer;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.model.map.layout.graphics.LayerRect;
+
+/**
+ * This class allows to draw layer on Graphics2D.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class LayerRectConverter {
+
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private static Logger logger = Logger.getLogger(LayerRectConverter.class.getName());
+
+  /**
+   * Draws rectangle on the Graphics2D.
+   * 
+   * @param rect
+   *          object to be drawn
+   * @param graphics
+   *          where we want to draw the object
+   */
+  public void draw(final LayerRect rect, final Graphics2D graphics) {
+    Color tmpColor = graphics.getColor();
+    graphics.setColor(rect.getColor());
+    Rectangle2D rectangle = new Rectangle2D.Double(rect.getX(), rect.getY(), rect.getWidth(), rect.getHeight());
+    graphics.draw(rectangle);
+    graphics.setColor(tmpColor);
+
+  }
+
+}
\ No newline at end of file
diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerTextConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerTextConverter.java
new file mode 100644
index 0000000000000000000000000000000000000000..3d5d5f99f4e071c78a8fefcf960b3cc52aa747b4
--- /dev/null
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/layer/LayerTextConverter.java
@@ -0,0 +1,71 @@
+package lcsb.mapviewer.converter.graphics.layer;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Rectangle2D;
+
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.model.map.layout.graphics.LayerText;
+
+/**
+ * This class allows to draw {@link LayerText} on Graphics2D.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class LayerTextConverter {
+
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private static Logger logger = Logger.getLogger(LayerTextConverter.class.getName());
+
+  /**
+   * Color used for text frames.
+   */
+  private static final Color FRAME_COLOR = Color.LIGHT_GRAY;
+
+  /**
+   * Should the border around text be visible.
+   */
+  private boolean visibleTextBorder = false;
+
+  /**
+   * Default constructor.
+   * 
+   * @param visibleTextBorder
+   *          should the text have border
+   */
+  public LayerTextConverter(final boolean visibleTextBorder) {
+    this.visibleTextBorder = visibleTextBorder;
+  }
+
+  public LayerTextConverter() {
+  }
+
+  /**
+   * Draw text on the Graphics2D.
+   * 
+   * @param text
+   *          object to be drawn
+   * @param graphics
+   *          where we want to draw the object
+   */
+  public void draw(final LayerText text, final Graphics2D graphics) {
+    if (visibleTextBorder) {
+      Color tmpColor = graphics.getColor();
+      graphics.setColor(FRAME_COLOR);
+      Rectangle2D rect = new Rectangle2D.Double(text.getX(), text.getY(), text.getWidth(), text.getHeight());
+      graphics.draw(rect);
+      graphics.setColor(tmpColor);
+    }
+    int x = text.getX().intValue() + 2;
+    int y = text.getY().intValue();
+    y += graphics.getFontMetrics().getHeight();
+    graphics.drawString(text.getNotes(), x, y);
+
+  }
+
+}
\ No newline at end of file
diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/AbstractImageGeneratorTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/AbstractImageGeneratorTest.java
index 93381deaa9787e5c87ea07b6f23dfe0b9e078b72..83896981a3c0062286b1f8fc460a018e1472b2b6 100644
--- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/AbstractImageGeneratorTest.java
+++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/AbstractImageGeneratorTest.java
@@ -1,11 +1,10 @@
 package lcsb.mapviewer.converter.graphics;
 
-import static org.mockito.Matchers.any;
+import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 
 import java.awt.Graphics2D;
-import java.awt.geom.Point2D;
 
 import org.apache.log4j.Logger;
 import org.junit.After;
@@ -14,138 +13,109 @@ import org.junit.Before;
 import org.junit.Test;
 import org.mockito.Mockito;
 
-import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
-import lcsb.mapviewer.model.map.modifier.Catalysis;
-import lcsb.mapviewer.model.map.reaction.Modifier;
-import lcsb.mapviewer.model.map.reaction.Product;
-import lcsb.mapviewer.model.map.reaction.Reactant;
 import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.species.GenericProtein;
 
 public class AbstractImageGeneratorTest extends GraphicsTestFunctions {
-	Logger logger = Logger.getLogger(AbstractImageGeneratorTest.class);
-
-	@AfterClass
-	public static void tearDownAfterClass() throws Exception {
-	}
-
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testDrawSimpleMap() throws Exception {
-		try {
-			Graphics2D graphics = createGraphicsMock();
-
-			Model model = createSimpleModel();
-
-			AbstractImageGenerator gen = createAbstractImageGeneratorMock(graphics, model);
-			gen.draw();
-
-			//3 times for proteins and 4 times for reaction
-			verify(graphics, times(7)).draw(any());
-		} catch (Exception e) {
-			throw e;
-		}
-	}
-
-	@Test
-	public void testDrawSimpleMapWithNesting() throws Exception {
-		try {
-			Graphics2D graphics = createGraphicsMock();
-
-			Model model = createSimpleModel();
-
-			AbstractImageGenerator gen = createAbstractImageGeneratorMock(graphics, model);
-			gen.setParams(new AbstractImageGenerator.Params().model(model).nested(true));
-			gen.draw();
-
-			//3 times for proteins and 4 times for reaction
-			verify(graphics, times(7)).draw(any());
-		} catch (Exception e) {
-			throw e;
-		}
-	}
-
-	@Test
-	public void testDrawSimpleMapWithWhenNestingHidesElement() throws Exception {
-		try {
-			Graphics2D graphics = createGraphicsMock();
-
-			Model model = createSimpleModel();
-			model.getElementByElementId("s1").setVisibilityLevel(2);
-
-			AbstractImageGenerator gen = createAbstractImageGeneratorMock(graphics, model);
-			gen.setParams(new AbstractImageGenerator.Params().model(model).nested(true).level(0));
-			gen.draw();
-
-			//2 times for proteins and 3 times for reaction
-			verify(graphics, times(5)).draw(any());
-		} catch (Exception e) {
-			throw e;
-		}
-	}
-
-	private Model createSimpleModel() {
-		Model model = new ModelFullIndexed(null);
-		model.setWidth(100);
-		model.setHeight(100);
-
-		GenericProtein protein1 = new GenericProtein("s1");
-		protein1.setX(10);
-		protein1.setY(10);
-		protein1.setWidth(10);
-		protein1.setHeight(10);
-		model.addElement(protein1);
-
-		GenericProtein protein2 = new GenericProtein("s2");
-		protein2.setX(30);
-		protein2.setY(10);
-		protein2.setWidth(10);
-		protein2.setHeight(10);
-		model.addElement(protein2);
-
-		GenericProtein protein3 = new GenericProtein("s3");
-		protein3.setX(40);
-		protein3.setY(10);
-		protein3.setWidth(10);
-		protein3.setHeight(10);
-		model.addElement(protein3);
-
-		Reaction reaction = new Reaction();
-
-		Modifier modifier = new Catalysis(protein1);
-		modifier.setLine(new PolylineData(new Point2D.Double(100, 20), new Point2D.Double(100, 80)));
-		modifier.getLine().setWidth(1.0);
-
-		Reactant reactant = new Reactant(protein2);
-		reactant.setLine(new PolylineData(new Point2D.Double(90, 90), new Point2D.Double(10, 90)));
-		reactant.getLine().setWidth(1.0);
-		Product product = new Product(protein3);
-		product.setLine(new PolylineData(new Point2D.Double(200, 90), new Point2D.Double(110, 90)));
-		product.getLine().setWidth(1.0);
-		reaction.addModifier(modifier);
-		reaction.addProduct(product);
-		reaction.addReactant(reactant);
-
-		model.addReaction(reaction);
-
-		return model;
-	}
-
-	private AbstractImageGenerator createAbstractImageGeneratorMock(Graphics2D graphics, Model model) throws Exception {
-		AbstractImageGenerator result = Mockito.mock(AbstractImageGenerator.class, Mockito.CALLS_REAL_METHODS);
-		result.setGraphics(graphics);
-		result.setParams(new AbstractImageGenerator.Params().model(model).level(0));
-		return result;
-
-	}
+  Logger logger = Logger.getLogger(AbstractImageGeneratorTest.class);
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception {
+  }
+
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testDrawSimpleMap() throws Exception {
+    try {
+      Graphics2D graphics = createGraphicsMock();
+
+      Model model = createSimpleModel();
+
+      AbstractImageGenerator gen = createAbstractImageGeneratorMock(graphics, model);
+      gen.draw();
+
+      // 3 times for proteins and 4 times for reaction
+      verify(graphics, times(7)).draw(any());
+    } catch (Exception e) {
+      throw e;
+    }
+  }
+
+  @Test
+  public void testDrawSimpleMapWithNesting() throws Exception {
+    try {
+      Graphics2D graphics = createGraphicsMock();
+
+      Model model = createSimpleModel();
+
+      AbstractImageGenerator gen = createAbstractImageGeneratorMock(graphics, model);
+      gen.setParams(new AbstractImageGenerator.Params().model(model).nested(true));
+      gen.draw();
+
+      // 3 times for proteins and 4 times for reaction
+      verify(graphics, times(7)).draw(any());
+    } catch (Exception e) {
+      throw e;
+    }
+  }
+
+  @Test
+  public void testDrawSimpleMapWithWhenNestingHidesElement() throws Exception {
+    try {
+      Graphics2D graphics = createGraphicsMock();
+
+      Model model = createSimpleModel();
+      model.getElementByElementId("s1").setVisibilityLevel(2);
+
+      AbstractImageGenerator gen = createAbstractImageGeneratorMock(graphics, model);
+      gen.setParams(new AbstractImageGenerator.Params().model(model).nested(true).level(0));
+      gen.draw();
+
+      // 2 times for proteins and 3 times for reaction
+      verify(graphics, times(5)).draw(any());
+    } catch (Exception e) {
+      throw e;
+    }
+  }
+
+  private Model createSimpleModel() {
+    Model model = new ModelFullIndexed(null);
+    model.setWidth(100);
+    model.setHeight(100);
+
+    GenericProtein protein1 = createProtein();
+    model.addElement(protein1);
+
+    GenericProtein protein2 = createProtein();
+    protein2.setX(30);
+    model.addElement(protein2);
+
+    GenericProtein protein3 = createProtein();
+    protein3.setX(40);
+    model.addElement(protein3);
+
+    Reaction reaction = createReaction(protein1, protein2, protein3);
+
+    model.addReaction(reaction);
+
+    return model;
+  }
+
+  private AbstractImageGenerator createAbstractImageGeneratorMock(Graphics2D graphics, Model model) throws Exception {
+    AbstractImageGenerator result = Mockito.mock(AbstractImageGenerator.class, Mockito.CALLS_REAL_METHODS);
+    result.setGraphics(graphics);
+    result.setParams(new AbstractImageGenerator.Params().model(model).level(0));
+    return result;
+
+  }
 
 }
diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java
index fb2537c840ee66a28cd0f0fb47f49057813c6270..049deae9211e5b769d7b5021e3e4f197b2f3dccd 100644
--- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java
+++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/GraphicsTestFunctions.java
@@ -6,11 +6,24 @@ import static org.mockito.Mockito.when;
 import java.awt.FontMetrics;
 import java.awt.Graphics;
 import java.awt.Graphics2D;
+import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 
 import org.mockito.Mockito;
 
+import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.modifier.Catalysis;
+import lcsb.mapviewer.model.map.reaction.Modifier;
+import lcsb.mapviewer.model.map.reaction.Product;
+import lcsb.mapviewer.model.map.reaction.Reactant;
+import lcsb.mapviewer.model.map.reaction.Reaction;
+import lcsb.mapviewer.model.map.species.Complex;
+import lcsb.mapviewer.model.map.species.GenericProtein;
+
 public abstract class GraphicsTestFunctions {
+
+  int elementCounter = 1;
+
   protected Graphics2D createGraphicsMock() {
     Graphics2D graphics = Mockito.mock(Graphics2D.class);
     FontMetrics fontMetrics = Mockito.mock(FontMetrics.class);
@@ -20,4 +33,49 @@ public abstract class GraphicsTestFunctions {
     return graphics;
   }
 
+  protected Reaction createReaction(GenericProtein modifierElement, GenericProtein reactantElement,
+      GenericProtein productElement) {
+    Reaction reaction = new Reaction("r" + elementCounter++);
+
+    Point2D center = new Point2D.Double((reactantElement.getCenterX() + productElement.getCenterX()) / 2,
+        (reactantElement.getCenterY() + productElement.getCenterY()) / 2);
+
+    Modifier modifier = new Catalysis(modifierElement);
+    modifier.setLine(new PolylineData(modifierElement.getCenter(), center));
+    modifier.getLine().setWidth(1.0);
+
+    Reactant reactant = new Reactant(reactantElement);
+    reactant.setLine(new PolylineData(reactantElement.getCenter(), center));
+    reactant.getLine().setWidth(1.0);
+    Product product = new Product(productElement);
+    product.setLine(new PolylineData(productElement.getCenter(), center));
+    product.getLine().setWidth(1.0);
+    reaction.addModifier(modifier);
+    reaction.addProduct(product);
+    reaction.addReactant(reactant);
+    reaction.setZ(elementCounter);
+    return reaction;
+  }
+
+  protected GenericProtein createProtein() {
+    GenericProtein result = new GenericProtein("s" + elementCounter++);
+    result.setZ(elementCounter);
+    result.setX(10);
+    result.setY(10);
+    result.setWidth(10);
+    result.setHeight(10);
+    return result;
+  }
+
+  protected Complex createComplex() {
+    Complex complex = new Complex("c"+elementCounter++);
+    complex.setName("a");
+    complex.setX(300);
+    complex.setY(90);
+    complex.setWidth(100);
+    complex.setHeight(50);
+    complex.setZ(elementCounter);
+    return complex;
+  }
+
 }
diff --git a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java
index f9a9f36ed0415a61ec9683dd56aba9c683488147..ebee061191155f19eb1f417b3be8b17ab24c4026 100644
--- a/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java
+++ b/converter-graphics/src/test/java/lcsb/mapviewer/converter/graphics/PdfImageGeneratorTest.java
@@ -55,6 +55,10 @@ public class PdfImageGeneratorTest extends GraphicsTestFunctions {
       layer.addLayerText(new LayerText(new Rectangle2D.Double(10, 10, 500, 500), "X asd"));
       layer.addLayerText(new LayerText(new Rectangle2D.Double(20, 20, 200, 200), "Y qwe ret"));
       layer.addLayerText(new LayerText(new Rectangle2D.Double(100, 100, 199, 220), "Z dgf fsd aaewq ret"));
+      
+      for (LayerText text: layer.getTexts()) {
+        text.setZ(0);
+      }
 
       new CreateHierarchyCommand(model, 1, 8).execute();
       model.getCompartments().get(1).setTransparencyLevel("2");
@@ -103,17 +107,13 @@ public class PdfImageGeneratorTest extends GraphicsTestFunctions {
 
     layer.addLayerLine(new PolylineData(new Point2D.Double(0, 0), new Point2D.Double(100, 100)));
 
-    Complex alias = new Complex("1");
-    alias.setName("a");
-    alias.setX(300);
-    alias.setY(90);
-    alias.setWidth(100);
-    alias.setHeight(50);
+    Complex alias = createComplex();
     model.addElement(alias);
 
     return model;
   }
 
+
   @Test
   public void testDrawPathwayWithoutNesting() throws Exception {
     try {
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java b/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java
index e5d2e1773ef2912ff04051e8f026d84d9bcffc0f..e206f7ad3abd7f3d6ce48e3a826325424402c4dd 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java
@@ -9,8 +9,9 @@ import org.apache.log4j.Logger;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.comparator.DoubleComparator;
 import lcsb.mapviewer.common.comparator.StringComparator;
-import lcsb.mapviewer.model.map.BioEntity;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.compartment.Compartment;
+import lcsb.mapviewer.model.map.layout.graphics.Layer;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.reaction.Reaction;
 import lcsb.mapviewer.model.map.species.Complex;
@@ -41,36 +42,43 @@ public class ZIndexPopulator {
   public void populateZIndex(Model model) {
     int maxZIndex = 0;
 
-    List<BioEntity> bioEntities = new ArrayList<>();
+    List<Drawable> bioEntities = new ArrayList<>();
     bioEntities.addAll(model.getBioEntities());
-    bioEntities.sort(new Comparator<BioEntity>() {
+    for (Layer layer : model.getLayers()) {
+      bioEntities.addAll(layer.getOvals());
+      bioEntities.addAll(layer.getRectangles());
+      bioEntities.addAll(layer.getTexts());
+    }
+    bioEntities.addAll(model.getBioEntities());
+    bioEntities.sort(new Comparator<Drawable>() {
       @Override
-      public int compare(BioEntity o1, BioEntity o2) {
+      public int compare(Drawable o1, Drawable o2) {
         if (o1 instanceof Reaction) {
           if (o2 instanceof Reaction) {
-            return stringComparator.compare(o1.getElementId(), o2.getElementId());
+            return stringComparator.compare(((Reaction) o1).getElementId(), ((Reaction) o2).getElementId());
           }
           return -1;
         }
         if (o2 instanceof Reaction) {
           return 1;
         }
-        Element e1 = (Element) o1;
-        Element e2 = (Element) o2;
-
-        if (isChildren(e1, e2)) {
-          return -1;
-        }
-        if (isChildren(e2, e1)) {
-          return 1;
-        }
+        if (o1 instanceof Element && o2 instanceof Element) {
+          Element e1 = (Element) o1;
+          Element e2 = (Element) o2;
 
-        int result = -doubleComparator.compare(e1.getSize(), e2.getSize());
-        if (result == 0) {
-          result = stringComparator.compare(e1.getElementId(), e2.getElementId());
+          if (isChildren(e1, e2)) {
+            return -1;
+          }
+          if (isChildren(e2, e1)) {
+            return 1;
+          }
+          int result = -doubleComparator.compare(o1.getSize(), o2.getSize());
+          if (result == 0) {
+            return stringComparator.compare(e1.getElementId(), e2.getElementId());
+          }
         }
 
-        return result;
+        return -doubleComparator.compare(o1.getSize(), o2.getSize());
       }
 
       private boolean isChildren(Element e1, Element e2) {
@@ -87,7 +95,7 @@ public class ZIndexPopulator {
       }
     });
 
-    for (BioEntity bioEntity : bioEntities) {
+    for (Drawable bioEntity : bioEntities) {
       if (bioEntity.getZ() == null) {
         bioEntity.setZ(++maxZIndex);
       }
diff --git a/converter/src/test/java/lcsb/mapviewer/converter/ZIndexPopulatorTest.java b/converter/src/test/java/lcsb/mapviewer/converter/ZIndexPopulatorTest.java
index d26ad8d1f051c4f17573a6abe1db21dfdec43a71..6d2f340d0b08e62049dfbf4d5a2afdde9cfb2a6a 100644
--- a/converter/src/test/java/lcsb/mapviewer/converter/ZIndexPopulatorTest.java
+++ b/converter/src/test/java/lcsb/mapviewer/converter/ZIndexPopulatorTest.java
@@ -7,6 +7,8 @@ import org.apache.log4j.Logger;
 import org.junit.Test;
 
 import lcsb.mapviewer.model.map.compartment.Compartment;
+import lcsb.mapviewer.model.map.layout.graphics.Layer;
+import lcsb.mapviewer.model.map.layout.graphics.LayerText;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
 import lcsb.mapviewer.model.map.reaction.Reaction;
@@ -64,6 +66,37 @@ public class ZIndexPopulatorTest {
     assertTrue(smallerSpecies.getZ() < microSpecies.getZ());
   }
 
+  @Test
+  public void testZIndexSpeciesAndText() {
+    Model model = new ModelFullIndexed(null);
+    Species microSpecies = createProtein();
+    microSpecies.setWidth(1);
+    microSpecies.setHeight(1);
+    model.addElement(microSpecies);
+
+    Layer layer = new Layer();
+    model.addLayer(layer);
+    LayerText biggerText = createText();
+    biggerText.setWidth(10.0);
+    biggerText.setHeight(10.0);
+    layer.addLayerText(biggerText);
+
+    LayerText smallerText = createText();
+    smallerText.setWidth(5.0);
+    smallerText.setHeight(5.0);
+    layer.addLayerText(smallerText);
+
+    ZIndexPopulator populator = new ZIndexPopulator();
+    populator.populateZIndex(model);
+
+    assertTrue(biggerText.getZ() < smallerText.getZ());
+    assertTrue(smallerText.getZ() < microSpecies.getZ());
+  }
+
+  private LayerText createText() {
+    return new LayerText();
+  }
+
   @Test
   public void testZIndexReactionShouldBeBeforeElement() {
     Model model = new ModelFullIndexed(null);
diff --git a/frontend-js/package-lock.json b/frontend-js/package-lock.json
index 71a6ee42c3325f6165141b02c007deadaac49a0b..17af1d3c74801220445bc910e69128516887d881 100644
--- a/frontend-js/package-lock.json
+++ b/frontend-js/package-lock.json
@@ -87,7 +87,6 @@
       "version": "0.1.4",
       "resolved": "https://registry.npmjs.org/align-text/-/align-text-0.1.4.tgz",
       "integrity": "sha1-DNkKVhCT810KmSVsIrcGlDP60Rc=",
-      "optional": true,
       "requires": {
         "kind-of": "^3.0.2",
         "longest": "^1.0.1",
@@ -3307,17 +3306,10 @@
         }
       }
     },
-    "log4js-memory-appender": {
-      "version": "1.0.5",
-      "resolved": "https://registry.npmjs.org/log4js-memory-appender/-/log4js-memory-appender-1.0.5.tgz",
-      "integrity": "sha1-e4I2NDpCuLEgidjX+kebD22aNME=",
-      "dev": true
-    },
     "longest": {
       "version": "1.0.1",
       "resolved": "https://registry.npmjs.org/longest/-/longest-1.0.1.tgz",
-      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc=",
-      "optional": true
+      "integrity": "sha1-MKCy2jj3N3DoKUoNIuZiXtd9AJc="
     },
     "loose-envify": {
       "version": "1.3.1",
@@ -5078,6 +5070,15 @@
         }
       }
     },
+    "stream-to-blob": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/stream-to-blob/-/stream-to-blob-1.0.1.tgz",
+      "integrity": "sha512-aRy4neA4rf+qMtLT9fCRLPGWdrsIKtCx4kUdNTIPgPQ2hkHkdxbViVAvABMx9oRM6yCWfngHx6pwXfbYkVuPuw==",
+      "dev": true,
+      "requires": {
+        "once": "^1.3.3"
+      }
+    },
     "streamroller": {
       "version": "1.0.4",
       "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-1.0.4.tgz",
diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
index dd651eba1bf644a26e7d6dc00b6dba3bcfb2dd74..adb5061425f39f5a07d72c0728ee30ace2141be7 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
@@ -165,6 +165,7 @@ public class CreateHierarchyCommand extends ModelCommand {
         compartment.setFontColor(rect.getColor());
         compartment.setNamePoint(new Point2D.Double(rect.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT,
             rect.getY() + DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT));
+        compartment.setZ(rect.getZ());
 
         model.addElement(compartment);
       }
@@ -178,6 +179,7 @@ public class CreateHierarchyCommand extends ModelCommand {
         compartment.setColor(text.getBackgroundColor());
         compartment.setName(extractNameFromText(text.getNotes()));
         compartment.setNotes(extractNotesFromText(text.getNotes()));
+        compartment.setZ(text.getZ());
         rap.processNotes(compartment);
 
         compartment.setNamePoint(new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT,
diff --git a/model/src/main/java/lcsb/mapviewer/model/graphics/PolylineData.java b/model/src/main/java/lcsb/mapviewer/model/graphics/PolylineData.java
index 4c5479327a78b9d6ea9398e702599db03c4b5a8e..c6579e150b94c859e75ddff66aa45aa4e9a8e1d8 100644
--- a/model/src/main/java/lcsb/mapviewer/model/graphics/PolylineData.java
+++ b/model/src/main/java/lcsb/mapviewer/model/graphics/PolylineData.java
@@ -30,6 +30,7 @@ import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 import lcsb.mapviewer.common.geometry.PointTransformation;
+import lcsb.mapviewer.model.map.Drawable;
 
 /**
  * This class represents general line structure. Line can contain several
@@ -40,7 +41,7 @@ import lcsb.mapviewer.common.geometry.PointTransformation;
  * 
  */
 @Entity
-public class PolylineData implements Serializable {
+public class PolylineData implements Serializable, Drawable {
   /**
    * 
    */
@@ -535,4 +536,19 @@ public class PolylineData implements Serializable {
     return sb.toString();
   }
 
+  @Override
+  public Integer getZ() {
+    return 0;
+  }
+
+  @Override
+  public void setZ(Integer z) {
+    logger.warn("Not implemented");
+  }
+
+  @Override
+  public double getSize() {
+    return 0;
+  }
+
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java b/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java
index e147071fdafafc2e16a69bb4f359e5d16f340b92..b7ab37bcb5cc006682bd19585a6593ea7658e0df 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/BioEntity.java
@@ -15,7 +15,7 @@ import lcsb.mapviewer.model.map.reaction.Reaction;
  * @author Piotr Gawron
  * 
  */
-public interface BioEntity extends Serializable {
+public interface BioEntity extends Serializable, Drawable {
   Comparator<? super BioEntity> ID_COMPARATOR = new Comparator<BioEntity>() {
 
     @Override
@@ -200,19 +200,4 @@ public interface BioEntity extends Serializable {
 
   BioEntity copy();
 
-  /**
-   * Returns z-index of the graphical representation.
-   * 
-   * @return z-index of the graphical representation
-   */
-  Integer getZ();
-
-  /**
-   * Sets z-index of the graphical representation.
-   * 
-   * @param z
-   *          z-index of the graphical representation
-   */
-  void setZ(Integer z);
-
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/Drawable.java b/model/src/main/java/lcsb/mapviewer/model/map/Drawable.java
new file mode 100644
index 0000000000000000000000000000000000000000..72c198d18107e8ea33a8f69d58d3540a345d9ec6
--- /dev/null
+++ b/model/src/main/java/lcsb/mapviewer/model/map/Drawable.java
@@ -0,0 +1,41 @@
+package lcsb.mapviewer.model.map;
+
+import java.util.Comparator;
+
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.common.comparator.IntegerComparator;
+
+public interface Drawable {
+  
+  Comparator<? super Drawable> Z_INDEX_COMPARATOR = new Comparator<Drawable>() {
+    private IntegerComparator integerComparator = new IntegerComparator();
+
+    @Override
+    public int compare(Drawable o1, Drawable o2) {
+      Logger.getLogger(Drawable.class).debug(o1);
+      Logger.getLogger(Drawable.class).debug(o2);
+      int id1 = o1.getZ();
+      int id2 = o2.getZ();
+      return integerComparator.compare(id1, id2);
+    }
+  };
+
+  
+  /**
+   * Returns z-index of the graphical representation.
+   * 
+   * @return z-index of the graphical representation
+   */
+  Integer getZ();
+
+  /**
+   * Sets z-index of the graphical representation.
+   * 
+   * @param z
+   *          z-index of the graphical representation
+   */
+  void setZ(Integer z);
+
+  double getSize();
+}
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/Layer.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/Layer.java
index a44fad8785ef94feef83faaeff904759e69110ff..7b397afc3a648759fdd13391c641a5fcc5ebccef 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/Layer.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/Layer.java
@@ -3,7 +3,9 @@ package lcsb.mapviewer.model.map.layout.graphics;
 import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.List;
+import java.util.Set;
 
 import javax.persistence.Entity;
 import javax.persistence.FetchType;
@@ -22,6 +24,7 @@ import org.hibernate.annotations.CascadeType;
 
 import lcsb.mapviewer.common.exception.NotImplementedException;
 import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.model.ModelData;
 
 /**
@@ -408,4 +411,13 @@ public class Layer implements Serializable {
   public boolean isEmpty() {
     return this.getOvals().size() == 0 && this.getRectangles().size() == 0 && this.getTexts().size() == 0 && this.getLines().size()==0;
   }
+
+  public Set<Drawable> getDrawables() {
+    Set<Drawable> result = new HashSet<>();
+    result.addAll(lines);
+    result.addAll(ovals);
+    result.addAll(rectangles);
+    result.addAll(texts);
+    return result;
+  }
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOval.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOval.java
index 6b3c59cad42b57616e63700cc24f0a26e852a782..4361ed2adaa048c67b8057dd8b768a3099fe9833 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOval.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOval.java
@@ -12,6 +12,7 @@ import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.common.exception.NotImplementedException;
+import lcsb.mapviewer.model.map.Drawable;
 
 /**
  * This class describes ellipse in the layer.
@@ -20,7 +21,7 @@ import lcsb.mapviewer.common.exception.NotImplementedException;
  * 
  */
 @Entity
-public class LayerOval implements Serializable {
+public class LayerOval implements Serializable, Drawable {
 
   /**
    * 
@@ -65,6 +66,11 @@ public class LayerOval implements Serializable {
    */
   private Double height = 0.0;
 
+  /**
+   * Z index.
+   */
+  private Integer z;
+
   /**
    * Default constructor.
    */
@@ -82,6 +88,7 @@ public class LayerOval implements Serializable {
     this.color = layerOval.getColor();
     this.x = layerOval.getX();
     this.y = layerOval.getX();
+    this.z = layerOval.getZ();
     this.width = layerOval.getWidth();
     this.height = layerOval.getHeight();
   }
@@ -257,4 +264,19 @@ public class LayerOval implements Serializable {
     this.height = height;
   }
 
+  @Override
+  public Integer getZ() {
+    return z;
+  }
+
+  @Override
+  public void setZ(Integer z) {
+    this.z = z;
+  }
+
+  @Override
+  public double getSize() {
+    return width*height;
+  }
+
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparator.java
index 4e036b93c7606ee2233009eeac03b2bba9158a82..28e0d8ca5051488d2f8e4dc9a21b912e3846bba9 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparator.java
@@ -4,6 +4,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;
 
 /**
  * Comparator of {@link LayerOval} class.
@@ -41,6 +42,7 @@ public class LayerOvalComparator extends Comparator<LayerOval> {
   protected int internalCompare(LayerOval arg0, LayerOval arg1) {
     DoubleComparator doubleComparator = new DoubleComparator(epsilon);
     ColorComparator colorComparator = new ColorComparator();
+    IntegerComparator integerComparator = new IntegerComparator();
 
     if (doubleComparator.compare(arg0.getWidth(), arg1.getWidth()) != 0) {
       return doubleComparator.compare(arg0.getWidth(), arg1.getWidth());
@@ -58,6 +60,10 @@ public class LayerOvalComparator extends Comparator<LayerOval> {
       return doubleComparator.compare(arg0.getY(), arg1.getY());
     }
 
+    if (integerComparator.compare(arg0.getZ(), arg1.getZ()) != 0) {
+      return integerComparator.compare(arg0.getZ(), arg1.getZ());
+    }
+
     if (colorComparator.compare(arg0.getColor(), arg1.getColor()) != 0) {
       return colorComparator.compare(arg0.getColor(), arg1.getColor());
     }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRect.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRect.java
index fb50c27a8915fc3f721d4dbb75c773d1fd2eb598..493d3ab9e76bb89a372ded30a9e2ff14085e1bb4 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRect.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRect.java
@@ -12,6 +12,7 @@ import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.common.exception.NotImplementedException;
+import lcsb.mapviewer.model.map.Drawable;
 
 /**
  * This class describes rectangle in the layer.
@@ -20,7 +21,7 @@ import lcsb.mapviewer.common.exception.NotImplementedException;
  * 
  */
 @Entity
-public class LayerRect implements Serializable {
+public class LayerRect implements Serializable, Drawable {
 
   /**
    * 
@@ -87,6 +88,7 @@ public class LayerRect implements Serializable {
     color = layerRect.getColor();
     x = layerRect.getX();
     y = layerRect.getY();
+    z = layerRect.getZ();
     width = layerRect.getWidth();
     height = layerRect.getHeight();
   }
@@ -245,11 +247,18 @@ public class LayerRect implements Serializable {
     this.height = height;
   }
 
+  @Override
   public Integer getZ() {
     return z;
   }
 
+  @Override
   public void setZ(Integer z) {
     this.z = z;
   }
+
+  @Override
+  public double getSize() {
+    return width * height;
+  }
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparator.java
index d9c00d40bb4ac4024b1f0752126b7dea7ad700ac..90c3453f38276f6727a210ad9bd37629d00a1c31 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparator.java
@@ -4,6 +4,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;
 
 /**
  * Compparator of {@link LayerRect} class.
@@ -41,6 +42,7 @@ public class LayerRectComparator extends Comparator<LayerRect> {
   protected int internalCompare(LayerRect arg0, LayerRect arg1) {
     DoubleComparator doubleComparator = new DoubleComparator(epsilon);
     ColorComparator colorComparator = new ColorComparator();
+    IntegerComparator integerComparator = new IntegerComparator();
 
     if (doubleComparator.compare(arg0.getWidth(), arg1.getWidth()) != 0) {
       return doubleComparator.compare(arg0.getWidth(), arg1.getWidth());
@@ -62,6 +64,11 @@ public class LayerRectComparator extends Comparator<LayerRect> {
       return colorComparator.compare(arg0.getColor(), arg1.getColor());
     }
 
+    if (integerComparator.compare(arg0.getZ(), arg1.getZ()) != 0) {
+      return integerComparator.compare(arg0.getZ(), arg1.getZ());
+    }
+
+
     return 0;
   }
 
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java
index 1a09e69c59d45be149d355e080307003d8ae31e9..af87c2ee02a97d8a8fbba75da6db259464ad1f2a 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java
@@ -13,6 +13,7 @@ import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.common.exception.NotImplementedException;
+import lcsb.mapviewer.model.map.Drawable;
 
 /**
  * This class describes single text in the layer.
@@ -21,7 +22,7 @@ import lcsb.mapviewer.common.exception.NotImplementedException;
  * 
  */
 @Entity
-public class LayerText implements Serializable {
+public class LayerText implements Serializable, Drawable {
 
   /**
    * 
@@ -124,6 +125,7 @@ public class LayerText implements Serializable {
     color = layerText.getColor();
     x = layerText.getX();
     y = layerText.getY();
+    z = layerText.getZ();
     width = layerText.getWidth();
     height = layerText.getHeight();
     notes = layerText.getNotes();
@@ -355,12 +357,19 @@ public class LayerText implements Serializable {
     return "[" + this.getClass().getSimpleName() + ": " + this.getNotes() + "]";
   }
 
+  @Override
   public Integer getZ() {
     return z;
   }
 
+  @Override
   public void setZ(Integer z) {
     this.z = z;
   }
 
+  @Override
+  public double getSize() {
+    return width * height;
+  }
+
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparator.java
index 44870e9533a5edcd84981e19d5c0339d4c2b6223..385f5679fa03c1f3e8fd4d84df06e43a0fca0f1f 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparator.java
@@ -4,10 +4,11 @@ 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.StringComparator;
 
 /**
- * Compparator of {@link LayerText} class.
+ * Comparator of {@link LayerText} class.
  * 
  * @author Piotr Gawron
  * 
@@ -43,6 +44,7 @@ public class LayerTextComparator extends Comparator<LayerText> {
     DoubleComparator doubleComparator = new DoubleComparator(epsilon);
     StringComparator stringComparator = new StringComparator();
     ColorComparator colorComparator = new ColorComparator();
+    IntegerComparator integerComparator = new IntegerComparator();
 
     if (doubleComparator.compare(arg0.getWidth(), arg1.getWidth()) != 0) {
       return doubleComparator.compare(arg0.getWidth(), arg1.getWidth());
@@ -72,6 +74,10 @@ public class LayerTextComparator extends Comparator<LayerText> {
       return doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize());
     }
 
+    if (integerComparator.compare(arg0.getZ(), arg1.getZ()) != 0) {
+      return integerComparator.compare(arg0.getZ(), arg1.getZ());
+    }
+
     return 0;
   }
 
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java b/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java
index f7d388b2bef3e34edab7de55306851a273655a0a..f9df9d1113e7e79bffc0ee321fe8137ac39acb2c 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/Model.java
@@ -255,20 +255,6 @@ public interface Model {
    */
   void removeElement(Element element);
 
-  /**
-   * Returns list of reactions sorted by reaction id.
-   * 
-   * @return list of reactions sorted by reaction id
-   */
-  List<Reaction> getSortedReactions();
-
-  /**
-   * Return list of elements sorted by the size.
-   * 
-   * @return list of elements sorted by the size
-   */
-  List<Element> getSortedSpeciesList();
-
   /**
    * Returns collection of all {@link Species} excluding {@link Complex}.
    * 
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java
index 673691677bc092b290167dba9806caa7056b3638..43480ff428104085b1484ddd2d4b84da5d836c43 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/model/ModelFullIndexed.java
@@ -331,22 +331,6 @@ public class ModelFullIndexed implements Model {
     }
   }
 
-  @Override
-  public List<Element> getSortedSpeciesList() {
-    List<Element> result = new ArrayList<>();
-    result.addAll(getElements());
-    Collections.sort(result, Element.SIZE_COMPARATOR);
-    return result;
-  }
-
-  @Override
-  public List<Reaction> getSortedReactions() {
-    List<Reaction> result = new ArrayList<>();
-    result.addAll(getReactions());
-    Collections.sort(result, Reaction.ID_COMPARATOR);
-    return result;
-  }
-
   @Override
   public void addElementGroup(ElementGroup elementGroup) {
     modelData.addElementGroup(elementGroup);
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java b/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java
index 4ecb9bafec0e060372e3345ecf3f5871c80398fb..02a9d8b2e9e0f37470d13f90aec51918c77d8c3c 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/reaction/Reaction.java
@@ -920,4 +920,9 @@ public class Reaction implements BioEntity {
   public void setZ(Integer z) {
     this.z = z;
   }
+
+  @Override
+  public double getSize() {
+    return 0;
+  }
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparatorTest.java
index 468210ea8e474db497234a2209ba0f5117a9d8fa..f95ddfcac4fbb95ac860e852d516ad4b71284510 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparatorTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalComparatorTest.java
@@ -1,6 +1,8 @@
 package lcsb.mapviewer.model.map.layout.graphics;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.awt.Color;
 
@@ -11,132 +13,148 @@ import org.junit.Test;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public class LayerOvalComparatorTest {
-	LayerOvalComparator comparator = new LayerOvalComparator();
-
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testEquals() {
-		try {
-			LayerOval layer1 = getLayerOval();
-			LayerOval layer2 = getLayerOval();
-			
-			assertEquals(0, comparator.compare(new LayerOval(), new LayerOval()));
-			assertEquals(0, comparator.compare(layer1, layer2));
-			assertEquals(0, comparator.compare(layer1, layer1));
-			assertEquals(0, comparator.compare(null,null));
-			
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-
-	private LayerOval getLayerOval() {
-		
-		LayerOval line = new LayerOval();
-		line.setColor(Color.YELLOW);
-		line.setWidth(4.3);
-		
-		
-		return line;
-	}
-
-	@Test
-	public void testDifferent() {
-		try {
-			LayerOval layer1 = getLayerOval();
-			LayerOval layer2 = getLayerOval();
-			
-			assertTrue(comparator.compare(layer1, new LayerOval())!=0);
-
-			assertTrue(comparator.compare(layer1, null)!=0);
-			assertTrue(comparator.compare(null,layer1)!=0);
-			
-			layer1 = getLayerOval();
-			layer2 = getLayerOval();
-			
-			layer1.setColor(Color.GREEN);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerOval();
-			layer2 = getLayerOval();
-			
-			layer1.setHeight(78.0);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerOval();
-			layer2 = getLayerOval();
-			
-			layer1.setHeight(1.2);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerOval();
-			layer2 = getLayerOval();
-			
-			layer1.setX(33.4);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerOval();
-			layer2 = getLayerOval();
-			
-			layer1.setY(33.4);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-	
-	@Test
-	public void testDifferent2() {
-		try {
-			LayerOval layer1 = getLayerOval();
-
-			assertTrue(comparator.compare(layer1, new LayerOval() {
-				private static final long serialVersionUID = 1L;
-			}) != 0);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-
-	@Test
-	public void testInvalid() {
-		try {
-			class Tmp extends LayerOval {
-				private static final long serialVersionUID = 1L;
-			}
-			Tmp layer1 = new Tmp();
-			Tmp layer2 = new Tmp();
-
-			comparator.compare(layer1, layer2);
-			fail("Exception expected");
-
-		} catch (NotImplementedException e) {
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-	
+  LayerOvalComparator comparator = new LayerOvalComparator();
+
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testEquals() {
+    try {
+      LayerOval layer1 = getLayerOval();
+      LayerOval layer2 = getLayerOval();
+
+      assertEquals(0, comparator.compare(new LayerOval(), new LayerOval()));
+      assertEquals(0, comparator.compare(layer1, layer2));
+      assertEquals(0, comparator.compare(layer1, layer1));
+      assertEquals(0, comparator.compare(null, null));
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  private LayerOval getLayerOval() {
+
+    LayerOval line = new LayerOval();
+    line.setColor(Color.YELLOW);
+    line.setWidth(4.3);
+
+    return line;
+  }
+
+  @Test
+  public void testDifferent() {
+    try {
+      LayerOval layer1 = getLayerOval();
+      LayerOval layer2 = getLayerOval();
+
+      assertTrue(comparator.compare(layer1, new LayerOval()) != 0);
+
+      assertTrue(comparator.compare(layer1, null) != 0);
+      assertTrue(comparator.compare(null, layer1) != 0);
+
+      layer1 = getLayerOval();
+      layer2 = getLayerOval();
+
+      layer1.setColor(Color.GREEN);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerOval();
+      layer2 = getLayerOval();
+
+      layer1.setHeight(78.0);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerOval();
+      layer2 = getLayerOval();
+
+      layer1.setHeight(1.2);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerOval();
+      layer2 = getLayerOval();
+
+      layer1.setX(33.4);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerOval();
+      layer2 = getLayerOval();
+
+      layer1.setY(33.4);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  @Test
+  public void testDifferentZIndex() {
+    try {
+      LayerOval layer1 = getLayerOval();
+      LayerOval layer2 = getLayerOval();
+
+      layer1.setZ(12);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testDifferent2() {
+    try {
+      LayerOval layer1 = getLayerOval();
+
+      assertTrue(comparator.compare(layer1, new LayerOval() {
+        private static final long serialVersionUID = 1L;
+      }) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  @Test
+  public void testInvalid() {
+    try {
+      class Tmp extends LayerOval {
+        private static final long serialVersionUID = 1L;
+      }
+      Tmp layer1 = new Tmp();
+      Tmp layer2 = new Tmp();
+
+      comparator.compare(layer1, layer2);
+      fail("Exception expected");
+
+    } catch (NotImplementedException e) {
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalTest.java
index ee96a805c25a7518710bd589632340672955518b..8eb3193486a26e659dd425feb204d90ed8ed5222 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerOvalTest.java
@@ -18,148 +18,155 @@ import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public class LayerOvalTest {
 
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testSerialization() {
-		try {
-			SerializationUtils.serialize(new LayerOval());
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testConstructor1() {
-		try {
-			LayerOval layerOval = new LayerOval();
-
-			LayerOval copy = new LayerOval(layerOval);
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testCopy() {
-		try {
-			LayerOval copy = new LayerOval().copy();
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testInvalidCopy() {
-		try {
-			new LayerOval() {
-
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-			}.copy();
-
-			fail("Exception expected");
-		} catch (NotImplementedException e) {
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testGetters() {
-		try {
-			LayerOval oval = new LayerOval();
-
-			String yParam = "1.2";
-			Double y = 1.2;
-
-			String xParam = "2.2";
-			Double x = 2.2;
-
-			String widthParam = "10.2";
-			Double width = 10.2;
-
-			String heightParam = "72.2";
-			Double height = 72.2;
-
-			String invalidNumberStr = "xxd";
-
-			int id = 52;
-			Color color = Color.BLACK;
-
-			oval.setY(yParam);
-			assertEquals(y, oval.getY(), Configuration.EPSILON);
-			try {
-				oval.setY(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			oval.setY((Double) null);
-			assertNull(oval.getY());
-			oval.setY(y);
-			assertEquals(y, oval.getY(), Configuration.EPSILON);
-
-			oval.setX(xParam);
-			assertEquals(x, oval.getX(), Configuration.EPSILON);
-			try {
-				oval.setX(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			oval.setX((Double) null);
-			assertNull(oval.getX());
-			oval.setX(x);
-			assertEquals(x, oval.getX(), Configuration.EPSILON);
-
-			oval.setWidth(widthParam);
-			assertEquals(width, oval.getWidth(), Configuration.EPSILON);
-			try {
-				oval.setWidth(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			oval.setWidth((Double) null);
-			assertNull(oval.getWidth());
-			oval.setWidth(width);
-			assertEquals(width, oval.getWidth(), Configuration.EPSILON);
-
-			oval.setHeight(heightParam);
-			assertEquals(height, oval.getHeight(), Configuration.EPSILON);
-			try {
-				oval.setHeight(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			oval.setHeight((Double) null);
-			assertNull(oval.getHeight());
-			oval.setHeight(height);
-			assertEquals(height, oval.getHeight(), Configuration.EPSILON);
-
-			oval.setId(id);
-			assertEquals(id, oval.getId());
-			oval.setColor(color);
-			assertEquals(color, oval.getColor());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testSerialization() {
+    try {
+      SerializationUtils.serialize(createOval());
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testConstructor1() {
+    try {
+      LayerOval layerOval = createOval();
+
+      LayerOval copy = new LayerOval(layerOval);
+
+      assertNotNull(copy);
+      assertEquals(0, new LayerOvalComparator().compare(layerOval, copy));
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  private LayerOval createOval() {
+    LayerOval  result = new LayerOval();
+    result.setZ(14);
+    return result;
+  }
+
+  @Test
+  public void testCopy() {
+    try {
+      LayerOval copy = createOval().copy();
+
+      assertNotNull(copy);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testInvalidCopy() {
+    try {
+      new LayerOval() {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1L;
+      }.copy();
+
+      fail("Exception expected");
+    } catch (NotImplementedException e) {
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testGetters() {
+    try {
+      LayerOval oval = createOval();
+
+      String yParam = "1.2";
+      Double y = 1.2;
+
+      String xParam = "2.2";
+      Double x = 2.2;
+
+      String widthParam = "10.2";
+      Double width = 10.2;
+
+      String heightParam = "72.2";
+      Double height = 72.2;
+
+      String invalidNumberStr = "xxd";
+
+      int id = 52;
+      Color color = Color.BLACK;
+
+      oval.setY(yParam);
+      assertEquals(y, oval.getY(), Configuration.EPSILON);
+      try {
+        oval.setY(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      oval.setY((Double) null);
+      assertNull(oval.getY());
+      oval.setY(y);
+      assertEquals(y, oval.getY(), Configuration.EPSILON);
+
+      oval.setX(xParam);
+      assertEquals(x, oval.getX(), Configuration.EPSILON);
+      try {
+        oval.setX(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      oval.setX((Double) null);
+      assertNull(oval.getX());
+      oval.setX(x);
+      assertEquals(x, oval.getX(), Configuration.EPSILON);
+
+      oval.setWidth(widthParam);
+      assertEquals(width, oval.getWidth(), Configuration.EPSILON);
+      try {
+        oval.setWidth(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      oval.setWidth((Double) null);
+      assertNull(oval.getWidth());
+      oval.setWidth(width);
+      assertEquals(width, oval.getWidth(), Configuration.EPSILON);
+
+      oval.setHeight(heightParam);
+      assertEquals(height, oval.getHeight(), Configuration.EPSILON);
+      try {
+        oval.setHeight(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      oval.setHeight((Double) null);
+      assertNull(oval.getHeight());
+      oval.setHeight(height);
+      assertEquals(height, oval.getHeight(), Configuration.EPSILON);
+
+      oval.setId(id);
+      assertEquals(id, oval.getId());
+      oval.setColor(color);
+      assertEquals(color, oval.getColor());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
 
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparatorTest.java
index e3a3ebe5d9ded0ffa76e8af0e2453b911a61ab28..1e7d8685f34c26057bc83ea83cb062d39aa8a82b 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparatorTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectComparatorTest.java
@@ -1,6 +1,8 @@
 package lcsb.mapviewer.model.map.layout.graphics;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
 
 import java.awt.Color;
 
@@ -11,131 +13,149 @@ import org.junit.Test;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public class LayerRectComparatorTest {
-	LayerRectComparator comparator = new LayerRectComparator();
-
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testEquals() {
-		try {
-			LayerRect layer1 = getLayerRect();
-			LayerRect layer2 = getLayerRect();
-			
-			assertEquals(0, comparator.compare(new LayerRect(), new LayerRect()));
-			assertEquals(0, comparator.compare(layer1, layer2));
-			assertEquals(0, comparator.compare(layer1, layer1));
-			assertEquals(0, comparator.compare(null,null));
-			
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-
-	private LayerRect getLayerRect() {
-		
-		LayerRect line = new LayerRect();
-		line.setColor(Color.YELLOW);
-		line.setWidth(4.3);
-		
-		
-		return line;
-	}
-
-	@Test
-	public void testDifferent() {
-		try {
-			LayerRect layer1 = getLayerRect();
-			LayerRect layer2 = getLayerRect();
-			
-			assertTrue(comparator.compare(layer1, new LayerRect())!=0);
-
-			assertTrue(comparator.compare(layer1, null)!=0);
-			assertTrue(comparator.compare(null,layer1)!=0);
-			
-			layer1 = getLayerRect();
-			layer2 = getLayerRect();
-			
-			layer1.setColor(Color.GREEN);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerRect();
-			layer2 = getLayerRect();
-			
-			layer1.setHeight("23");
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerRect();
-			layer2 = getLayerRect();
-			
-			layer1.setHeight(1.2);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerRect();
-			layer2 = getLayerRect();
-			
-			layer1.setX(33.4);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-			layer1 = getLayerRect();
-			layer2 = getLayerRect();
-			
-			layer1.setY(33.4);
-			
-			assertTrue(comparator.compare(layer1, layer2)!=0);
-			assertTrue(comparator.compare(layer2, layer1)!=0);
-			
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-	@Test
-	public void testDifferent2() {
-		try {
-			LayerRect layer1 = getLayerRect();
-
-			assertTrue(comparator.compare(layer1, new LayerRect() {
-				private static final long serialVersionUID = 1L;
-			}) != 0);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
-
-	@Test
-	public void testInvalid() {
-		try {
-			class Tmp extends LayerRect {
-				private static final long serialVersionUID = 1L;
-			}
-			Tmp layer1 = new Tmp();
-			Tmp layer2 = new Tmp();
-
-			comparator.compare(layer1, layer2);
-			fail("Exception expected");
-
-		} catch (NotImplementedException e) {
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
+  LayerRectComparator comparator = new LayerRectComparator();
+
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testEquals() {
+    try {
+      LayerRect layer1 = getLayerRect();
+      LayerRect layer2 = getLayerRect();
+
+      assertEquals(0, comparator.compare(new LayerRect(), new LayerRect()));
+      assertEquals(0, comparator.compare(layer1, layer2));
+      assertEquals(0, comparator.compare(layer1, layer1));
+      assertEquals(0, comparator.compare(null, null));
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  private LayerRect getLayerRect() {
+
+    LayerRect line = new LayerRect();
+    line.setColor(Color.YELLOW);
+    line.setWidth(4.3);
+
+    return line;
+  }
+
+  @Test
+  public void testDifferent() {
+    try {
+      LayerRect layer1 = getLayerRect();
+      LayerRect layer2 = getLayerRect();
+
+      assertTrue(comparator.compare(layer1, new LayerRect()) != 0);
+
+      assertTrue(comparator.compare(layer1, null) != 0);
+      assertTrue(comparator.compare(null, layer1) != 0);
+
+      layer1 = getLayerRect();
+      layer2 = getLayerRect();
+
+      layer1.setColor(Color.GREEN);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerRect();
+      layer2 = getLayerRect();
+
+      layer1.setHeight("23");
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerRect();
+      layer2 = getLayerRect();
+
+      layer1.setHeight(1.2);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerRect();
+      layer2 = getLayerRect();
+
+      layer1.setX(33.4);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+      layer1 = getLayerRect();
+      layer2 = getLayerRect();
+
+      layer1.setY(33.4);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  @Test
+  public void testDifferent2() {
+    try {
+      LayerRect layer1 = getLayerRect();
+
+      assertTrue(comparator.compare(layer1, new LayerRect() {
+        private static final long serialVersionUID = 1L;
+      }) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  @Test
+  public void testInvalid() {
+    try {
+      class Tmp extends LayerRect {
+        private static final long serialVersionUID = 1L;
+      }
+      Tmp layer1 = new Tmp();
+      Tmp layer2 = new Tmp();
+
+      comparator.compare(layer1, layer2);
+      fail("Exception expected");
+
+    } catch (NotImplementedException e) {
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  @Test
+  public void testDifferentZIndex() {
+    try {
+      LayerRect layer1 = getLayerRect();
+      LayerRect layer2 = getLayerRect();
+
+      layer1.setZ(12);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
 
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectTest.java
index ed02f6ef577508bc733ea50767d2c2dfccd3e653..b11a8d351a1cbbf2862436bfbb138d88d5544284 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerRectTest.java
@@ -18,145 +18,152 @@ import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public class LayerRectTest {
 
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testSerialization() {
-		try {
-			SerializationUtils.serialize(new LayerRect());
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testConstructor1() {
-		try {
-			LayerRect layerRect = new LayerRect();
-
-			LayerRect copy = new LayerRect(layerRect);
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testCopy() {
-		try {
-			LayerRect copy = new LayerRect().copy();
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testInvalidCopy() {
-		try {
-			new LayerRect() {
-
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-			}.copy();
-
-			fail("Exception expected");
-		} catch (NotImplementedException e) {
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testGetters() {
-		try {
-			LayerRect rect = new LayerRect();
-
-			String yParam = "1.2";
-			Double y = 1.2;
-
-			String xParam = "2.2";
-			Double x = 2.2;
-
-			String widthParam = "10.2";
-			Double width = 10.2;
-
-			String heightParam = "72.2";
-			Double height = 72.2;
-
-			String invalidNumberStr = "xxd";
-
-			Color color = Color.BLACK;
-
-			rect.setY(yParam);
-			assertEquals(y, rect.getY(), Configuration.EPSILON);
-			try {
-				rect.setY(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			rect.setY((Double) null);
-			assertNull(rect.getY());
-			rect.setY(y);
-			assertEquals(y, rect.getY(), Configuration.EPSILON);
-
-			rect.setX(xParam);
-			assertEquals(x, rect.getX(), Configuration.EPSILON);
-			try {
-				rect.setX(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			rect.setX((Double) null);
-			assertNull(rect.getX());
-			rect.setX(x);
-			assertEquals(x, rect.getX(), Configuration.EPSILON);
-
-			rect.setWidth(widthParam);
-			assertEquals(width, rect.getWidth(), Configuration.EPSILON);
-			try {
-				rect.setWidth(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			rect.setWidth((Double) null);
-			assertNull(rect.getWidth());
-			rect.setWidth(width);
-			assertEquals(width, rect.getWidth(), Configuration.EPSILON);
-
-			rect.setHeight(heightParam);
-			assertEquals(height, rect.getHeight(), Configuration.EPSILON);
-			try {
-				rect.setHeight(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			rect.setHeight((Double) null);
-			assertNull(rect.getHeight());
-			rect.setHeight(height);
-			assertEquals(height, rect.getHeight(), Configuration.EPSILON);
-
-			rect.setColor(color);
-			assertEquals(color, rect.getColor());
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testSerialization() {
+    try {
+      SerializationUtils.serialize(createRect());
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testConstructor1() {
+    try {
+      LayerRect layerRect = createRect();
+
+      LayerRect copy = new LayerRect(layerRect);
+
+      assertNotNull(copy);
+      assertEquals(0, new LayerRectComparator().compare(layerRect, copy));
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  private LayerRect createRect() {
+    LayerRect result = new LayerRect();
+    result.setZ(14);
+    return result;
+  }
+
+  @Test
+  public void testCopy() {
+    try {
+      LayerRect copy = createRect().copy();
+
+      assertNotNull(copy);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testInvalidCopy() {
+    try {
+      new LayerRect() {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1L;
+      }.copy();
+
+      fail("Exception expected");
+    } catch (NotImplementedException e) {
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testGetters() {
+    try {
+      LayerRect rect = createRect();
+
+      String yParam = "1.2";
+      Double y = 1.2;
+
+      String xParam = "2.2";
+      Double x = 2.2;
+
+      String widthParam = "10.2";
+      Double width = 10.2;
+
+      String heightParam = "72.2";
+      Double height = 72.2;
+
+      String invalidNumberStr = "xxd";
+
+      Color color = Color.BLACK;
+
+      rect.setY(yParam);
+      assertEquals(y, rect.getY(), Configuration.EPSILON);
+      try {
+        rect.setY(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      rect.setY((Double) null);
+      assertNull(rect.getY());
+      rect.setY(y);
+      assertEquals(y, rect.getY(), Configuration.EPSILON);
+
+      rect.setX(xParam);
+      assertEquals(x, rect.getX(), Configuration.EPSILON);
+      try {
+        rect.setX(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      rect.setX((Double) null);
+      assertNull(rect.getX());
+      rect.setX(x);
+      assertEquals(x, rect.getX(), Configuration.EPSILON);
+
+      rect.setWidth(widthParam);
+      assertEquals(width, rect.getWidth(), Configuration.EPSILON);
+      try {
+        rect.setWidth(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      rect.setWidth((Double) null);
+      assertNull(rect.getWidth());
+      rect.setWidth(width);
+      assertEquals(width, rect.getWidth(), Configuration.EPSILON);
+
+      rect.setHeight(heightParam);
+      assertEquals(height, rect.getHeight(), Configuration.EPSILON);
+      try {
+        rect.setHeight(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      rect.setHeight((Double) null);
+      assertNull(rect.getHeight());
+      rect.setHeight(height);
+      assertEquals(height, rect.getHeight(), Configuration.EPSILON);
+
+      rect.setColor(color);
+      assertEquals(color, rect.getColor());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
 
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparatorTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparatorTest.java
index ad94f9b49a8b0bfeefe962ace4d2731149e1d21d..71047387d9329ea490ac0f4850d4161e8dd7630f 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparatorTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextComparatorTest.java
@@ -13,139 +13,157 @@ import org.junit.Test;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public class LayerTextComparatorTest {
-	LayerTextComparator comparator = new LayerTextComparator();
+  LayerTextComparator comparator = new LayerTextComparator();
 
-	@Before
-	public void setUp() throws Exception {
-	}
+  @Before
+  public void setUp() throws Exception {
+  }
 
-	@After
-	public void tearDown() throws Exception {
-	}
+  @After
+  public void tearDown() throws Exception {
+  }
 
-	@Test
-	public void testEquals() {
-		try {
-			LayerText layer1 = getLayerText();
-			LayerText layer2 = getLayerText();
+  @Test
+  public void testEquals() {
+    try {
+      LayerText layer1 = getLayerText();
+      LayerText layer2 = getLayerText();
 
-			assertEquals(0, comparator.compare(new LayerText(), new LayerText()));
-			assertEquals(0, comparator.compare(layer1, layer2));
-			assertEquals(0, comparator.compare(layer1, layer1));
-			assertEquals(0, comparator.compare(null, null));
+      assertEquals(0, comparator.compare(new LayerText(), new LayerText()));
+      assertEquals(0, comparator.compare(layer1, layer2));
+      assertEquals(0, comparator.compare(layer1, layer1));
+      assertEquals(0, comparator.compare(null, null));
 
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
 
-	@Test
-	public void testDifferent2() {
-		try {
-			LayerText layer1 = getLayerText();
+  @Test
+  public void testDifferent2() {
+    try {
+      LayerText layer1 = getLayerText();
 
-			assertTrue(comparator.compare(layer1, new LayerText() {
-				private static final long serialVersionUID = 1L;
-			}) != 0);
+      assertTrue(comparator.compare(layer1, new LayerText() {
+        private static final long serialVersionUID = 1L;
+      }) != 0);
 
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
 
-	@Test
-	public void testInvalid() {
-		try {
-			class Tmp extends LayerText {
-				private static final long serialVersionUID = 1L;
-			}
-			Tmp layer1 = new Tmp();
-			Tmp layer2 = new Tmp();
+  @Test
+  public void testInvalid() {
+    try {
+      class Tmp extends LayerText {
+        private static final long serialVersionUID = 1L;
+      }
+      Tmp layer1 = new Tmp();
+      Tmp layer2 = new Tmp();
 
-			comparator.compare(layer1, layer2);
+      comparator.compare(layer1, layer2);
 
-			fail("Exception expected");
-		} catch (NotImplementedException e) {
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
+      fail("Exception expected");
+    } catch (NotImplementedException e) {
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
 
-	private LayerText getLayerText() {
+  private LayerText getLayerText() {
 
-		LayerText line = new LayerText();
-		line.setColor(Color.YELLOW);
-		line.setNotes(":asd");
-		line.setFontSize(4.3);
+    LayerText line = new LayerText();
+    line.setColor(Color.YELLOW);
+    line.setNotes(":asd");
+    line.setFontSize(4.3);
 
-		return line;
-	}
+    return line;
+  }
 
-	@Test
-	public void testDifferent() {
-		try {
-			LayerText layer1 = getLayerText();
-			LayerText layer2 = getLayerText();
+  @Test
+  public void testDifferent() {
+    try {
+      LayerText layer1 = getLayerText();
+      LayerText layer2 = getLayerText();
 
-			assertTrue(comparator.compare(layer1, new LayerText()) != 0);
+      assertTrue(comparator.compare(layer1, new LayerText()) != 0);
 
-			assertTrue(comparator.compare(layer1, null) != 0);
-			assertTrue(comparator.compare(null, layer1) != 0);
+      assertTrue(comparator.compare(layer1, null) != 0);
+      assertTrue(comparator.compare(null, layer1) != 0);
 
-			layer1 = getLayerText();
-			layer2 = getLayerText();
+      layer1 = getLayerText();
+      layer2 = getLayerText();
 
-			layer1.setColor(Color.GREEN);
+      layer1.setColor(Color.GREEN);
 
-			assertTrue(comparator.compare(layer1, layer2) != 0);
-			assertTrue(comparator.compare(layer2, layer1) != 0);
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
 
-			layer1 = getLayerText();
-			layer2 = getLayerText();
+      layer1 = getLayerText();
+      layer2 = getLayerText();
 
-			layer1.setNotes("asd");
+      layer1.setNotes("asd");
 
-			assertTrue(comparator.compare(layer1, layer2) != 0);
-			assertTrue(comparator.compare(layer2, layer1) != 0);
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
 
-			layer1 = getLayerText();
-			layer2 = getLayerText();
+      layer1 = getLayerText();
+      layer2 = getLayerText();
 
-			layer1.setHeight(1.2);
+      layer1.setHeight(1.2);
 
-			assertTrue(comparator.compare(layer1, layer2) != 0);
-			assertTrue(comparator.compare(layer2, layer1) != 0);
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
 
-			layer1 = getLayerText();
-			layer2 = getLayerText();
+      layer1 = getLayerText();
+      layer2 = getLayerText();
 
-			layer1.setX(33.4);
+      layer1.setX(33.4);
 
-			assertTrue(comparator.compare(layer1, layer2) != 0);
-			assertTrue(comparator.compare(layer2, layer1) != 0);
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
 
-			layer1 = getLayerText();
-			layer2 = getLayerText();
+      layer1 = getLayerText();
+      layer2 = getLayerText();
 
-			layer1.setY(33.4);
+      layer1.setY(33.4);
 
-			assertTrue(comparator.compare(layer1, layer2) != 0);
-			assertTrue(comparator.compare(layer2, layer1) != 0);
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
 
-			layer1 = getLayerText();
-			layer2 = getLayerText();
+      layer1 = getLayerText();
+      layer2 = getLayerText();
 
-			layer1.setFontSize(64.1);
+      layer1.setFontSize(64.1);
 
-			assertTrue(comparator.compare(layer1, layer2) != 0);
-			assertTrue(comparator.compare(layer2, layer1) != 0);
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      fail("Unknown exception");
+    }
+  }
+
+  @Test
+  public void testDifferentZIndex() {
+    try {
+      LayerText layer1 = getLayerText();
+      LayerText layer2 = getLayerText();
+
+      layer1.setZ(12);
+
+      assertTrue(comparator.compare(layer1, layer2) != 0);
+      assertTrue(comparator.compare(layer2, layer1) != 0);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
 
-		} catch (Exception e) {
-			e.printStackTrace();
-			fail("Unknown exception");
-		}
-	}
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextTest.java b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextTest.java
index a9bd36d8da913fd0789532206161700f40892325..3dc6b454cb67a34e1a0f75a0eef1674a6956b0c8 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/layout/graphics/LayerTextTest.java
@@ -18,179 +18,186 @@ import lcsb.mapviewer.common.exception.NotImplementedException;
 
 public class LayerTextTest {
 
-	@Before
-	public void setUp() throws Exception {
-	}
-
-	@After
-	public void tearDown() throws Exception {
-	}
-
-	@Test
-	public void testSerialization() {
-		try {
-			SerializationUtils.serialize(new LayerText());
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testConstructor1() {
-		try {
-			LayerText layerText = new LayerText();
-
-			LayerText copy = new LayerText(layerText);
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testConstructor2() {
-		try {
-
-			LayerText copy = new LayerText(new Rectangle2D.Double(), "text");
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testCopy() {
-		try {
-			LayerText copy = new LayerText().copy();
-
-			assertNotNull(copy);
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testInvalidCopy() {
-		try {
-			new LayerText() {
-
-				/**
-				 * 
-				 */
-				private static final long serialVersionUID = 1L;
-			}.copy();
-
-			fail("Exception expected");
-		} catch (NotImplementedException e) {
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testGetBorder() {
-		try {
-			LayerText copy = new LayerText().copy();
-			assertNotNull(copy.getBorder());
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
-
-	@Test
-	public void testGetters() {
-		try {
-			LayerText text = new LayerText();
-
-			String yParam = "1.2";
-			Double y = 1.2;
-
-			String xParam = "2.2";
-			Double x = 2.2;
-
-			String widthParam = "10.2";
-			Double width = 10.2;
-
-			String heightParam = "72.2";
-			Double height = 72.2;
-
-			String fontSizeParam = "5.0";
-			Double fontSize = 5.0;
-
-			String invalidNumberStr = "xxd";
-
-			text.setY(yParam);
-			assertEquals(y, text.getY(), Configuration.EPSILON);
-			try {
-				text.setY(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			assertEquals(y, text.getY(), Configuration.EPSILON);
-			text.setY((Double) null);
-			assertNull(text.getY());
-			text.setY(y);
-			assertEquals(y, text.getY(), Configuration.EPSILON);
-
-			text.setX(xParam);
-			assertEquals(x, text.getX(), Configuration.EPSILON);
-			try {
-				text.setX(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			text.setX((Double) null);
-			assertNull(text.getX());
-			text.setX(x);
-			assertEquals(x, text.getX(), Configuration.EPSILON);
-
-			text.setFontSize(fontSizeParam);
-			assertEquals(fontSize, text.getFontSize(), Configuration.EPSILON);
-			try {
-				text.setFontSize(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			text.setFontSize((Double) null);
-			assertNull(text.getFontSize());
-			text.setFontSize(fontSize);
-			assertEquals(fontSize, text.getFontSize(), Configuration.EPSILON);
-
-			text.setWidth(widthParam);
-			assertEquals(width, text.getWidth(), Configuration.EPSILON);
-			try {
-				text.setWidth(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			text.setWidth((Double) null);
-			assertNull(text.getWidth());
-			text.setWidth(width);
-			assertEquals(width, text.getWidth(), Configuration.EPSILON);
-
-			text.setHeight(heightParam);
-			assertEquals(height, text.getHeight(), Configuration.EPSILON);
-			try {
-				text.setHeight(invalidNumberStr);
-				fail("Exception expected");
-			} catch (InvalidArgumentException e) {
-			}
-			text.setHeight((Double) null);
-			assertNull(text.getHeight());
-			text.setHeight(height);
-			assertEquals(height, text.getHeight(), Configuration.EPSILON);
-
-		} catch (Exception e) {
-			e.printStackTrace();
-			throw e;
-		}
-	}
+  @Before
+  public void setUp() throws Exception {
+  }
+
+  @After
+  public void tearDown() throws Exception {
+  }
+
+  @Test
+  public void testSerialization() {
+    try {
+      SerializationUtils.serialize(createText());
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testConstructor1() {
+    try {
+      LayerText layerText = createText();
+
+      LayerText copy = new LayerText(layerText);
+
+      assertNotNull(copy);
+      assertEquals(0, new LayerTextComparator().compare(layerText, copy));
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  private LayerText createText() {
+    LayerText result = new LayerText();
+    result.setZ(16);
+    return result;
+  }
+
+  @Test
+  public void testConstructor2() {
+    try {
+
+      LayerText copy = new LayerText(new Rectangle2D.Double(), "text");
+
+      assertNotNull(copy);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testCopy() {
+    try {
+      LayerText copy = createText().copy();
+
+      assertNotNull(copy);
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testInvalidCopy() {
+    try {
+      new LayerText() {
+
+        /**
+         * 
+         */
+        private static final long serialVersionUID = 1L;
+      }.copy();
+
+      fail("Exception expected");
+    } catch (NotImplementedException e) {
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testGetBorder() {
+    try {
+      LayerText copy = createText().copy();
+      assertNotNull(copy.getBorder());
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
+  @Test
+  public void testGetters() {
+    try {
+      LayerText text = createText();
+
+      String yParam = "1.2";
+      Double y = 1.2;
+
+      String xParam = "2.2";
+      Double x = 2.2;
+
+      String widthParam = "10.2";
+      Double width = 10.2;
+
+      String heightParam = "72.2";
+      Double height = 72.2;
+
+      String fontSizeParam = "5.0";
+      Double fontSize = 5.0;
+
+      String invalidNumberStr = "xxd";
+
+      text.setY(yParam);
+      assertEquals(y, text.getY(), Configuration.EPSILON);
+      try {
+        text.setY(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      assertEquals(y, text.getY(), Configuration.EPSILON);
+      text.setY((Double) null);
+      assertNull(text.getY());
+      text.setY(y);
+      assertEquals(y, text.getY(), Configuration.EPSILON);
+
+      text.setX(xParam);
+      assertEquals(x, text.getX(), Configuration.EPSILON);
+      try {
+        text.setX(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      text.setX((Double) null);
+      assertNull(text.getX());
+      text.setX(x);
+      assertEquals(x, text.getX(), Configuration.EPSILON);
+
+      text.setFontSize(fontSizeParam);
+      assertEquals(fontSize, text.getFontSize(), Configuration.EPSILON);
+      try {
+        text.setFontSize(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      text.setFontSize((Double) null);
+      assertNull(text.getFontSize());
+      text.setFontSize(fontSize);
+      assertEquals(fontSize, text.getFontSize(), Configuration.EPSILON);
+
+      text.setWidth(widthParam);
+      assertEquals(width, text.getWidth(), Configuration.EPSILON);
+      try {
+        text.setWidth(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      text.setWidth((Double) null);
+      assertNull(text.getWidth());
+      text.setWidth(width);
+      assertEquals(width, text.getWidth(), Configuration.EPSILON);
+
+      text.setHeight(heightParam);
+      assertEquals(height, text.getHeight(), Configuration.EPSILON);
+      try {
+        text.setHeight(invalidNumberStr);
+        fail("Exception expected");
+      } catch (InvalidArgumentException e) {
+      }
+      text.setHeight((Double) null);
+      assertNull(text.getHeight());
+      text.setHeight(height);
+      assertEquals(height, text.getHeight(), Configuration.EPSILON);
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
 }
diff --git a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java
index 185f8638c4de921d48f2325613abc5a2759ca255..bb36ace8271dc52cdd8960c49262925e374471ae 100644
--- a/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java
+++ b/model/src/test/java/lcsb/mapviewer/model/map/model/ModelFullIndexedTest.java
@@ -408,12 +408,6 @@ public class ModelFullIndexedTest {
       assertEquals(1, model.getComplexList().size());
       assertEquals(1, model.getNotComplexSpeciesList().size());
 
-      List<Element> sortedSpecies = model.getSortedSpeciesList();
-
-      assertEquals(compartment, sortedSpecies.get(0));
-      assertEquals(species, sortedSpecies.get(1));
-      assertEquals(complex, sortedSpecies.get(2));
-
     } catch (Exception e) {
       e.printStackTrace();
       throw e;
@@ -634,9 +628,6 @@ public class ModelFullIndexedTest {
 
       assertTrue(model.getReactions().contains(reaction));
 
-      assertEquals(reaction2, model.getSortedReactions().get(0));
-      assertEquals(reaction, model.getSortedReactions().get(1));
-
       model.removeReaction(reaction2);
 
       assertEquals(1, model.getReactions().size());
diff --git a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/CommentDaoTest.java b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/CommentDaoTest.java
index 33215a9c4f6a4be751ff3623d8e358010f699601..52497d0bf85dfacfc522ecccbdb58a7194b0efb1 100644
--- a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/CommentDaoTest.java
+++ b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/CommentDaoTest.java
@@ -2,8 +2,6 @@ package lcsb.mapviewer.persist.dao.map;
 
 import static org.junit.Assert.assertEquals;
 
-import java.awt.Color;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
diff --git a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/LayoutDaoTest.java b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/LayoutDaoTest.java
index 1f919494d857c1b2905fd7e3b4e807665c6228b8..b5ef2da1d92622080d39538512f19218be02795f 100644
--- a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/LayoutDaoTest.java
+++ b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/LayoutDaoTest.java
@@ -4,7 +4,6 @@ import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 
-import java.awt.Color;
 import java.nio.charset.StandardCharsets;
 
 import org.apache.log4j.Logger;
@@ -22,7 +21,6 @@ import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.layout.DataOverlayImageLayer;
 import lcsb.mapviewer.model.map.layout.Layout;
 import lcsb.mapviewer.model.map.layout.graphics.Layer;
-import lcsb.mapviewer.model.map.layout.graphics.LayerRect;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
 import lcsb.mapviewer.model.map.reaction.Product;
diff --git a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java
index 3e56245fbd75818d146a6292bf0746c5b515cf13..ef22436b5fe44e8e57b1c68ebe0a4af32a2955d1 100644
--- a/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java
+++ b/persist/src/test/java/lcsb/mapviewer/persist/dao/map/ModelDaoTest.java
@@ -6,7 +6,6 @@ import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertNull;
 import static org.junit.Assert.assertTrue;
 
-import java.awt.Color;
 import java.awt.geom.Point2D;
 
 import org.apache.log4j.Logger;
@@ -26,7 +25,6 @@ import lcsb.mapviewer.model.map.kinetics.SbmlUnit;
 import lcsb.mapviewer.model.map.kinetics.SbmlUnitType;
 import lcsb.mapviewer.model.map.kinetics.SbmlUnitTypeFactor;
 import lcsb.mapviewer.model.map.layout.graphics.Layer;
-import lcsb.mapviewer.model.map.layout.graphics.LayerRect;
 import lcsb.mapviewer.model.map.model.Author;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelComparator;