diff --git a/CHANGELOG b/CHANGELOG
index a3c6006bcad3bed452dbccf929402840e5e71658..cd0d0115d5a4e3194d4ab7b13624c823249e5508 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,5 +1,6 @@
 minerva (15.0.0~alpha.0) stable; urgency=medium
   * Improvement: logs provided for validation data model are structurized (#325)
+  * Improvement: import/export of GPML implemented
   * Small improvement: compartments in not layouted SBML file are more
     scattered (#326) 
   * Small improvement: when downloading a map results in too big file (>1MB)
diff --git a/commons/src/main/java/lcsb/mapviewer/common/Pair.java b/commons/src/main/java/lcsb/mapviewer/common/Pair.java
index 0b486d1627ef7c2492a67e48729dd46f3323c1f7..5f26aa5def5390822e6c69e125b85c268a5a5f19 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/Pair.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/Pair.java
@@ -78,7 +78,9 @@ public class Pair<L, R> implements Serializable {
 
   @Override
   public String toString() {
-    return "Pair: " + getLeft().toString() + ", " + getRight().toString();
+    String left = getLeft() == null ? "null" : getLeft().toString();
+    String right = getRight() == null ? "null" : getRight().toString();
+    return "Pair: " + left + ", " + right;
   }
 
 }
\ No newline at end of file
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/AbstractComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/AbstractComparator.java
new file mode 100644
index 0000000000000000000000000000000000000000..f3215e5a92793a567ae95c948669f0ca04228c60
--- /dev/null
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/AbstractComparator.java
@@ -0,0 +1,18 @@
+package lcsb.mapviewer.common.comparator;
+
+import java.util.Comparator;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+public abstract class AbstractComparator<T> implements Comparator<T> {
+  private Logger logger = LogManager.getLogger();
+
+  public int compare(T o1, T o2, String objectName) {
+    int result = compare(o1, o2);
+    if (result != 0) {
+      logger.debug(objectName + " different: " + o1 + "\t" + o2);
+    }
+    return result;
+  }
+}
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/ColorComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/ColorComparator.java
index a788fe958a5fa3604df900607ee637544f4cfe4f..a077704aa2d78d0af79c181dec939a5476606598 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/comparator/ColorComparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/ColorComparator.java
@@ -1,7 +1,6 @@
 package lcsb.mapviewer.common.comparator;
 
-import java.awt.*;
-import java.util.Comparator;
+import java.awt.Color;
 
 /**
  * Comparator implementation for {@link Color} class.
@@ -9,7 +8,7 @@ import java.util.Comparator;
  * @author Piotr Gawron
  * 
  */
-public class ColorComparator implements Comparator<Color> {
+public class ColorComparator extends AbstractComparator<Color> {
 
   @Override
   public int compare(Color arg0, Color arg1) {
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/DoubleComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/DoubleComparator.java
index d5ee693a0f281550991fb32bfc336d9d08e3a0b9..434ca24d0bbd42c2535f7a54df7366c01d626b90 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/comparator/DoubleComparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/DoubleComparator.java
@@ -1,7 +1,5 @@
 package lcsb.mapviewer.common.comparator;
 
-import java.util.Comparator;
-
 import lcsb.mapviewer.common.Configuration;
 
 /**
@@ -10,7 +8,7 @@ import lcsb.mapviewer.common.Configuration;
  * @author Piotr Gawron
  * 
  */
-public class DoubleComparator implements Comparator<Double> {
+public class DoubleComparator extends AbstractComparator<Double> {
 
   /**
    * Epsilon value used for comparison of doubles.
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
index 793a591aa4dbd60979578b98ffcaa352e9ec1b3a..5a7408b7a1715d9e8d9161c039e5d947edfd43e6 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/IntegerComparator.java
@@ -1,14 +1,12 @@
 package lcsb.mapviewer.common.comparator;
 
-import java.util.Comparator;
-
 /**
  * Comparator implemented for {@link Integer} class.
  * 
  * @author Piotr Gawron
  * 
  */
-public class IntegerComparator implements Comparator<Integer> {
+public class IntegerComparator extends AbstractComparator<Integer> {
 
   @Override
   public int compare(Integer arg0, Integer arg1) {
diff --git a/commons/src/main/java/lcsb/mapviewer/common/comparator/StringComparator.java b/commons/src/main/java/lcsb/mapviewer/common/comparator/StringComparator.java
index 737c4cde770fc01ee7b809ba0bf8dc7bfea7dcae..c2447f0d935071e6428d3327f530359ad70e3164 100644
--- a/commons/src/main/java/lcsb/mapviewer/common/comparator/StringComparator.java
+++ b/commons/src/main/java/lcsb/mapviewer/common/comparator/StringComparator.java
@@ -1,7 +1,5 @@
 package lcsb.mapviewer.common.comparator;
 
-import java.util.Comparator;
-
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -12,7 +10,7 @@ import org.apache.logging.log4j.Logger;
  * @author Piotr Gawron
  * 
  */
-public class StringComparator implements Comparator<String> {
+public class StringComparator extends AbstractComparator<String> {
   /**
    * Default class logger.
    */
diff --git a/converter-CellDesigner/pom.xml b/converter-CellDesigner/pom.xml
index 6c63f5a7683f4c19af8f8fb9acfa4e26babc9de4..733ba83e10bec191fdc6cf03a7ec210759d02976 100644
--- a/converter-CellDesigner/pom.xml
+++ b/converter-CellDesigner/pom.xml
@@ -67,6 +67,13 @@
 			<scope>compile</scope>
 		</dependency>
 
+		<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
+		<dependency>
+			<groupId>org.springframework</groupId>
+			<artifactId>spring-context</artifactId>
+			<version>${springframework.version}</version>
+		</dependency>
+
 	</dependencies>
 
 </project>
\ No newline at end of file
diff --git a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
index c6386575d66324c51057c8837de764cddd3d11d8..34aaa538dc4da97460c25497de82897e2efa8379 100644
--- a/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
+++ b/converter-CellDesigner/src/main/java/lcsb/mapviewer/converter/model/celldesigner/CellDesignerXmlParser.java
@@ -11,6 +11,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.apache.logging.log4j.core.LogEvent;
 import org.apache.xerces.parsers.DOMParser;
+import org.springframework.stereotype.Component;
 import org.w3c.dom.*;
 
 import lcsb.mapviewer.common.*;
@@ -55,6 +56,7 @@ import lcsb.mapviewer.model.map.species.Element;
  * @author Piotr Gawron
  * 
  */
+@Component
 public class CellDesignerXmlParser extends Converter {
 
   /**
diff --git a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java
index 95ed20c1231cbc99cecb006e58f324b4cc3c8d0d..892dab8549a8c6bb5900b0b5ef8a12a2bf776702 100644
--- a/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java
+++ b/converter-SBGNML/src/main/java/lcsb/mapviewer/converter/model/sbgnml/SbgnmlXmlConverter.java
@@ -9,12 +9,14 @@ import org.apache.commons.text.StringEscapeUtils;
 import org.apache.logging.log4j.core.LogEvent;
 import org.sbgn.SbgnUtil;
 import org.sbgn.bindings.Sbgn;
+import org.springframework.stereotype.Component;
 
 import lcsb.mapviewer.common.MimeType;
 import lcsb.mapviewer.common.MinervaLoggerAppender;
 import lcsb.mapviewer.converter.*;
 import lcsb.mapviewer.model.map.model.Model;
 
+@Component
 public class SbgnmlXmlConverter extends Converter {
 
   @Override
diff --git a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java
index 0c2f6c3abb411e3bbdafd857983bebeccbbac9b7..11f6e6a78549e26a4d1f0a76fc9af4f1acce8667 100644
--- a/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java
+++ b/converter-graphics/src/main/java/lcsb/mapviewer/converter/graphics/bioEntity/element/species/SpeciesConverter.java
@@ -420,8 +420,8 @@ public abstract class SpeciesConverter<T extends Species> extends ElementConvert
   public void drawText(final T species, final Graphics2D graphics, final ConverterParams params) {
     String text = getText(species);
     Font oldFont = graphics.getFont();
-    Font font = getFont(species, params);
     Color oldColor = graphics.getColor();
+    Font font = getFont(species, params);
     graphics.setColor(species.getFontColor());
     graphics.setFont(font);
 
diff --git a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
index 1e47dc8e3b0763adfa23f41bf262a4d664eece88..9e0bd55f28c1da9496b0669925471697d91c29ea 100644
--- a/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
+++ b/converter-sbml/src/main/java/lcsb/mapviewer/converter/model/sbml/SbmlParser.java
@@ -13,6 +13,7 @@ import org.sbml.jsbml.ext.SBasePlugin;
 import org.sbml.jsbml.ext.layout.Layout;
 import org.sbml.jsbml.ext.layout.LayoutModelPlugin;
 import org.sbml.jsbml.ext.multi.MultiModelPlugin;
+import org.springframework.stereotype.Component;
 
 import lcsb.mapviewer.commands.CommandExecutionException;
 import lcsb.mapviewer.commands.layout.ApplySimpleLayoutModelCommand;
@@ -33,6 +34,7 @@ import lcsb.mapviewer.model.map.species.*;
 import lcsb.mapviewer.model.map.species.field.ModificationResidue;
 import lcsb.mapviewer.model.map.species.field.SpeciesWithModificationResidue;
 
+@Component
 public class SbmlParser extends Converter {
 
   /**
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java b/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java
index 4bbbf8235473913319a911a565a89bf879104935..318375fbe3372a1f2b60ef1f6fe4c449785fe750 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ZIndexPopulator.java
@@ -40,7 +40,6 @@ public class ZIndexPopulator {
     int maxZIndex = 0;
 
     List<Drawable> bioEntities = new ArrayList<>();
-    bioEntities.addAll(model.getBioEntities());
     for (Layer layer : model.getLayers()) {
       bioEntities.addAll(layer.getOvals());
       bioEntities.addAll(layer.getRectangles());
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 78926645503b9bef1fcd11abe3ff8df9ebbdc37d..94770529cf87fba15e69f6381d3b41deb0775a50 100644
--- a/model/src/main/java/lcsb/mapviewer/model/graphics/PolylineData.java
+++ b/model/src/main/java/lcsb/mapviewer/model/graphics/PolylineData.java
@@ -260,15 +260,17 @@ public class PolylineData implements Serializable, Drawable {
    * @param distToTrim
    *          distance by which end of line should be trimmed
    */
-  public void trimEnd(double distToTrim) {
+  public double trimEnd(double distToTrim) {
     Point2D last = points.get(points.size() - 1);
     Point2D last2 = points.get(points.size() - 2);
     double oldDist = last.distance(last2);
     if (distToTrim < 0 && oldDist <= Configuration.EPSILON) {
       logger.debug("Cannot extend empty line");
       last.setLocation(last2);
+      return 0;
     } else if (oldDist <= distToTrim) {
       last.setLocation(last2);
+      return oldDist;
     } else {
       double newDistr = oldDist - distToTrim;
       double ratio = newDistr / oldDist;
@@ -277,6 +279,7 @@ public class PolylineData implements Serializable, Drawable {
       dx *= ratio;
       dy *= ratio;
       last.setLocation(last2.getX() + dx, last2.getY() + dy);
+      return distToTrim;
     }
   }
 
@@ -286,12 +289,13 @@ public class PolylineData implements Serializable, Drawable {
    * @param distToTrim
    *          distance by which beginning of line should be trimmed
    */
-  public void trimBegin(double distToTrim) {
+  public double trimBegin(double distToTrim) {
     Point2D last = points.get(0);
     Point2D last2 = points.get(1);
     double oldDist = last.distance(last2);
     if (oldDist <= distToTrim) {
       last.setLocation(last2);
+      return oldDist;
     } else {
       double newDistr = oldDist - distToTrim;
       double ratio = newDistr / oldDist;
@@ -300,6 +304,7 @@ public class PolylineData implements Serializable, Drawable {
       dx *= ratio;
       dy *= ratio;
       last.setLocation(last2.getX() + dx, last2.getY() + dy);
+      return distToTrim;
     }
   }
 
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/compartment/Compartment.java b/model/src/main/java/lcsb/mapviewer/model/map/compartment/Compartment.java
index 887bef49548405663899777bbc663e9dde6113c7..74400f56281d0b9ae949fa0bc437285d6a8c0539 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/compartment/Compartment.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/compartment/Compartment.java
@@ -50,7 +50,7 @@ public class Compartment extends Element {
   /**
    * Default thickness of compartment border.
    */
-  private static final int DEFAULT_COMPARTMENT_THICKNESS = 12;
+  public static final int DEFAULT_COMPARTMENT_THICKNESS = 12;
 
   /**
    * Default class logger.
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerComparator.java
index fd61a1c447f789a5b32c1f8a4539ace01243fea2..53ed7c7276d403ca8b7ebe2935970d2761b86280 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerComparator.java
@@ -6,6 +6,7 @@ import org.apache.logging.log4j.Logger;
 import lcsb.mapviewer.common.Comparator;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.comparator.*;
+import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.graphics.PolylineDataComparator;
 
 /**
@@ -88,40 +89,32 @@ public class LayerComparator extends Comparator<Layer> {
       return integerComparator.compare(arg0.getOvals().size(), arg1.getOvals().size());
     }
 
-    LayerTextComparator textComparator = new LayerTextComparator(epsilon);
-    for (int i = 0; i < arg0.getTexts().size(); i++) {
-      int status = textComparator.compare(arg0.getTexts().get(i), arg1.getTexts().get(i));
-      if (status != 0) {
-        logger.debug("layer texts different");
-        return status;
-      }
+    ListComparator<LayerText> textComparator = new ListComparator<>(new LayerTextComparator(epsilon));
+    int status = textComparator.compare(arg0.getTexts(), arg1.getTexts());
+    if (status != 0) {
+      logger.debug("layer texts different");
+      return status;
     }
 
-    LayerOvalComparator ovalComparator = new LayerOvalComparator(epsilon);
-    for (int i = 0; i < arg0.getOvals().size(); i++) {
-      int status = ovalComparator.compare(arg0.getOvals().get(i), arg1.getOvals().get(i));
-      if (status != 0) {
-        logger.debug("layer ovals different");
-        return status;
-      }
+    ListComparator<LayerOval> ovalComparator = new ListComparator<>(new LayerOvalComparator(epsilon));
+    status = ovalComparator.compare(arg0.getOvals(), arg1.getOvals());
+    if (status != 0) {
+      logger.debug("layer ovals different");
+      return status;
     }
 
-    LayerRectComparator rectComparator = new LayerRectComparator(epsilon);
-    for (int i = 0; i < arg0.getRectangles().size(); i++) {
-      int status = rectComparator.compare(arg0.getRectangles().get(i), arg1.getRectangles().get(i));
-      if (status != 0) {
-        logger.debug("layer rectangles different ");
-        return status;
-      }
+    ListComparator<LayerRect> rectComparator = new ListComparator<>(new LayerRectComparator(epsilon));
+    status = rectComparator.compare(arg0.getRectangles(), arg1.getRectangles());
+    if (status != 0) {
+      logger.debug("layer rectangles different ");
+      return status;
     }
 
-    PolylineDataComparator lineComparator = new PolylineDataComparator(epsilon);
-    for (int i = 0; i < arg0.getLines().size(); i++) {
-      int status = lineComparator.compare(arg0.getLines().get(i), arg1.getLines().get(i));
-      if (status != 0) {
-        logger.debug("layer lines different ");
-        return status;
-      }
+    ListComparator<PolylineData> lineComparator = new ListComparator<>(new PolylineDataComparator(epsilon));
+    status = lineComparator.compare(arg0.getLines(), arg1.getLines());
+    if (status != 0) {
+      logger.debug("layer lines different ");
+      return status;
     }
 
     return 0;
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 e656f63c47b6ba0fd0a43cbc592b5d4847ddc790..82ffeb69a3491f3b6dd50bd7ffd24a13b9368ecc 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
@@ -1,5 +1,8 @@
 package lcsb.mapviewer.model.map.layout.graphics;
 
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
 import lcsb.mapviewer.common.Comparator;
 import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.common.comparator.*;
@@ -13,6 +16,8 @@ import lcsb.mapviewer.common.comparator.*;
  */
 public class LayerTextComparator extends Comparator<LayerText> {
 
+  private Logger logger = LogManager.getLogger();
+
   /**
    * Epsilon value used for comparison of doubles.
    */
@@ -44,35 +49,35 @@ public class LayerTextComparator extends Comparator<LayerText> {
     IntegerComparator integerComparator = new IntegerComparator();
 
     if (doubleComparator.compare(arg0.getWidth(), arg1.getWidth()) != 0) {
-      return doubleComparator.compare(arg0.getWidth(), arg1.getWidth());
+      return doubleComparator.compare(arg0.getWidth(), arg1.getWidth(), "width");
     }
 
     if (doubleComparator.compare(arg0.getHeight(), arg1.getHeight()) != 0) {
-      return doubleComparator.compare(arg0.getHeight(), arg1.getHeight());
+      return doubleComparator.compare(arg0.getHeight(), arg1.getHeight(), "height");
     }
 
     if (doubleComparator.compare(arg0.getX(), arg1.getX()) != 0) {
-      return doubleComparator.compare(arg0.getX(), arg1.getX());
+      return doubleComparator.compare(arg0.getX(), arg1.getX(), "x");
     }
 
     if (doubleComparator.compare(arg0.getY(), arg1.getY()) != 0) {
-      return doubleComparator.compare(arg0.getY(), arg1.getY());
+      return doubleComparator.compare(arg0.getY(), arg1.getY(), "y");
     }
 
     if (colorComparator.compare(arg0.getColor(), arg1.getColor()) != 0) {
-      return colorComparator.compare(arg0.getColor(), arg1.getColor());
+      return colorComparator.compare(arg0.getColor(), arg1.getColor(), "color");
     }
 
     if (stringComparator.compare(arg0.getNotes(), arg1.getNotes()) != 0) {
-      return stringComparator.compare(arg0.getNotes(), arg1.getNotes());
+      return stringComparator.compare(arg0.getNotes(), arg1.getNotes(), "notes");
     }
 
     if (doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize()) != 0) {
-      return doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize());
+      return doubleComparator.compare(arg0.getFontSize(), arg1.getFontSize(), "fontSize");
     }
 
     if (integerComparator.compare(arg0.getZ(), arg1.getZ()) != 0) {
-      return integerComparator.compare(arg0.getZ(), arg1.getZ());
+      return integerComparator.compare(arg0.getZ(), arg1.getZ(), "z");
     }
 
     return 0;
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
index 52bef262b9c4bc71a4c5f74ea4459ca3b94cae06..18d836f3136ac3014bbea7bdba6517b7e1b8856b 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/species/ElementComparator.java
@@ -117,7 +117,7 @@ public class ElementComparator extends Comparator<Element> {
     }
 
     if (colorComparator.compare(arg0.getFontColor(), arg1.getFontColor()) != 0) {
-      logger.debug("Border Font different: " + arg0.getFontColor() + ", " + arg1.getFontColor());
+      logger.debug("Font color different: " + arg0.getFontColor() + ", " + arg1.getFontColor());
       return colorComparator.compare(arg0.getFontColor(), arg1.getFontColor());
     }
 
diff --git a/pathvisio/.project b/pathvisio/.project
index 7edba154eee624dd2b07c88fb90dd823e8f38d6e..7c27b022d33f191f441d65a7d69e7934f674ee84 100644
--- a/pathvisio/.project
+++ b/pathvisio/.project
@@ -5,6 +5,11 @@
 	<projects>
 	</projects>
 	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.wst.common.project.facet.core.builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.jdt.core.javabuilder</name>
 			<arguments>
@@ -15,6 +20,11 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.wst.validation.validationbuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
@@ -22,8 +32,11 @@
 		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.jem.workbench.JavaEMFNature</nature>
+		<nature>org.eclipse.wst.common.modulecore.ModuleCoreNature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>net.sf.eclipsecs.core.CheckstyleNature</nature>
+		<nature>org.eclipse.wst.common.project.facet.core.nature</nature>
 	</natures>
 </projectDescription>
diff --git a/pathvisio/pom.xml b/pathvisio/pom.xml
index 9eac37f38a086b402840afb81feb6930ebec46ce..30ee0f01455a80296445bc7ed63ace99ae147b74 100644
--- a/pathvisio/pom.xml
+++ b/pathvisio/pom.xml
@@ -8,7 +8,7 @@
   <artifactId>pathvisio</artifactId>
   <name>Pathvisio plugin</name>
   
-  <packaging>bundle</packaging>
+<!--   <packaging>bundle</packaging>
   
 	<build>
 		<plugins>
@@ -128,7 +128,7 @@
 			</plugin>	
 		</plugins>
 	</build>
-
+--> 
 	<repositories>
 		<repository>
    		<id>repo</id>
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..796d4a006eb3dff90a82508037b8d1b981ca0143
--- /dev/null
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/GpmlParser.java
@@ -0,0 +1,57 @@
+package lcsb.mapviewer.wikipathway;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.stereotype.Component;
+
+import lcsb.mapviewer.common.MimeType;
+import lcsb.mapviewer.converter.*;
+import lcsb.mapviewer.model.map.InconsistentModelException;
+import lcsb.mapviewer.model.map.model.Model;
+import lcsb.mapviewer.wikipathway.XML.GPMLToModel;
+import lcsb.mapviewer.wikipathway.XML.ModelToGPML;
+
+@Component
+public class GpmlParser extends Converter {
+  Logger logger = LogManager.getLogger();
+
+  @Override
+  public Model createModel(ConverterParams params) throws InvalidInputDataExecption, ConverterException {
+    GPMLToModel gpmlToModel = new GPMLToModel();
+    File inputFile = null;
+    try {
+      Model result = gpmlToModel.getModel(params.getInputStream());
+      return result;
+
+    } catch (IOException e) {
+      throw new ConverterException("Failed to convert input stream to file.", e);
+    } finally {
+      assert inputFile == null || inputFile.delete();
+    }
+  }
+
+  @Override
+  public String model2String(Model model) throws InconsistentModelException, ConverterException {
+    ModelToGPML modelToGPML = new ModelToGPML();
+    return modelToGPML.getGPML(model);
+  }
+
+  @Override
+  public String getCommonName() {
+    return "GPML";
+  }
+
+  @Override
+  public MimeType getMimeType() {
+    return MimeType.XML;
+  }
+
+  @Override
+  public String getFileExtension() {
+    return "gpml";
+  }
+
+}
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/BiopaxParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/BiopaxParser.java
index 0296f8a1e1d69546133b3bb71c1678c2b08f9747..e1a3725b8d2e926e4da1ccfb2d798f3dbfcaa704 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/BiopaxParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/BiopaxParser.java
@@ -8,8 +8,8 @@ import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
 import lcsb.mapviewer.common.XmlParser;
-import lcsb.mapviewer.common.exception.InvalidArgumentException;
-import lcsb.mapviewer.model.map.*;
+import lcsb.mapviewer.model.map.MiriamData;
+import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.wikipathway.model.biopax.*;
 
 /**
@@ -36,11 +36,11 @@ public class BiopaxParser {
   private Map<MiriamData, String> miriamHash = new HashMap<>();
 
   /**
-   * Creates data structure from biopax xml node.
+   * Creates data structure from BioPax xml node.
    * 
    * @param biopax
    *          xml node
-   * @return {@link BiopaxData} structure containing biopax data
+   * @return {@link BiopaxData} structure containing BioPax data
    */
   public BiopaxData parse(Node biopax) {
     BiopaxData result = new BiopaxData();
@@ -150,12 +150,12 @@ public class BiopaxParser {
 
   /**
    * Returns unique hash for the {@link MiriamData} that can be used as a key in
-   * Biopax xml.
+   * BioPax xml.
    * 
    * @param md
    *          {@link MiriamData} for which we want to have unique hash value
    * @return unique hash for the {@link MiriamData} that can be used as a key in
-   *         Biopax xml
+   *         BioPax xml
    */
   private String getHash(MiriamData md) {
     if (miriamHash.get(md) == null) {
@@ -167,11 +167,11 @@ public class BiopaxParser {
 
   /**
    * Converts collection of {@link MiriamData} into an xml {@link String}
-   * representing this collection as a biopax data.
+   * representing this collection as a BioPax data.
    * 
    * @param miriamData
    *          collection of {@link MiriamData}
-   * @return xml {@link String} representing this collection as a biopax data
+   * @return xml {@link String} representing this collection as a BioPax data
    */
   public String toXml(Collection<MiriamData> miriamData) {
     StringBuilder sb = new StringBuilder("");
@@ -187,11 +187,11 @@ public class BiopaxParser {
   }
 
   /**
-   * Converts {@link MiriamData} into xml string in biopax format.
+   * Converts {@link MiriamData} into xml string in BioPax format.
    * 
    * @param md
    *          {@link MiriamData} to transform
-   * @return xml string in biopax format representing {@link MiriamData}
+   * @return xml string in BioPax format representing {@link MiriamData}
    */
   public String toXml(MiriamData md) {
     StringBuilder sb = new StringBuilder();
@@ -203,54 +203,4 @@ public class BiopaxParser {
     sb.append("</bp:PublicationXref>\n");
     return sb.toString();
   }
-
-  /**
-   * Creates {@link MiriamData annotation} from {@link BiopaxPublication}.
-   * 
-   * @param publication
-   *          input biopax structure
-   * @return {@link MiriamData annotation}
-   */
-  protected MiriamData createMiriamData(BiopaxPublication publication) {
-    if ("PubMed".equals(publication.getDb())) {
-      if (publication.getId() == null || publication.getId().equals("")) {
-        return null;
-      } else {
-        return new MiriamData(MiriamRelationType.BQ_BIOL_IS_DESCRIBED_BY, MiriamType.PUBMED, publication.getId());
-      }
-    } else {
-      throw new InvalidArgumentException("Unknown biopax database: " + publication.getDb());
-    }
-  }
-
-  /**
-   * Returns list of {@link MiriamData} that are refernced in {@link BiopaxData}
-   * with identifier given in biopaxReference.
-   * 
-   * @param biopaxData
-   *          {@link BiopaxData} where annotations are stored
-   * @param biopaxReference
-   *          list of refrences (to data in {@link BiopaxData}) that we want to
-   *          convert into {@link MiriamData}
-   * @return list of {@link MiriamData} that are refernced in {@link BiopaxData}
-   *         with identifier given in biopaxReference.
-   */
-  public Collection<MiriamData> getMiriamData(BiopaxData biopaxData, List<String> biopaxReference) {
-    List<MiriamData> result = new ArrayList<>();
-    for (String string : biopaxReference) {
-      BiopaxPublication bp = biopaxData.getPublicationByReference(string);
-      if (bp != null) {
-        MiriamData md = createMiriamData(bp);
-        if (md != null) {
-          result.add(md);
-        } else {
-          logger.warn("[" + string + "]\tBiopax publication is invalid.");
-        }
-      } else {
-        logger.warn("[" + string + "]\tBiopax publication doesn't exist.");
-      }
-    }
-    return result;
-  }
-
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/EdgeParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/EdgeParser.java
index d1d4c91cb6a66e42556cbdd6f29da81845f7d12e..fe9739662e138fa4532dba0e273eff324e196ca1 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/EdgeParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/EdgeParser.java
@@ -152,8 +152,8 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
    *           thrown when data for the edge is invalid
    */
   protected void parseGraphics(Edge edge, Element graphicsNode) throws ConverterException {
-    List<Element> points = new ArrayList<Element>();
-    List<Element> anchors = new ArrayList<Element>();
+    List<Element> points = new ArrayList<>();
+    List<Element> anchors = new ArrayList<>();
 
     GpmlLineConnectorType connectorType = GpmlLineConnectorType.STRAIGHT;
 
@@ -163,7 +163,6 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
         connectorType = GpmlLineConnectorType.getByGpmlName(entry.getRight());
         break;
       case ("LineThickness"):
-        // line thicknes
         edge.getLine().setWidth(entry.getRight());
         break;
       case ("LineStyle"):
@@ -175,7 +174,6 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
         edge.setzOrder(Integer.valueOf(entry.getRight()));
         break;
       case ("Color"):
-        // graphics color
         edge.setColor(hexStringToColor(entry.getRight()));
         break;
       default:
@@ -184,8 +182,7 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
       }
     }
 
-    NodeList nodes;
-    nodes = graphicsNode.getChildNodes();
+    NodeList nodes = graphicsNode.getChildNodes();
     for (int i = 0; i < nodes.getLength(); i++) {
       Node node = nodes.item(i);
       if (node.getNodeType() == Node.ELEMENT_NODE) {
@@ -217,6 +214,7 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
 
       edge.setType(pointData.getType());
     }
+    edge.setReversibleReaction(pointDataList.get(0).getType() == GpmlInteractionType.ARROW);
 
     edge.getLine().setPoints(getPoints(edge.getWarningPrefix(), pointDataList, connectorType));
     if (edge.getLine().getPoints().size() < 2) {
@@ -252,16 +250,16 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
   }
 
   /**
-   * This method transforms list of {@link PointData points} from gpml xml into
+   * This method transforms list of {@link PointData points} from GPML xml into
    * list of standard {@link Point2D points}.
    *
    * @param warningPrefix
    *          prefix that should be used for warnings
    * @param pointDataList
-   *          list of points from gpml format
+   *          list of points from GPML format
    * @param connectorType
    *          {@link GpmlLineConnectorType type} defining how points are connected
-   *          in gpml format
+   *          in GPML format
    * @return list of standard {@link Point2D points} obtained from input data
    * @throws UnknownGpmlLineConnectorTypeException
    *           thrown when {@link GpmlLineConnectorType type} is unknown
@@ -270,7 +268,7 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
    * @throws UnknownTypeException
    *           throw when connector type is invalid
    */
-  private List<Point2D> getPoints(String warningPrefix, List<PointData> pointDataList,
+  List<Point2D> getPoints(String warningPrefix, List<PointData> pointDataList,
       GpmlLineConnectorType connectorType)
       throws InvalidElbowConnectorException, UnknownTypeException {
     List<Point2D> result = new ArrayList<>();
@@ -286,11 +284,17 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
       if (to == null) {
         to = Direction.EAST;
       }
+      if (from == Direction.NONE) {
+        from = to.nextClockwiseDirection().nextClockwiseDirection();
+        for (int i = 0; i < pointDataList.size() - 1; i++) {
+          from = from.nextClockwiseDirection();
+        }
+      }
 
       // how many segments do we have
       int lines = computeNumberOfPerpendicularSegments(warningPrefix, pointDataList.get(0),
           pointDataList.get(pointDataList.size() - 1));
-      // now we know how many segments should be i the line
+      // now we know how many segments should be in the line
 
       // if segments are defined in the input the it's easy
       if (lines == pointDataList.size()) {
@@ -310,11 +314,11 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
         // add middle point
         points.add(1, computeDefaultPoint(from, points.get(0)));
         // CHECKSTYLE:OFF
-        // if something is still missing then add defult beginning line
+        // if something is still missing then add default beginning line
         if (lines > 3) {
           points.add(2, computeDefaultPoint(to, points.get(2)));
         }
-        // if something is still missing then add defult end line
+        // if something is still missing then add default end line
         if (lines > 4) {
           double x = (points.get(1).getX() + points.get(2).getX()) / 2;
           double y = (points.get(1).getY() + points.get(2).getY()) / 2;
@@ -331,9 +335,9 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
         // and now transform the points into perpendicular segments
         result = preparePerpendicularLines(from, points);
 
-        // if number of expectred segments is lower than number of defined
+        // if number of expected segments is lower than number of defined
         // segments then we probably missed something, let's assume that in
-        // gpml file the data is correct and parse it
+        // GPML file the data is correct and parse it
       } else if (pointDataList.size() > lines) {
         List<Point2D> points = new ArrayList<>();
         for (PointData pd : pointDataList) {
@@ -341,7 +345,7 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
         }
         result = preparePerpendicularLines(from, points);
 
-        // if number of expectred segments is different than number of defined
+        // if number of expected segments is different than number of defined
         // segments then something is wrong
       } else {
         throw new InvalidElbowConnectorException(
@@ -407,10 +411,14 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
       to = Direction.EAST;
     }
 
-    // result (2 is the minimu)
+    if (from == Direction.NONE || to == Direction.NONE) {
+      return 2;
+    }
+
+    // result (2 is the minimum)
     int lines = 2;
 
-    // if line starts and ends i nthe same axis then number of segments
+    // if line starts and ends in the same axis then number of segments
     // should be at least3
     if (from.getAxis().equals(to.getAxis())) {
       lines++;
@@ -421,7 +429,7 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
     // then check if some addition lines are needed
     if (!from.equals(to)) {
       int addition = 0;
-      // check if begining requires additional lines because the end is
+      // check if beginning requires additional lines because the end is
       // overlapping the beginning
       switch (from) {
       case EAST:
@@ -447,7 +455,7 @@ public class EdgeParser extends ElementGpmlParser<Edge> {
       default:
         throw new InvalidElbowConnectorException(warningPrefix + "Unknown direction: " + from);
       }
-      // check if emdrequires additional lines because the beginning is
+      // check if end requires additional lines because the beginning is
       // overlapping end part
       switch (to) {
       case EAST:
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/GpmlParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/GpmlParser.java
index 4563d839db45485adbe910539edb40b25dce8bae..43be3375771c9693b150f15205de2b7df1f839ed 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/GpmlParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/GpmlParser.java
@@ -71,7 +71,7 @@ public class GpmlParser {
 
   /**
    * This function returns parent interaction for edge that has anchor at one end.
-   * 
+   *
    * @param graph
    *          model where data is stored
    * @param edge
@@ -107,7 +107,7 @@ public class GpmlParser {
 
   /**
    * This function sets width and height in given graph.
-   * 
+   *
    * @param node
    *          xml node where data is stored
    * @param graph
@@ -121,62 +121,66 @@ public class GpmlParser {
     graph.setBoardHeight(Math.ceil(Double.parseDouble(boardHeight)));
   }
 
-  /**
-   * This function adds groups to graph and nest them.
-   * 
-   * @param groups
-   *          xml nodes
-   * @param graph
-   *          object where data is stored
-   * @throws UnknownAttributeValueException
-   *           thrown when there is a problem with xml attributes
-   */
-  protected void addGroups(List<Node> groups, Graph graph) throws UnknownAttributeValueException {
-    // Adding Groups to graph
-    for (Node nNode : groups) {
-      if (nNode.getNodeType() == Node.ELEMENT_NODE) {
-        Element eElement = (Element) nNode;
-        String graphId = eElement.getAttribute("GraphId");
-        String groupId = eElement.getAttribute("GroupId");
-        if (graphId.equals("") || graphId == null) {
-          graphId = groupId;
-        }
-        String style = eElement.getAttribute("Style");
-        if ("".equals(style)) {
-          style = null;
-        }
-        if (style != null &&
-            !"Complex".equalsIgnoreCase(style) &&
-            !"Group".equalsIgnoreCase(style)) {
-          throw new UnknownAttributeValueException(
-              "Unknown value of \"style\" attribute for group node: " + style
-                  + ". Only null, Complex, Group are supported.");
-        }
-        Group group = new Group(graphId, groupId);
-        group.setStyle(style);
-        graph.addGroup(group);
-      }
-    }
-    // Handling nested groups
-    Group gr1, gr2;
-    for (Node nNode : groups) {
-      if (nNode.getNodeType() == Node.ELEMENT_NODE) {
-        Element eElement = (Element) nNode;
-        String groupRef = eElement.getAttribute("GroupRef");
-        String groupId = eElement.getAttribute("GroupId");
-        if (groupRef != null && !groupRef.equals("")) {
-          gr1 = graph.getGroupByGroupId(groupRef);
-          gr2 = graph.getGroupByGroupId(groupId);
-          gr1.addNode(gr2);
-        }
-      }
-    }
-  }
+	/**
+	 * This function adds groups to graph and nest them.
+	 * 
+	 * @param groups
+	 *          xml nodes
+	 * @param graph
+	 *          object where data is stored
+	 * @throws UnknownAttributeValueException
+	 *           thrown when there is a problem with xml attributes
+	 */
+	protected void addGroups(List<Node> groups, Graph graph) throws UnknownAttributeValueException {
+		// Adding Groups to graph
+		for (Node nNode : groups) {
+			if (nNode.getNodeType() == Node.ELEMENT_NODE) {
+				Element eElement = (Element) nNode;
+				String graphId = eElement.getAttribute("GraphId");
+				String groupId = eElement.getAttribute("GroupId");
+				if (graphId.equals("") || graphId == null) {
+					graphId = groupId;
+				}
+				String style = eElement.getAttribute("Style");
+				if ("".equals(style)) {
+					style = null;
+				}
+				if (style != null &&
+						!"Complex".equalsIgnoreCase(style) &&
+						!"Group".equalsIgnoreCase(style)) {
+					throw new UnknownAttributeValueException(
+							"Unknown value of \"style\" attribute for group node: " + style + ". Only null, Complex, Group are supported.");
+				}
+				Group group = new Group(graphId, groupId);
+				group.setStyle(style);
+
+				String zIndex = eElement.getAttribute("ZOrder");
+				if (zIndex!=null && !zIndex.isEmpty()) {
+				  group.setzOrder(Integer.valueOf(zIndex));
+				}
+				graph.addGroup(group);
+			}
+		}
+		// Handling nested groups
+		Group gr1, gr2;
+		for (Node nNode : groups) {
+			if (nNode.getNodeType() == Node.ELEMENT_NODE) {
+				Element eElement = (Element) nNode;
+				String groupRef = eElement.getAttribute("GroupRef");
+				String groupId = eElement.getAttribute("GroupId");
+				if (groupRef != null && !groupRef.equals("")) {
+					gr1 = graph.getGroupByGroupId(groupRef);
+					gr2 = graph.getGroupByGroupId(groupId);
+					gr1.addNode(gr2);
+				}
+			}
+		}
+	}
 
   /**
    * This function adds edges to graph. It ignores edges that have no connection
    * at one end and edges that connects to shapes or labels.
-   * 
+   *
    * @param nodes
    *          xml nodes
    * @param graph
@@ -224,31 +228,16 @@ public class GpmlParser {
    * NodeToNode connection are transformed into Interactions. Second: Edges with
    * AnchorToNode connection are added to right interaction. Edges with
    * AnchorToAnchor connection are ignored.
-   * 
+   *
    * @param graph
-   *          object where data is sotred
+   *          object where data is sorted
    * @throws InvalidXmlSchemaException
    *           thrown when the data in input file is invalid
    */
   protected void addInteractions(Graph graph) throws InvalidXmlSchemaException {
     for (Edge edge : graph.getEdges()) {
       if (graph.getNodeByGraphId(edge.getEnd()) != null && graph.getNodeByGraphId(edge.getStart()) != null) {
-        if (graph.getNodeByGraphId(edge.getEnd()) instanceof Label) {
-          Label label = (Label) graph.getNodeByGraphId(edge.getEnd());
-          label.setTreatAsNode(true);
-        }
-        if (graph.getNodeByGraphId(edge.getStart()) instanceof Label) {
-          Label label = (Label) graph.getNodeByGraphId(edge.getStart());
-          label.setTreatAsNode(true);
-        }
-        if (graph.getShapeByGraphId(edge.getEnd()) instanceof Shape) {
-          Shape shape = (Shape) graph.getShapeByGraphId(edge.getEnd());
-          shape.setTreatAsNode(true);
-        }
-        if (graph.getShapeByGraphId(edge.getStart()) instanceof Shape) {
-          Shape shape = (Shape) graph.getShapeByGraphId(edge.getStart());
-          shape.setTreatAsNode(true);
-        }
+        markLabelsAndShapesToBecomeSpeciesForEdge(graph, edge);
 
         Interaction interaction = new Interaction(edge);
         graph.addInteraction(interaction);
@@ -287,6 +276,7 @@ public class GpmlParser {
                 throw new InvalidStateException(
                     "Unknown internal model type: " + mapping.getModelInputReactionNodeType());
               }
+              markLabelsAndShapesToBecomeSpeciesForEdge(graph, edge);
             } else {
               throw new InvalidXmlSchemaException("Unknown interaction type: " + edge.getType());
             }
@@ -301,7 +291,7 @@ public class GpmlParser {
             if (mapping != null) {
               if (mapping.isOutputWarning()) {
                 logger.warn(edge.getWarningPrefix() + "Invalid interaction type \"" + edge.getType()
-                    + "\" as an input to reaction.");
+                    + "\" as an output from reaction.");
               }
               if (Modifier.class.isAssignableFrom(mapping.getModelOutputReactionNodeType())) {
                 tmp.addModifier(edge);
@@ -313,6 +303,7 @@ public class GpmlParser {
                 throw new InvalidStateException(
                     "Unknown internal model type: " + mapping.getModelOutputReactionNodeType());
               }
+              markLabelsAndShapesToBecomeSpeciesForEdge(graph, edge);
             } else {
               throw new InvalidXmlSchemaException("Unknown interaction type: " + edge.getType());
             }
@@ -328,9 +319,28 @@ public class GpmlParser {
     }
   }
 
+  private void markLabelsAndShapesToBecomeSpeciesForEdge(Graph graph, Edge edge) {
+    if (graph.getNodeByGraphId(edge.getEnd()) instanceof Label) {
+      Label label = (Label) graph.getNodeByGraphId(edge.getEnd());
+      label.setTreatAsNode(true);
+    }
+    if (graph.getNodeByGraphId(edge.getStart()) instanceof Label) {
+      Label label = (Label) graph.getNodeByGraphId(edge.getStart());
+      label.setTreatAsNode(true);
+    }
+    if (graph.getShapeByGraphId(edge.getEnd()) instanceof Shape) {
+      Shape shape = (Shape) graph.getShapeByGraphId(edge.getEnd());
+      shape.setTreatAsNode(true);
+    }
+    if (graph.getShapeByGraphId(edge.getStart()) instanceof Shape) {
+      Shape shape = (Shape) graph.getShapeByGraphId(edge.getStart());
+      shape.setTreatAsNode(true);
+    }
+  }
+
   /**
    * Creates gpml {@link Graph} model from gpml input stream.
-   * 
+   *
    * @param stream
    *          input stream with gpml model
    * @return {@link Graph} model
@@ -447,7 +457,7 @@ public class GpmlParser {
 
   /**
    * This method merge edges that should be merged into single line.
-   * 
+   *
    * @param graph
    *          model where edges are stored
    */
@@ -518,7 +528,7 @@ public class GpmlParser {
 
   /**
    * Method that merge two {@link Edge edges}.
-   * 
+   *
    * @param edge1
    *          first edge to merge
    * @param edge2
@@ -572,7 +582,7 @@ public class GpmlParser {
 
   /**
    * Creates edges from lines when it's possible.
-   * 
+   *
    * @param lines
    *          xml nodes with lines
    * @return list of edges that could be created from xml nodes
@@ -595,7 +605,7 @@ public class GpmlParser {
 
   /**
    * Creates lines from the list of gpml xml nodes.
-   * 
+   *
    * @param lines
    *          list of xml nodes
    * @return list of {@link PolylineData lines}
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/LabelParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/LabelParser.java
index c3c91d277e21792e2163a1e769c5345fa5a4272d..383d5a3718c70f9cc009c5b7fbcc0b8425d37940 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/LabelParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/LabelParser.java
@@ -11,6 +11,7 @@ import lcsb.mapviewer.common.Pair;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.common.exception.NotImplementedException;
 import lcsb.mapviewer.converter.ConverterException;
+import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.wikipathway.model.Label;
 import lcsb.mapviewer.wikipathway.model.UnknownTypeException;
 
@@ -26,7 +27,9 @@ public class LabelParser extends GraphicalPathwayElementParser<Label> {
   /**
    * Default class logger.
    */
-  private final Logger logger = LogManager.getLogger(LabelParser.class);
+  private final Logger logger = LogManager.getLogger();
+
+  private ReferenceParser referenceParser = new ReferenceParser();
 
   @Override
   public Label parse(Element eElement) throws UnknownTypeException {
@@ -42,6 +45,14 @@ public class LabelParser extends GraphicalPathwayElementParser<Label> {
       case ("TextLabel"):
         label.setTextLabel(entry.getRight());
         break;
+      case ("Href"):
+        MiriamData md = referenceParser.hrefToMiriamData(entry.getRight());
+        if (md == null) {
+          label.addComment(entry.getRight());
+        } else {
+          label.addReference(md);
+        }
+        break;
       case ("GroupRef"):
         label.setGroupRef(entry.getRight());
         break;
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java
index c4065bc2c070119eef68f9ad9ba62b00262ae879..b464424687cb37690b025e0cce8339ff67ee7836 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelContructor.java
@@ -1,7 +1,8 @@
 package lcsb.mapviewer.wikipathway.XML;
 
 import java.awt.Color;
-import java.awt.geom.*;
+import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
 import java.util.*;
 
 import org.apache.commons.text.StringEscapeUtils;
@@ -9,17 +10,15 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import lcsb.mapviewer.common.Configuration;
-import lcsb.mapviewer.common.Pair;
-import lcsb.mapviewer.common.exception.InvalidArgumentException;
-import lcsb.mapviewer.common.exception.InvalidStateException;
-import lcsb.mapviewer.common.geometry.PointTransformation;
+import lcsb.mapviewer.common.exception.*;
 import lcsb.mapviewer.converter.ConverterException;
 import lcsb.mapviewer.converter.model.celldesigner.geometry.CellDesignerAliasConverter;
-import lcsb.mapviewer.converter.model.celldesigner.geometry.ReactionCellDesignerConverter;
+import lcsb.mapviewer.converter.model.celldesigner.geometry.helper.PolylineDataFactory;
 import lcsb.mapviewer.converter.model.celldesigner.reaction.ReactionLineData;
 import lcsb.mapviewer.converter.model.celldesigner.types.ModifierType;
 import lcsb.mapviewer.converter.model.celldesigner.types.ModifierTypeUtils;
 import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.compartment.*;
 import lcsb.mapviewer.model.map.layout.graphics.*;
@@ -31,8 +30,7 @@ import lcsb.mapviewer.model.map.species.*;
 import lcsb.mapviewer.model.map.species.field.*;
 import lcsb.mapviewer.modelutils.map.ElementUtils;
 import lcsb.mapviewer.wikipathway.model.*;
-import lcsb.mapviewer.wikipathway.model.biopax.BiopaxPublication;
-import lcsb.mapviewer.wikipathway.utils.Geo;
+import lcsb.mapviewer.wikipathway.model.biopax.BiopaxFactory;
 
 /**
  * Class contains methods for GraphToModel conversion.
@@ -46,14 +44,7 @@ public class ModelContructor {
    * Default color used by complexes.
    */
   private static final Color DEFAULT_COMPLEX_ALIAS_COLOR = new Color(102, 255, 255);
-  /**
-   * How much of central line is used by and operator that joins reactants.
-   */
-  private static final int AND_OPERATOR_CENTRAL_LINE_RATIO = 10;
-  /**
-   * How much of central line is used by split operator that split products.
-   */
-  private static final int SPLIT_OPERATOR_CENTRAL_LINE_RATIO = 10;
+
   /**
    * Epsilon used for double comparison.
    */
@@ -90,83 +81,7 @@ public class ModelContructor {
   /**
    * Parser used for extracting {@link MiriamData references} from GPML model.
    */
-  private BiopaxParser biopaxParser = new BiopaxParser();
-  private PointTransformation pt = new PointTransformation();
-
-  /**
-   * This function splits {@link PolylineData} into two parts. It also assumes
-   * that last segment on the left part is equal to the length of the first
-   * segment on the right side.
-   * 
-   * @param pd
-   *          line to split
-   * @return pair of lines into which parameter was split to
-   */
-  protected Pair<PolylineData, PolylineData> splitPolyline(PolylineData pd) {
-    PolylineData p1 = new PolylineData();
-    PolylineData p2 = new PolylineData();
-    p1.setColor(pd.getColor());
-    p2.setColor(pd.getColor());
-
-    List<Line2D> lines = pd.getLines();
-    double lenght = 0.0;
-    for (Line2D line : lines) {
-      lenght += Geo.lineLen(line);
-    }
-    if (lenght > Configuration.EPSILON) {
-      double tmp = 0.0;
-      boolean first = true;
-      for (Line2D line : lines) {
-        if (tmp + Geo.lineLen(line) > lenght / 2) {
-          if (first) {
-            double a = (lenght / 2 - tmp) / Geo.lineLen(line);
-            double x = line.getX1() + a * (line.getX2() - line.getX1());
-            double y = line.getY1() + a * (line.getY2() - line.getY1());
-            p1.addPoint((Point2D) line.getP1().clone());
-            p1.addPoint(new Point2D.Double(x, y));
-            p2.addPoint(new Point2D.Double(x, y));
-            first = false;
-          }
-          p2.addPoint((Point2D) line.getP2().clone());
-          tmp += Geo.lineLen(line);
-        } else {
-          p1.addPoint((Point2D) line.getP1().clone());
-          tmp += Geo.lineLen(line);
-        }
-      }
-    } else { // we have line with empty length
-      p1.addPoint((Point2D) pd.getBeginPoint().clone());
-      p1.addPoint((Point2D) pd.getBeginPoint().clone());
-      p2.addPoint((Point2D) pd.getBeginPoint().clone());
-      p2.addPoint((Point2D) pd.getBeginPoint().clone());
-    }
-
-    // and now make sure that we have equal distances from left and right
-    double leftDist = p1.getEndPoint().distance(p1.getPoints().get(p1.getPoints().size() - 2));
-    double rightDist = p2.getEndPoint().distance(p2.getPoints().get(p2.getPoints().size() - 2));
-    if (Math.abs(leftDist - rightDist) > Configuration.EPSILON) {
-      if (leftDist > rightDist) {
-        double ratio = rightDist / leftDist;
-        double dx = p1.getPoints().get(p1.getPoints().size() - 1).getX()
-            - p1.getPoints().get(p1.getPoints().size() - 2).getX();
-        double dy = p1.getPoints().get(p1.getPoints().size() - 1).getY()
-            - p1.getPoints().get(p1.getPoints().size() - 2).getY();
-        double x = p1.getPoints().get(p1.getPoints().size() - 2).getX() + dx * ratio;
-        double y = p1.getPoints().get(p1.getPoints().size() - 2).getY() + dy * ratio;
-        Point2D newPoint = new Point2D.Double(x, y);
-        p1.addPoint(p1.getPoints().size() - 1, newPoint);
-      } else {
-        double ratio = leftDist / rightDist;
-        double dx = p2.getPoints().get(0).getX() - p2.getPoints().get(1).getX();
-        double dy = p2.getPoints().get(0).getY() - p2.getPoints().get(1).getY();
-        double x = p2.getPoints().get(1).getX() + dx * ratio;
-        double y = p2.getPoints().get(1).getY() + dy * ratio;
-        Point2D newPoint = new Point2D.Double(x, y);
-        p2.addPoint(1, newPoint);
-      }
-    }
-    return new Pair<PolylineData, PolylineData>(p1, p2);
-  }
+  private BiopaxFactory biopaxFactory = new BiopaxFactory();
 
   /**
    * This function creates Species from DataNode.
@@ -177,7 +92,7 @@ public class ModelContructor {
    *          ...
    * @return {@link Species} created from input {@link DataNode}
    */
-  protected Species createAlias(DataNode dataNode, Data data) {
+  protected Species createSpecies(DataNode dataNode, Data data) {
     Species res = null;
     String type = dataNode.getType();
     if (type == null || type.equals("")) {
@@ -204,14 +119,18 @@ public class ModelContructor {
     }
 
     res.addMiriamData(dataNode.getReferences());
-    res.setZ(dataNode.getzOrder());
     res.setName(dataNode.getName());
+    StringBuilder notes = new StringBuilder();
+    for (String comment : dataNode.getComments()) {
+      notes.append(comment + "\n\n");
+    }
+    res.setNotes(notes.toString());
     return res;
   }
 
   /**
-   * This function adds ComplexSpecies to model from graph. ComplexName is set as
-   * groupId from .gpml
+   * This function adds {@link Complex} to model from graph. ComplexName is set as
+   * groupId from GPML
    *
    * @param model
    *          to this model complexes will be added
@@ -220,28 +139,29 @@ public class ModelContructor {
    * @param data
    *          ...
    */
-  protected void addComplexSpecies(Model model, Graph graph, Data data) {
+  protected void addComplex(Model model, Graph graph, Data data) {
     for (Group group : graph.getGroups()) {
-      Complex alias = new Complex(group.getGraphId());
-      alias.setName(group.getGraphId());
+      Complex complex = new Complex(group.getGraphId());
+      complex.setName(group.getGraphId());
       if ("Complex".equalsIgnoreCase(group.getStyle())) {
-        alias.setHypothetical(false);
+        complex.setHypothetical(false);
       } else {
-        alias.setHypothetical(true);
+        complex.setHypothetical(true);
       }
 
       Rectangle2D rec = group.getRectangle();
       if (rec == null) {
         rec = new Rectangle2D.Double(0, 0, 0, 0);
       }
-      alias.setX(rec.getX());
-      alias.setY(rec.getY());
-      alias.setWidth((int) rec.getWidth());
-      alias.setHeight((int) rec.getHeight());
-      alias.setFillColor(DEFAULT_COMPLEX_ALIAS_COLOR);
-
-      data.id2alias.put(group.getGraphId(), alias);
-      model.addElement(alias);
+      complex.setX(rec.getX());
+      complex.setY(rec.getY());
+      complex.setWidth((int) rec.getWidth());
+      complex.setHeight((int) rec.getHeight());
+      complex.setZ(group.getzOrder());
+      complex.setFillColor(DEFAULT_COMPLEX_ALIAS_COLOR);
+
+      data.id2alias.put(group.getGraphId(), complex);
+      model.addElement(complex);
     }
   }
 
@@ -251,14 +171,14 @@ public class ModelContructor {
    * @param model
    *          model to which species will be added
    * @param graph
-   *          gpml data model
+   *          GPML data model
    * @param data
    *          ...
    */
   protected void addElement(Model model, Graph graph, Data data) {
     for (DataNode dataNode : graph.getDataNodes()) {
-      Species species = createAlias(dataNode, data);
-      species.addMiriamData(biopaxParser.getMiriamData(graph.getBiopaxData(), dataNode.getBiopaxReference()));
+      Species species = createSpecies(dataNode, data);
+      species.addMiriamData(biopaxFactory.getMiriamData(graph.getBiopaxData(), dataNode.getBiopaxReference()));
 
       Element alias = updateAlias(dataNode, species);
 
@@ -268,13 +188,13 @@ public class ModelContructor {
     for (Label label : graph.getLabels()) {
       if (label.isTreatAsNode()) {
         Species species = createSpecies(label);
-        species.addMiriamData(biopaxParser.getMiriamData(graph.getBiopaxData(), label.getBiopaxReference()));
+        species.addMiriamData(biopaxFactory.getMiriamData(graph.getBiopaxData(), label.getBiopaxReference()));
 
         Element alias = updateAlias(label, species);
 
         data.id2alias.put(label.getGraphId(), alias);
         model.addElement(alias);
-      } else {
+      } else if (label.getGroupRef() == null || label.getGroupRef().isEmpty()) {
         LayerText text = createText(label);
         data.layer.addLayerText(text);
       }
@@ -282,7 +202,7 @@ public class ModelContructor {
     for (Shape shape : graph.getShapes()) {
       if (shape.isTreatAsNode()) {
         Species species = createSpecies(shape);
-        species.addMiriamData(biopaxParser.getMiriamData(graph.getBiopaxData(), shape.getBiopaxReference()));
+        species.addMiriamData(biopaxFactory.getMiriamData(graph.getBiopaxData(), shape.getBiopaxReference()));
 
         Element alias = updateAlias(shape, species);
 
@@ -294,6 +214,8 @@ public class ModelContructor {
           if (shape.getShape().equalsIgnoreCase("oval")) {
             LayerOval oval = createOval(shape);
             data.layer.addLayerOval(oval);
+          } else if (shape.getComments().size() > 0 || shape.getTextLabel() != null) {
+            data.shapeLabelLayer.addLayerText(createText(shape));
           } else {
             LayerRect rect = createRectangle(shape);
             data.layer.addLayerRect(rect);
@@ -393,12 +315,17 @@ public class ModelContructor {
    * Creates {@link LayerRect} object from {@link Shape}.
    *
    * @param shape
-   *          source gpml object to be transformed
+   *          source GPML object to be transformed
    * @return {@link LayerRect} obtained from {@link Shape} object
    */
   public LayerRect createRectangle(Shape shape) {
     LayerRect rect = new LayerRect();
-    Rectangle2D rec = shape.getRectangle();
+    Rectangle2D rec;
+    if (shouldRotate90degrees(shape.getRotation())) {
+      rec = rotate90degrees(shape.getRectangle());
+    } else {
+      rec = shape.getRectangle();
+    }
     rect.setX(rec.getX());
     rect.setY(rec.getY());
     rect.setHeight(rec.getHeight());
@@ -407,11 +334,39 @@ public class ModelContructor {
     return rect;
   }
 
+  Rectangle2D rotate90degrees(Rectangle2D rectangle) {
+    return new Rectangle2D.Double(rectangle.getCenterX() - rectangle.getHeight() / 2,
+        rectangle.getCenterY() - rectangle.getWidth() / 2, rectangle.getHeight(), rectangle.getWidth());
+  }
+
+  boolean shouldRotate90degrees(Double rot) {
+    if (rot == null) {
+      return false;
+    }
+    double rotation = rot;
+    while (rotation > Math.PI / 2) {
+      rotation -= Math.PI;
+    }
+    while (rotation < -Math.PI / 2) {
+      rotation += Math.PI;
+    }
+    if (Math.abs(rotation) < Math.PI / 4) {
+      if (Math.abs(rotation) > Configuration.EPSILON) {
+        logger.warn("Rotation of objects is not supported. Rotation=" + rot);
+      }
+      return false;
+    }
+    if ((Math.PI / 2 - Math.abs(rotation)) > Configuration.EPSILON) {
+      logger.warn("Rotation of objects is not supported. Rotation=" + rot);
+    }
+    return true;
+  }
+
   /**
    * Creates {@link LayerOval} object from {@link Shape}.
    *
    * @param shape
-   *          source gpml object to be transformed
+   *          source GPML object to be transformed
    * @return {@link LayerOval} obtained from {@link Shape} object
    */
   public LayerOval createOval(Shape shape) {
@@ -444,7 +399,38 @@ public class ModelContructor {
     if (text.getColor().equals(Color.WHITE)) {
       text.setColor(Color.BLACK);
     }
-    text.setNotes(label.getName());
+    StringBuilder notes = new StringBuilder(label.getName());
+    for (String comment : label.getComments()) {
+      notes.append(comment + "\n\n");
+    }
+    text.setNotes(notes.toString());
+    return text;
+  }
+
+  public LayerText createText(Shape shape) {
+    Rectangle2D rec = shape.getRectangle();
+
+    LayerText text = new LayerText();
+    text.setX(rec.getX());
+    text.setY(rec.getY());
+    text.setHeight(rec.getHeight());
+    text.setWidth(rec.getWidth());
+    text.setColor(shape.getColor());
+    if (text.getColor().equals(Color.WHITE)) {
+      text.setColor(Color.BLACK);
+    }
+
+    String name = shape.getTextLabel();
+    if (name == null) {
+      name = "";
+    }
+
+    StringBuilder notes = new StringBuilder(name);
+    for (String comment : shape.getComments()) {
+      notes.append(comment + "\n\n");
+    }
+    text.setNotes(notes.toString());
+
     return text;
   }
 
@@ -481,6 +467,11 @@ public class ModelContructor {
     if (element instanceof Compartment && !Objects.equals(Color.WHITE, gpmlElement.getFillColor())) {
       element.setBorderColor(gpmlElement.getFillColor());
     }
+    element.setZ(gpmlElement.getzOrder());
+    element.setFontColor(gpmlElement.getColor());
+    if (gpmlElement.getFontSize() != null) {
+      element.setFontSize(gpmlElement.getFontSize());
+    }
     return element;
   }
 
@@ -495,7 +486,13 @@ public class ModelContructor {
     logger.warn(label.getWarningPrefix() + " Label cannot be part of reaction. Tranforming to Unknown");
 
     Species res = new Unknown(label.getGraphId());
+    res.addMiriamData(label.getReferences());
     res.setName(label.getName());
+    StringBuilder notes = new StringBuilder();
+    for (String comment : label.getComments()) {
+      notes.append(comment + "\n\n");
+    }
+    res.setNotes(notes.toString());
     return res;
   }
 
@@ -510,6 +507,11 @@ public class ModelContructor {
     logger.warn(shape.getWarningPrefix() + " Shape can not be part of reaction. Tranforming to Unknown");
 
     Species res = new Unknown(shape.getGraphId());
+    StringBuilder notes = new StringBuilder();
+    for (String comment : shape.getComments()) {
+      notes.append(comment + "\n\n");
+    }
+    res.setNotes(notes.toString());
     res.setName(shape.getName());
     return res;
   }
@@ -518,7 +520,7 @@ public class ModelContructor {
    * This function add Species to right Complexes.
    *
    * @param graph
-   *          gpml data model
+   *          GPML data model
    * @param data
    *          ...
    * @throws UnknownChildClassException
@@ -527,25 +529,23 @@ public class ModelContructor {
   protected void putSpeciesIntoComplexes(Graph graph, Data data) throws UnknownChildClassException {
     for (Group group : graph.getGroups()) {
 
-      Complex complexSpecies = (Complex) data.id2alias.get(group.getGraphId());
+      Complex complex = (Complex) data.id2alias.get(group.getGraphId());
       for (PathwayElement pe : group.getNodes()) {
-        Element species = data.id2alias.get(pe.getGraphId());
-        if (species != null) {
-          if (species instanceof Species) {
-
-            Species speciesAlias = (Species) species;
-            speciesAlias.setComplex(complexSpecies);
-            complexSpecies.addSpecies(speciesAlias);
+        Element element = data.id2alias.get(pe.getGraphId());
+        if (element != null) {
+          if (element instanceof Species) {
+            Species species = (Species) element;
+            complex.addSpecies(species);
           }
           // we have label
         } else if (graph.getLabelByGraphId(pe.getGraphId()) != null) {
           Label label = graph.getLabelByGraphId(pe.getGraphId());
           // if complex has generic name then change it into label
-          if (complexSpecies.getName().equals(group.getGraphId())) {
-            complexSpecies.setName(label.getTextLabel());
+          if (complex.getName().equals(group.getGraphId())) {
+            complex.setName(label.getTextLabel());
           } else {
             // if there are more labels than one then merge labels
-            complexSpecies.setName(complexSpecies.getName() + "\n" + label.getTextLabel());
+            complex.setName(complex.getName() + "\n" + label.getTextLabel());
           }
         } else if (graph.getShapeByGraphId(pe.getGraphId()) != null) {
           Shape shape = graph.getShapeByGraphId(pe.getGraphId());
@@ -567,12 +567,12 @@ public class ModelContructor {
    * This function creates {@link Reaction} from {@link Interaction} from graph.
    *
    * @param interaction
-   *          gpml interaction
+   *          GPML interaction
    * @param graph
-   *          gpml data model
+   *          GPML data model
    * @param data
    *          ...
-   * @return reaction created from gpml {@link Interaction}
+   * @return reaction created from GPML {@link Interaction}
    */
   protected Reaction createReactionFromInteraction(Interaction interaction, Graph graph, Data data) {
     InteractionMapping mapping = InteractionMapping.getInteractionMapping(interaction.getType(),
@@ -582,32 +582,25 @@ public class ModelContructor {
     }
     Reaction reaction = createReactionByType(mapping.getModelReactionType());
     reaction.setIdReaction(interaction.getGraphId());
-    reaction.setReversible(mapping.isReversible());
+    reaction.setReversible(mapping.isReversible() || interaction.isReversible());
 
     reaction.addMiriamData(interaction.getReferences());
     reaction.setZ(interaction.getzOrder());
-    for (String ref : interaction.getBiopaxReferences()) {
-      BiopaxPublication publication = graph.getBiopaxData().getPublicationByReference(ref);
-      MiriamData md = biopaxParser.createMiriamData(publication);
-      if (md != null) {
-        reaction.addMiriamData(md);
-      }
-    }
-
-    PolylineData pd = interaction.getLine();
+    reaction.addMiriamData(biopaxFactory.getMiriamData(graph.getBiopaxData(), interaction.getBiopaxReferences()));
 
-    Pair<PolylineData, PolylineData> pair = splitPolyline(pd);
-    PolylineData pdfirstpart = pair.getLeft();
-    PolylineData pdsecondpart = pair.getRight();
+    ReactionLayoutFinder layoutFinder = new ReactionLayoutFinder();
+    Map<Class<?>, PolylineData> lines = layoutFinder.getNodeLines(interaction);
+    PolylineData reactantLine = lines.get(Reactant.class);
+    PolylineData productLine = lines.get(Product.class);
 
     Reactant reactant = new Reactant();
     reactant.setElement(data.id2alias.get(interaction.getStart()));
-    reactant.setLine(pdfirstpart);
+    reactant.setLine(reactantLine);
     reaction.addReactant(reactant);
 
     Product product = new Product();
     product.setElement(data.id2alias.get(interaction.getEnd()));
-    product.setLine(pdsecondpart);
+    product.setLine(productLine);
     reaction.addProduct(product);
 
     for (Edge e : interaction.getReactants()) {
@@ -620,16 +613,8 @@ public class ModelContructor {
       reaction.addProduct(pro);
     }
 
-    double centralLength = pdfirstpart.getPoints().get(pdfirstpart.getPoints().size() - 2)
-        .distance(pdfirstpart.getEndPoint()) * 2;
-
     if (reaction.getReactants().size() > 1) {
-      PolylineData operatorLine = new PolylineData();
-      operatorLine.setColor(pdfirstpart.getColor());
-      operatorLine.addPoint((Point2D) pdfirstpart.getEndPoint().clone());
-      operatorLine.addPoint((Point2D) pdfirstpart.getEndPoint().clone());
-      pdfirstpart.trimEnd(centralLength / AND_OPERATOR_CENTRAL_LINE_RATIO);
-      operatorLine.setStartPoint((Point2D) pdfirstpart.getEndPoint().clone());
+      PolylineData operatorLine = lines.get(AndOperator.class);
       NodeOperator andOperator;
       // heterodimer association use association operator
       if (reaction instanceof HeterodimerAssociationReaction) {
@@ -642,28 +627,36 @@ public class ModelContructor {
       andOperator.setLine(operatorLine);
       for (int i = 1; i < reaction.getReactants().size(); i++) {
         Reactant r = reaction.getReactants().get(i);
-        r.getLine().addPoint((Point2D) pdfirstpart.getEndPoint().clone());
+        r.getLine().getEndPoint().setLocation(operatorLine.getBeginPoint());
         andOperator.addInput(r);
       }
       reaction.addNode(andOperator);
+    } else {
+      PolylineData operatorLine = lines.get(AndOperator.class);
+      for (int i = 1; i < operatorLine.getPoints().size(); i++) {
+        reactantLine.addPoint(operatorLine.getPoints().get(i));
+      }
+      reactant.setLine(PolylineDataFactory.removeCollinearPoints(reactantLine));
     }
 
     if (reaction.getProducts().size() > 1) {
-      PolylineData operatorLine = new PolylineData();
-      operatorLine.setColor(pdsecondpart.getColor());
+      PolylineData operatorLine = lines.get(SplitOperator.class);
 
-      operatorLine.addPoint((Point2D) pdsecondpart.getBeginPoint().clone());
-      pdsecondpart.trimBegin(centralLength / SPLIT_OPERATOR_CENTRAL_LINE_RATIO);
-      operatorLine.addPoint((Point2D) pdsecondpart.getBeginPoint().clone());
       SplitOperator splitOperator = new SplitOperator();
       splitOperator.addOutput(product);
-      splitOperator.setLine(operatorLine);
+      splitOperator.setLine(operatorLine.reverse());
       for (int i = 1; i < reaction.getProducts().size(); i++) {
         Product r = reaction.getProducts().get(i);
-        r.getLine().addPoint(0, (Point2D) pdsecondpart.getBeginPoint().clone());
+        r.getLine().getBeginPoint().setLocation(operatorLine.getEndPoint());
         splitOperator.addOutput(r);
       }
       reaction.addNode(splitOperator);
+    } else {
+      PolylineData operatorLine = lines.get(SplitOperator.class);
+      for (int i = 0; i < operatorLine.getPoints().size()-1; i++) {
+        productLine.addPoint(i, operatorLine.getPoints().get(i));
+      }
+      product.setLine(PolylineDataFactory.removeCollinearPoints(productLine));
     }
 
     for (Edge e : interaction.getModifiers()) {
@@ -704,7 +697,9 @@ public class ModelContructor {
       }
     }
 
-    createReactionCenterLine(reaction);
+    PolylineData modifierLine = lines.get(Modifier.class);
+    modifierLine.setType(rld.getLineType());
+    reaction.setLine(modifierLine);
 
     ModifierTypeUtils mtu = new ModifierTypeUtils();
     for (Modifier m : reaction.getModifiers()) {
@@ -715,36 +710,8 @@ public class ModelContructor {
     return reaction;
   }
 
-  private void createReactionCenterLine(Reaction reaction) {
-    AbstractNode input = reaction.getReactants().get(0);
-    AbstractNode output = reaction.getProducts().get(0);
-
-    for (NodeOperator operator : reaction.getOperators()) {
-      if (operator.isReactantOperator()) {
-        input = operator;
-      } else if (operator.isProductOperator()) {
-        output = operator;
-      }
-    }
-    PolylineData line = new PolylineData();
-
-    input.getLine().trimEnd(ReactionCellDesignerConverter.RECT_SIZE / 2 - 1);
-    line.addPoint(pt.copyPoint(input.getLine().getEndPoint()));
-
-    if (output instanceof NodeOperator) {
-      output.getLine().trimEnd(ReactionCellDesignerConverter.RECT_SIZE / 2 - 1);
-      line.addPoint(pt.copyPoint(output.getLine().getEndPoint()));
-    } else {
-      output.getLine().trimBegin(ReactionCellDesignerConverter.RECT_SIZE / 2 - 1);
-      line.addPoint(pt.copyPoint(output.getLine().getBeginPoint()));
-    }
-    line.setType(input.getLine().getType());
-    line.setColor(input.getLine().getColor());
-    reaction.setLine(line);
-  }
-
   /**
-   * Creates {@link Reactant} from gpml edge.
+   * Creates {@link Reactant} from GPML edge.
    *
    * @param data
    *          ...
@@ -777,13 +744,13 @@ public class ModelContructor {
   }
 
   /**
-   * Creates {@link Product} from gpml edge.
+   * Creates {@link Product} from GPML edge.
    *
    * @param data
    *          ...
    * @param e
    *          edge
-   * @return {@link Product} from gpml edge
+   * @return {@link Product} from GPML edge
    */
   protected Product createProductFromEdge(Data data, Edge e) {
     String id = null;
@@ -793,7 +760,7 @@ public class ModelContructor {
       id = e.getEnd();
     }
     if (id == null) {
-      throw new InvalidStateException("This product is invalid");
+      throw new InvalidStateException("[" + e.getGraphId() + "]\tThis product is invalid");
     }
     Product pro = new Product();
     pro.setElement(data.id2alias.get(id));
@@ -896,7 +863,7 @@ public class ModelContructor {
       model.setWidth(graph.getBoardWidth());
       model.setHeight(graph.getBoardHeight());
 
-      addComplexSpecies(model, graph, data);
+      addComplex(model, graph, data);
       addElement(model, graph, data);
       putSpeciesIntoComplexes(graph, data);
 
@@ -924,31 +891,68 @@ public class ModelContructor {
         notes = StringEscapeUtils.unescapeHtml4(notes);
       }
       model.setNotes(notes);
-      StringBuilder references = new StringBuilder("");
-      for (String string : graph.getBiopaxReferences()) {
-        references.append(string + ", ");
-      }
-      if (references.length() > 0) {
-        logger.warn("[Biopax, " + references.toString() + "]\tModel annotations are not supported.");
-      }
+      model.addMiriamData(new BiopaxFactory().getMiriamData(graph.getBiopaxData(), graph.getBiopaxReferences()));
 
       data.layer.addLayerLines(createLines(graph));
 
       if (!data.layer.isEmpty()) {
         model.getLayers().add(data.layer);
       }
+      if (!data.shapeLabelLayer.isEmpty()) {
+        model.getLayers().add(data.shapeLabelLayer);
+      }
 
       assignNamesToComplexes(model);
       assignNamesToCompartments(model);
 
       putAliasesIntoCompartments(model);
 
+      putMissingZIndexes(model.getDrawables());
+
       return model;
     } catch (UnknownChildClassException e) {
       throw new ConverterException(e);
     }
   }
 
+  private void putMissingZIndexes(Collection<Drawable> bioEntities) {
+    int maxZIndex = 0;
+    for (Drawable bioEntity : bioEntities) {
+      if (bioEntity.getZ() != null) {
+        maxZIndex = Math.max(maxZIndex, bioEntity.getZ());
+      }
+    }
+
+    for (Drawable bioEntity : bioEntities) {
+      if (bioEntity.getZ() == null) {
+        Integer index = null;
+        if (bioEntity instanceof Complex) {
+          index = getMinZIndex(((Complex) bioEntity).getAllChildren());
+        }
+
+        if (index == null) {
+          index = ++maxZIndex;
+        } else {
+          index--;
+        }
+        bioEntity.setZ(index);
+      }
+    }
+
+  }
+
+  private Integer getMinZIndex(List<Species> allChildren) {
+    Integer result = null;
+    for (Species species : allChildren) {
+      if (species.getZ() != null) {
+        if (result == null)
+          result = species.getZ();
+        result = Math.min(result, species.getZ());
+      }
+    }
+    return result;
+  }
+
   /**
    * Method that put {@link Species aliases} that are not assigned into any
    * {@link Compartment} into a proper compartment.
@@ -1024,18 +1028,20 @@ public class ModelContructor {
       if (alias instanceof Complex) {
         if (alias.getName() == null || (alias.getName().isEmpty())) {
           for (Layer layer : model.getLayers()) {
-            LayerText toRemove = null;
-            for (LayerText lt : layer.getTexts()) {
-              if (alias.contains(lt)) {
-                alias.setName(lt.getNotes());
-                toRemove = lt;
+            if (layer.getName().equals("defaultLayer")) {
+              LayerText toRemove = null;
+              for (LayerText lt : layer.getTexts()) {
+                if (alias.contains(lt)) {
+                  alias.setName(lt.getNotes());
+                  toRemove = lt;
+                  break;
+                }
+              }
+              if (toRemove != null) {
+                layer.removeLayerText(toRemove);
                 break;
               }
             }
-            if (toRemove != null) {
-              layer.removeLayerText(toRemove);
-              break;
-            }
           }
         }
       }
@@ -1043,21 +1049,22 @@ public class ModelContructor {
   }
 
   /**
-   * Tries to find a name to assign to compartments if comparments don't contain
+   * Tries to find a name to assign to compartments if compartments don't contain
    * them.
    *
    * @param model
    *          model where compartments are placed
    */
   private void assignNamesToCompartments(Model model) {
-    for (Element alias : model.getElements()) {
-      if (alias instanceof Compartment) {
-        if (alias.getName() == null || alias.getName().isEmpty()) {
-          for (Layer layer : model.getLayers()) {
+    for (Compartment compartment : model.getCompartments()) {
+      if (compartment.getName() == null || compartment.getName().isEmpty()) {
+        for (Layer layer : model.getLayers()) {
+          if (layer.getName().equals("defaultLayer")) {
             LayerText toRemove = null;
             for (LayerText lt : layer.getTexts()) {
-              if (alias.contains(lt)) {
-                alias.setName(lt.getNotes());
+              if (compartment.contains(lt)) {
+                compartment.setName(lt.getNotes());
+                compartment.setNamePoint(new Point2D.Double(lt.getX(), lt.getY()));
                 toRemove = lt;
                 break;
               }
@@ -1141,6 +1148,11 @@ public class ModelContructor {
      */
     private Layer layer;
 
+    /**
+     * Default layer.
+     */
+    private Layer shapeLabelLayer;
+
     /**
      * Default constructor.
      */
@@ -1150,6 +1162,10 @@ public class ModelContructor {
       layer.setVisible(true);
       layer.setLayerId("1");
       layer.setName("defaultLayer");
+      shapeLabelLayer = new Layer();
+      shapeLabelLayer.setVisible(true);
+      shapeLabelLayer.setLayerId("2");
+      shapeLabelLayer.setName("shapeLabelLayer");
     }
   }
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelToGPML.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelToGPML.java
index af1a751a67e6e49fa5fd1f2dca63e3f845258874..ffc86624258d3625c019e9c343faf3f08215cce0 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelToGPML.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ModelToGPML.java
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.wikipathway.XML;
 
+import java.awt.Color;
 import java.awt.geom.Point2D;
 import java.awt.geom.Rectangle2D;
 import java.util.HashSet;
@@ -9,6 +10,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.common.geometry.ColorParser;
 import lcsb.mapviewer.converter.ConverterException;
 import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.map.BioEntity;
@@ -66,6 +68,8 @@ public class ModelToGPML {
    */
   private BiopaxParser biopaxParser = new BiopaxParser();
 
+  private ColorParser colorParser = new ColorParser();
+
   /**
    * Returns new unique identifier for the model.
    * 
@@ -198,7 +202,7 @@ public class ModelToGPML {
    * This function calculates PolylineData based on ReactionNode.
    * 
    * @param rn
-   *          rection node for which polyline is calculated
+   *          reaction node for which polyline is calculated
    * @param mainLine
    *          main line to which polyline is attached
    * @return polyline for {@link ReactionNode}
@@ -265,11 +269,11 @@ public class ModelToGPML {
 
   /**
    * This function transform Compartments into Shapes (Oval or Rectangle) from
-   * PathVisio. LineThickness=3.0 and Color=ffcc66. It can be easily changed.
+   * PathVisio.
    * 
    * @param model
    *          model where compartments are placed
-   * @return String that encodes all compartments in gpml format
+   * @return String that encodes all compartments in GPML format
    */
   private String getComparments(Model model) {
     StringBuilder comparments = new StringBuilder("");
@@ -288,9 +292,17 @@ public class ModelToGPML {
       comparments.append("    <Attribute Key=\"org.pathvisio.CellularComponentProperty\" Value=\"Cell\" />\n");
       comparments.append("    <Attribute Key=\"org.pathvisio.DoubleLineProperty\" Value=\"Double\" />\n");
       comparments.append(
-          "    <Graphics CenterX=\"" + x + "\" CenterY=\"" + y + "\" Width=\"" + w + "\" Height=\"" + h
-              + "\" ZOrder=\"" + ca.getZ() + "\" FontSize=\"20\" Valign=\"Bottom\" ShapeType=\"" + shape
-              + "\" LineThickness=\"3.0\" Color=\"ffcc66\" Rotation=\"0.0\" />\n");
+          "    <Graphics CenterX=\"" + x + "\" "
+              + "CenterY=\"" + y + "\" "
+              + "Width=\"" + w + "\" "
+              + "Height=\"" + h + "\" "
+              + "ZOrder=\"" + ca.getZ() + "\" "
+              + "FontSize=\"" + ca.getFontSize() + "\" "
+              + "Valign=\"Bottom\" "
+              + "ShapeType=\"" + shape + "\" "
+              + "LineThickness=\"3.0\" "
+              + "Color=\"" + colorToString(ca.getFillColor()) + "\" "
+              + "Rotation=\"0.0\" />\n");
       comparments.append("  </Shape>\n");
     }
     return comparments.toString();
@@ -302,7 +314,7 @@ public class ModelToGPML {
    * model).
    * 
    * @param rn
-   *          object representing rectanat/product/modifier
+   *          object representing reactant/product/modifier
    * @param anchId
    *          identifier of the anchor where it will be connected
    * @param anchors
@@ -326,7 +338,10 @@ public class ModelToGPML {
     interaction.append("  <Interaction GraphId=\"" + getNewId() + "\">\n");
     interaction.append("    <Attribute Key=\"org.pathvisio.core.ds\" Value=\"\"/>\n");
     interaction.append("    <Attribute Key=\"org.pathvisio.core.id\" Value=\"\"/>\n");
-    interaction.append("    <Graphics ConnectorType=\"Segmented\" ZOrder=\"32827\" LineThickness=\"1.0\">\n");
+    interaction.append("    <Graphics "
+        + "ConnectorType=\"Segmented\" "
+        + "ZOrder=\"" + rn.getReaction().getZ() + "\" "
+        + "LineThickness=\"" + rn.getLine().getWidth() + "\">\n");
 
     if (rn instanceof Reactant) {
       for (Point2D p2d : line.getPoints()) {
@@ -385,7 +400,7 @@ public class ModelToGPML {
   }
 
   /**
-   * This function encode SpeciesAliases into DataNodes from .gpml format. Empty
+   * This function encode SpeciesAliases into DataNodes from GPML format. Empty
    * complexes are also transformed into DataNodes.
    * 
    * @param model
@@ -398,45 +413,33 @@ public class ModelToGPML {
   protected String getDataNodes(Model model) throws ConverterException {
     StringBuilder dataNodes = new StringBuilder("");
 
-    for (Species sa : model.getNotComplexSpeciesList()) {
-      if (!(sa instanceof Complex)) {
-        dataNodes.append("  <DataNode TextLabel=\"" + sa.getName() + "\" GraphId=\"" + sa.getElementId() + "\" Type=\""
-            + getType(sa) + "\"");
-        if (sa.getComplex() != null) {
-          dataNodes.append(" GroupRef=\"" + sa.getComplex().getElementId() + "\"");
+    for (Species species : model.getNotComplexSpeciesList()) {
+      if (!(species instanceof Complex)) {
+        dataNodes.append(
+            "  <DataNode TextLabel=\"" + species.getName() + "\" GraphId=\"" + species.getElementId() + "\" Type=\""
+                + getType(species) + "\"");
+        if (species.getComplex() != null) {
+          dataNodes.append(" GroupRef=\"" + species.getComplex().getElementId() + "\"");
         }
         dataNodes.append(">\n");
 
-        dataNodes.append("    <Comment>" + sa.getNotes() + "</Comment>\n");
-        dataNodes.append(biopaxParser.toReferenceXml(sa.getMiriamData()));
+        dataNodes.append("    <Comment>" + species.getNotes() + "</Comment>\n");
+        dataNodes.append(biopaxParser.toReferenceXml(species.getMiriamData()));
 
-        String red = Integer.toHexString(sa.getFillColor().getRed());
-        String green = Integer.toHexString(sa.getFillColor().getGreen());
-        String blue = Integer.toHexString(sa.getFillColor().getBlue());
-        if (red.length() == 1) {
-          red = "0" + red;
-        }
-        if (green.length() == 1) {
-          green = "0" + green;
-        }
-        if (blue.length() == 1) {
-          blue = "0" + blue;
-        }
-        String color = red + green + blue;
-        Rectangle2D rec = sa.getBorder();
+        Rectangle2D rec = species.getBorder();
 
         dataNodes.append(
-            "    <Graphics CenterX=\"" + rec.getCenterX() +
-                "\" CenterY=\"" + rec.getCenterY() +
-                "\" Width=\"" + rec.getWidth() +
-                "\" Height=\"" + rec.getHeight() +
-                "\" ZOrder=\"" + sa.getZ() +
-                "\" FontSize=\"10\"" +
-                " Valign=\"Middle\" "
-                + "Color=\"" + "0000ff"
-                + "\" FillColor=\"" + color + "\"/>\n");
-
-        dataNodes.append(referenceParser.toXml(sa.getMiriamData()));
+            "    <Graphics CenterX=\"" + rec.getCenterX() + "\" " +
+                "CenterY=\"" + rec.getCenterY() + "\" " +
+                "Width=\"" + rec.getWidth() + "\" " +
+                "Height=\"" + rec.getHeight() + "\" " +
+                "ZOrder=\"" + species.getZ() + "\" " +
+                "FontSize=\"" + species.getFontSize() + "\" " +
+                "Valign=\"Middle\" " +
+                "Color=\"" + colorToString(species.getFontColor()) + "\" " +
+                "FillColor=\"" + colorToString(species.getFillColor()) + "\"/>\n");
+
+        dataNodes.append(referenceParser.toXml(species.getMiriamData()));
         dataNodes.append("  </DataNode>\n");
       }
     }
@@ -455,16 +458,16 @@ public class ModelToGPML {
         Rectangle2D rec = ca.getBorder();
 
         dataNodes.append(
-            "    <Graphics CenterX=\"" + rec.getCenterX() +
-                "\" CenterY=\"" + rec.getCenterY() +
-                "\" Width=\"" + rec.getWidth() +
-                "\" Height=\"" + rec.getHeight() +
-                "\" ZOrder=\"" + ca.getZ() +
-                "\" FontSize=\"10\"" +
-                " Valign=\"Middle\" " +
-                "Color=\"0000ff\" " +
-                "FillColor=\"ffffcc\"" +
-                "  LineStyle=\"Broken\"/>\n");
+            "    <Graphics CenterX=\"" + rec.getCenterX() + "\" " +
+                "CenterY=\"" + rec.getCenterY() + "\" " +
+                "Width=\"" + rec.getWidth() + "\" " +
+                "Height=\"" + rec.getHeight() + "\" " +
+                "ZOrder=\"" + ca.getZ() + "\" " +
+                "FontSize=\"" + ca.getFontSize() + "\" " +
+                "Valign=\"Middle\" " +
+                "Color=\"" + colorToString(ca.getFontColor()) + "\" " +
+                "FillColor=\"" + colorToString(ca.getFillColor()) + "\" " +
+                "LineStyle=\"Broken\"/>\n");
 
         dataNodes.append(referenceParser.toXml(ca.getMiriamData()));
         dataNodes.append("  </DataNode>\n");
@@ -475,11 +478,11 @@ public class ModelToGPML {
   }
 
   /**
-   * This function encode ComplexAliases into Groups from .gpml format.
+   * This function encode ComplexAliases into Groups from GPML format.
    * 
    * @param model
    *          model where aliases are placed
-   * @return string representing groups in gpml format
+   * @return string representing groups in GPML format
    */
   protected String getGroups(Model model) {
     StringBuilder groups = new StringBuilder("");
@@ -497,11 +500,11 @@ public class ModelToGPML {
   }
 
   /**
-   * This function encode Reactions into Interactions from .gpml format.
+   * This function encode Reactions into Interactions from GPML format.
    * 
    * @param model
    *          model where reactions are placed
-   * @return string with interactions in gpml format
+   * @return string with interactions in GPML format
    * @throws ConverterException
    *           thrown when there is a problem with conversion
    */
@@ -514,11 +517,10 @@ public class ModelToGPML {
 
       interactions.append("  <Interaction GraphId=\"" + reaction.getIdReaction() + "\">\n");
       interactions.append(biopaxParser.toReferenceXml(reaction.getMiriamData()));
-      // interactions.append(" <Attribute Key=\"org.pathvisio.core.ds\"
-      // Value=\"\"/>\n");
-      // interactions.append(" <Attribute Key=\"org.pathvisio.core.id\"
-      // Value=\"\"/>\n");
-      interactions.append("    <Graphics ConnectorType=\"Segmented\" ZOrder=\"32827\" LineThickness=\"1.0\">\n");
+      interactions.append("    <Graphics "
+          + "ConnectorType=\"Segmented\" "
+          + "ZOrder=\"" + reaction.getZ() + "\" "
+          + "LineThickness=\"" + reaction.getLine().getWidth() + "\">\n");
 
       /** Start and End **/
       Reactant start = reaction.getReactants().get(0);
@@ -575,11 +577,11 @@ public class ModelToGPML {
   }
 
   /**
-   * This function returns Model in .gpml format.
+   * This function returns Model in GPML format.
    * 
    * @param model
    *          model to transform
-   * @return string in gpml format representing model
+   * @return string in GPML format representing model
    * @throws ConverterException
    *           thrown when there is a problem with conversion
    */
@@ -608,4 +610,8 @@ public class ModelToGPML {
 
     return gpml.toString();
   }
+
+  private String colorToString(Color color) {
+    return colorParser.colorToHtml(color).substring(1);
+  }
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReactionLayoutFinder.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReactionLayoutFinder.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e07207c462112f8465d11f1e860930874373d13
--- /dev/null
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReactionLayoutFinder.java
@@ -0,0 +1,315 @@
+package lcsb.mapviewer.wikipathway.XML;
+
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.util.*;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import lcsb.mapviewer.common.Configuration;
+import lcsb.mapviewer.common.Pair;
+import lcsb.mapviewer.common.comparator.DoubleComparator;
+import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.common.geometry.LineTransformation;
+import lcsb.mapviewer.common.geometry.PointTransformation;
+import lcsb.mapviewer.converter.model.celldesigner.geometry.ReactionCellDesignerConverter;
+import lcsb.mapviewer.converter.model.celldesigner.geometry.helper.PolylineDataFactory;
+import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.reaction.*;
+import lcsb.mapviewer.wikipathway.model.Edge;
+import lcsb.mapviewer.wikipathway.model.Interaction;
+import lcsb.mapviewer.wikipathway.utils.Geo;
+
+class ReactionLayoutFinder {
+
+  @SuppressWarnings("unused")
+  private Logger logger = LogManager.getLogger();
+
+  private LineTransformation lt = new LineTransformation();
+  private PointTransformation pt = new PointTransformation();
+
+  private Interaction interaction;
+
+  /**
+   * Return coordinates where all {@link Reactant} should end, all
+   * {@link Modifier} should end, and all {@link Product} should start.
+   * 
+   * @param interaction
+   *          GPML {@link Interaction}
+   * @return map consisted of three entries for classes: {@link Product},
+   *         {@link Reactant}, {@link Modifier}
+   */
+  public Map<Class<?>, Point2D> getNodeStartPoints(Interaction interaction) {
+    this.interaction = interaction;
+    List<Pair<Class<?>, Point2D>> possiblePoints = getPointsInOrder(interaction);
+    Point2D modifierPoint = getModifierPoint(possiblePoints);
+    Point2D reactantPoint = getReactantPoint(possiblePoints, modifierPoint);
+    Point2D productPoint = getProductPoint(possiblePoints, modifierPoint);
+
+    Map<Class<?>, Point2D> result = new HashMap<>();
+    result.put(Reactant.class, reactantPoint);
+    result.put(Product.class, productPoint);
+    result.put(Modifier.class, modifierPoint);
+
+    return result;
+  }
+
+  public Map<Class<?>, PolylineData> getNodeLines(Interaction interaction) {
+    Map<Class<?>, Point2D> points = getNodeStartPoints(interaction);
+    
+
+    Map<Class<?>, PolylineData> result = new HashMap<>();
+    PolylineData reactantLine = getSubline(interaction.getLine(), interaction.getLine().getBeginPoint(),
+        points.get(Reactant.class));
+    PolylineData inputReactionLine = getSubline(interaction.getLine(), points.get(Reactant.class),
+        points.get(Modifier.class));
+    inputReactionLine.trimEnd(ReactionCellDesignerConverter.RECT_SIZE / 2);
+
+    PolylineData outputReactionLine = getSubline(interaction.getLine(),
+        points.get(Modifier.class), points.get(Product.class));
+    
+    outputReactionLine.trimBegin(ReactionCellDesignerConverter.RECT_SIZE / 2);
+    PolylineData productLine = getSubline(interaction.getLine(),
+        points.get(Product.class), interaction.getLine().getEndPoint());
+    PolylineData modifierLine = new PolylineData(pt.copyPoint(inputReactionLine.getEndPoint()),
+        pt.copyPoint(outputReactionLine.getBeginPoint()));
+    modifierLine.setColor(interaction.getColor());
+    modifierLine.setWidth(productLine.getWidth());
+
+    result.put(Reactant.class, reactantLine);
+    result.put(Product.class, productLine);
+    result.put(Modifier.class, modifierLine);
+    result.put(AndOperator.class, inputReactionLine);
+    result.put(SplitOperator.class, outputReactionLine);
+
+    return result;
+  }
+
+  private List<Pair<Class<?>, Point2D>> getPointsInOrder(Interaction interaction) {
+    PolylineData pd = interaction.getLine();
+    List<Pair<Class<?>, Point2D>> possiblePoints = new ArrayList<>();
+    for (Edge e : interaction.getReactants()) {
+      if (pointOnPolyline(pd, e.getLine().getEndPoint())) {
+        possiblePoints.add(new Pair<>(Reactant.class, e.getLine().getEndPoint()));
+      } else if (pointOnPolyline(pd, e.getLine().getBeginPoint())) {
+        possiblePoints.add(new Pair<>(Reactant.class, e.getLine().getBeginPoint()));
+      }
+    }
+    for (Edge e : interaction.getProducts()) {
+      if (pointOnPolyline(pd, e.getLine().getEndPoint())) {
+        possiblePoints.add(new Pair<>(Product.class, e.getLine().getEndPoint()));
+      } else if (pointOnPolyline(pd, e.getLine().getBeginPoint())) {
+        possiblePoints.add(new Pair<>(Product.class, e.getLine().getBeginPoint()));
+      }
+    }
+    for (Edge e : interaction.getModifiers()) {
+      if (pointOnPolyline(pd, e.getLine().getEndPoint())) {
+        possiblePoints.add(new Pair<>(Modifier.class, e.getLine().getEndPoint()));
+      } else if (pointOnPolyline(pd, e.getLine().getBeginPoint())) {
+        possiblePoints.add(new Pair<>(Modifier.class, e.getLine().getBeginPoint()));
+      }
+    }
+    Comparator<Pair<Class<?>, Point2D>> comparator = new Comparator<Pair<Class<?>, Point2D>>() {
+
+      @Override
+      public int compare(Pair<Class<?>, Point2D> o1, Pair<Class<?>, Point2D> o2) {
+        double dist1 = distanceFromPolylineStart(pd, o1.getRight());
+        double dist2 = distanceFromPolylineStart(pd, o2.getRight());
+        return new DoubleComparator(Configuration.EPSILON).compare(dist1, dist2);
+      }
+    };
+
+    Collections.sort(possiblePoints, comparator);
+    return possiblePoints;
+  }
+
+  private Point2D getProductPoint(List<Pair<Class<?>, Point2D>> possiblePoints, Point2D modifierPoint) {
+    Point2D result = null;
+    for (Pair<Class<?>, Point2D> pair : possiblePoints) {
+      if (pair.getLeft().equals(Product.class)) {
+        if (distanceFromPolylineStart(interaction.getLine(),
+            modifierPoint) < distanceFromPolylineStart(interaction.getLine(), pair.getRight())) {
+          result = pair.getRight();
+          break;
+        }
+      }
+    }
+    if (result == null) {
+      for (Point2D point : interaction.getLine().getPoints()) {
+        if (distanceFromPolylineStart(interaction.getLine(),
+            modifierPoint) < distanceFromPolylineStart(interaction.getLine(), point)) {
+          double x = modifierPoint.getX() + (point.getX() - modifierPoint.getX()) / 2;
+          double y = modifierPoint.getY() + (point.getY() - modifierPoint.getY()) / 2;
+          result = new Point2D.Double(x, y);
+          break;
+        }
+      }
+    }
+    return result;
+  }
+
+  private Point2D getReactantPoint(List<Pair<Class<?>, Point2D>> possiblePoints, Point2D modifierPoint) {
+    Point2D result = null;
+    for (Pair<Class<?>, Point2D> pair : possiblePoints) {
+      if (pair.getLeft().equals(Reactant.class)) {
+        if (distanceFromPolylineStart(interaction.getLine(),
+            modifierPoint) > distanceFromPolylineStart(interaction.getLine(), pair.getRight())) {
+          result = pair.getRight();
+        }
+      }
+    }
+    if (result == null) {
+      for (Point2D point : interaction.getLine().getPoints()) {
+        if (distanceFromPolylineStart(interaction.getLine(),
+            modifierPoint) > distanceFromPolylineStart(interaction.getLine(), point)) {
+          double x = modifierPoint.getX() + (point.getX() - modifierPoint.getX()) / 2;
+          double y = modifierPoint.getY() + (point.getY() - modifierPoint.getY()) / 2;
+          result = new Point2D.Double(x, y);
+        }
+      }
+    }
+    return result;
+  }
+
+  private Point2D getModifierPoint(List<Pair<Class<?>, Point2D>> points) {
+    List<Pair<Class<?>, Point2D>> possiblePoints = new ArrayList<>(points);
+    int productPoints = 0;
+    int reactantPoints = 0;
+    for (Pair<Class<?>, Point2D> pair : possiblePoints) {
+      if (pair.getLeft().equals(Product.class)) {
+        productPoints++;
+      } else if (pair.getLeft().equals(Reactant.class)) {
+        reactantPoints++;
+      }
+    }
+    int countedReactants = 0;
+    int countedProducts = 0;
+    int score = Integer.MIN_VALUE;
+    Point2D point = null;
+    for (Pair<Class<?>, Point2D> pair : possiblePoints) {
+      if (pair.getLeft().equals(Product.class)) {
+        countedProducts++;
+      } else if (pair.getLeft().equals(Reactant.class)) {
+        countedReactants++;
+      } else if (pair.getLeft().equals(Modifier.class)) {
+        int currentScore = countedReactants + (productPoints - countedProducts);
+        if (point == null || score < currentScore) {
+          score = currentScore;
+          point = pair.getRight();
+        }
+      }
+    }
+
+    if (point == null) {
+      possiblePoints.add(0, new Pair<Class<?>, Point2D>(null, interaction.getLine().getBeginPoint()));
+      possiblePoints.add(new Pair<Class<?>, Point2D>(null, interaction.getLine().getEndPoint()));
+      countedReactants = 0;
+      countedProducts = 0;
+
+      Point2D previousPoint = null;
+      for (Pair<Class<?>, Point2D> pair : possiblePoints) {
+        if (previousPoint != null) {
+          int currentScore = countedReactants + (productPoints - countedProducts);
+          if (point == null || score < currentScore) {
+            score = currentScore;
+            if (reactantPoints == 0) { // shift to most right possible line when there are no other reactants
+              point = getRightCenterPoint(interaction.getLine(), previousPoint, pair.getRight());
+            } else if (productPoints == 0) {
+              point = getLeftCenterPoint(interaction.getLine(), previousPoint, pair.getRight());
+            } else {
+              point = getCenterPoint(interaction.getLine(), previousPoint, pair.getRight());
+            }
+          }
+        }
+        if (pair.getLeft() == Product.class) {
+          countedProducts++;
+        } else if (pair.getLeft() == Reactant.class) {
+          countedReactants++;
+        }
+        previousPoint = pair.getRight();
+      }
+    }
+    return point;
+  }
+
+  private Point2D getCenterPoint(PolylineData originalPolylineData, Point2D startPoint, Point2D endPoint) {
+    PolylineData pd = getSubline(originalPolylineData, startPoint, endPoint);
+    return getCenterPoint(pd);
+  }
+
+  private Point2D getLeftCenterPoint(PolylineData originalPolylineData, Point2D startPoint, Point2D endPoint) {
+    PolylineData pd = getSubline(originalPolylineData, startPoint, endPoint);
+    double x = pd.getPoints().get(0).getX() + (pd.getPoints().get(1).getX() - pd.getPoints().get(0).getX()) / 2;
+    double y = pd.getPoints().get(0).getY() + (pd.getPoints().get(1).getY() - pd.getPoints().get(0).getY()) / 2;
+    return new Point2D.Double(x, y);
+  }
+
+  private Point2D getRightCenterPoint(PolylineData originalPolylineData, Point2D startPoint, Point2D endPoint) {
+    PolylineData pd = getSubline(originalPolylineData, startPoint, endPoint);
+    int points = pd.getPoints().size();
+    double x = pd.getPoints().get(points - 2).getX()
+        + (pd.getPoints().get(points - 1).getX() - pd.getPoints().get(points - 2).getX()) / 2;
+    double y = pd.getPoints().get(points - 2).getY()
+        + (pd.getPoints().get(points - 1).getY() - pd.getPoints().get(points - 2).getY()) / 2;
+    return new Point2D.Double(x, y);
+  }
+
+  private PolylineData getSubline(PolylineData originalPolylineData, Point2D startPoint, Point2D endPoint) {
+    int start = 0;
+    int end = originalPolylineData.getPoints().size() - 1;
+    for (int i = 0; i < originalPolylineData.getPoints().size(); i++) {
+      if (distanceFromPolylineStart(originalPolylineData, startPoint) > distanceFromPolylineStart(originalPolylineData,
+          originalPolylineData.getPoints().get(i))) {
+        start = i;
+      }
+      if (distanceFromPolylineStart(originalPolylineData, endPoint) < distanceFromPolylineStart(originalPolylineData,
+          originalPolylineData.getPoints().get(i))) {
+        end = Math.min(end, i);
+      }
+    }
+    PolylineData result = originalPolylineData.getSubline(start, end + 1);
+    result.setStartPoint(pt.copyPoint(startPoint));
+    result.setEndPoint(pt.copyPoint(endPoint));
+    return PolylineDataFactory.removeCollinearPoints(result);
+  }
+
+  private Point2D getCenterPoint(PolylineData pd) {
+    List<Line2D> lines = pd.getLines();
+    double lenght = 0.0;
+    for (Line2D line : lines) {
+      lenght += Geo.lineLen(line);
+    }
+    double tmp = 0.0;
+    for (Line2D line : lines) {
+      if (tmp + Geo.lineLen(line) > lenght / 2) {
+        double x = line.getX1() + (line.getX2() - line.getX1()) / 2;
+        double y = line.getY1() + (line.getY2() - line.getY1()) / 2;
+        return new Point2D.Double(x, y);
+      } else {
+        tmp += Geo.lineLen(line);
+      }
+    }
+    return pt.copyPoint(pd.getEndPoint());
+  }
+
+  double distanceFromPolylineStart(PolylineData line, Point2D point) {
+    double distance = 0;
+    for (Line2D l : line.getLines()) {
+      if (lt.distBetweenPointAndLineSegment(l, point) <= Configuration.EPSILON) {
+        return distance + point.distance(l.getP1());
+      }
+      distance += l.getP1().distance(l.getP2());
+    }
+    throw new InvalidArgumentException("Point doesn't lay on the line");
+  }
+
+  private boolean pointOnPolyline(PolylineData line, Point2D point) {
+    for (Line2D l : line.getLines()) {
+      if (lt.distBetweenPointAndLineSegment(l, point) <= Configuration.EPSILON) {
+        return true;
+      }
+    }
+    return false;
+  }
+}
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReferenceParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReferenceParser.java
index f2efd4e5da3c5707f0cafbb68e8fcc1232ae4a37..3439c7fd94af2f96f509d2be4fb996f1ecac68de 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReferenceParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ReferenceParser.java
@@ -15,7 +15,7 @@ import lcsb.mapviewer.model.map.*;
 import lcsb.mapviewer.wikipathway.model.ReferenceMapping;
 
 /**
- * Parser used to extract {@link MiriamData refernces} in miriam format from
+ * Parser used to extract {@link MiriamData references} in miriam format from
  * GPML data.
  * 
  * @author Piotr Gawron
@@ -35,7 +35,7 @@ public class ReferenceParser extends ElementGpmlParser<MiriamData> {
    *          - resource identifier
    * @param db
    *          -database type
-   * @return {@link MiriamData} object referenceing to the resource
+   * @return {@link MiriamData} object referencing to the resource
    */
   protected MiriamData createMiriamData(String id, String db) {
     if (db == null || db.equals("")) {
@@ -67,6 +67,26 @@ public class ReferenceParser extends ElementGpmlParser<MiriamData> {
     }
   }
 
+  public MiriamData hrefToMiriamData(String href) {
+    if (href == null) {
+      return null;
+    }
+    if (href.startsWith("https://omim.org/entry/")) {
+      return new MiriamData(MiriamType.OMIM, href.replaceAll("https://omim.org/entry/", ""));
+    }
+    if (href.startsWith("http://omim.org/entry/")) {
+      return new MiriamData(MiriamType.OMIM, href.replaceAll("http://omim.org/entry/", ""));
+    }
+    if (href.startsWith("https://omim.org/")) {
+      return new MiriamData(MiriamType.OMIM, href.replaceAll("https://omim.org/", ""));
+    }
+    if (href.startsWith("http://omim.org/")) {
+      return new MiriamData(MiriamType.OMIM, href.replaceAll("http://omim.org/", ""));
+    }
+    logger.warn("Don't know how to process href: " + href);
+    return null;
+  }
+
   @Override
   public MiriamData parse(Element node) {
     String id = null;
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ShapeParser.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ShapeParser.java
index 532fdd97c23c7eb379bf3e8c90d68b11bdd5925b..cd1834340f271c4eb07094a2c2b4de658193e6fe 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ShapeParser.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/XML/ShapeParser.java
@@ -108,6 +108,7 @@ public class ShapeParser extends GraphicalPathwayElementParser<Shape> {
       switch (value) {
       case ("Double"):
         shape.setLineType(LineType.DOUBLE);
+        shape.setCompartment(true);
         break;
       default:
         logger.warn(shape.getWarningPrefix() + "Unknown line type: " + value);
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/DataNode.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/DataNode.java
index 480dfef4fec3c4374d8d183ff5c67948b9e003bb..e3262048f1d0cc409965b29382c4f296152de8ff 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/DataNode.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/DataNode.java
@@ -7,7 +7,7 @@ import lcsb.mapviewer.model.graphics.LineType;
 import lcsb.mapviewer.model.map.MiriamData;
 
 /**
- * Class used to store data from DataNode from .gpml.
+ * Class used to store data from DataNode from GPML.
  * 
  * @author Jan Badura
  * 
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Direction.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Direction.java
index 2fddb3e568501e598d8f53504740de1a984b4ef3..f808f3ad8e5a81b2c7a96c3ef064bc7ebbef6ed2 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Direction.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Direction.java
@@ -27,7 +27,13 @@ public enum Direction {
   /**
    * West.
    */
-  WEST(Axis.EAST_WEST);
+  WEST(Axis.EAST_WEST),
+
+  /**
+   * None.
+   */
+  NONE(null),
+  ;
 
   /**
    * Defines axis in which direction lies (either {@link Axis#NORTH_SOUTH} or
@@ -36,7 +42,7 @@ public enum Direction {
   private Axis axis;
 
   /**
-   * Default cosntructor.
+   * Default constructor.
    * 
    * @param axis
    *          {@link #axis}
@@ -59,7 +65,11 @@ public enum Direction {
    * @return next direction (by 90 degrees) in clockwise order
    */
   public Direction nextClockwiseDirection() {
-    return values()[(this.ordinal() + 1) % values().length];
+    Direction result = values()[(this.ordinal() + 1) % values().length];
+    if (result == NONE) {
+      result = values()[(this.ordinal() + 2) % values().length];
+    }
+    return result;
   }
 
   /**
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Edge.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Edge.java
index 7baa8a54aaee6be32cf4da62743596f5147b0444..7b9d4d2f11d897d61265afce38ae96254c1bf4f0 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Edge.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Edge.java
@@ -29,7 +29,7 @@ public class Edge implements Serializable {
   private static final long serialVersionUID = 1L;
 
   /**
-   * Epsilon valu used for comparison of doubles.
+   * Epsilon value used for comparison of doubles.
    */
   private static final Double EPSILON = 1e-6;
 
@@ -39,7 +39,7 @@ public class Edge implements Serializable {
   private final transient Logger logger = LogManager.getLogger(Edge.class);
 
   /**
-   * Identifier in gpml model.
+   * Identifier in GPML model.
    */
   private String graphId;
 
@@ -69,9 +69,11 @@ public class Edge implements Serializable {
   private PolylineData line = new PolylineData();
 
   /**
-   * Gpml interaction type (arrow).
+   * GPML interaction type (arrow).
    */
   private GpmlInteractionType type = GpmlInteractionType.LINE;
+  
+  private boolean reversibleReaction = false;
 
   /**
    * References for given edge.
@@ -89,7 +91,7 @@ public class Edge implements Serializable {
   private List<String> comments = new ArrayList<>();
 
   /**
-   * List of identifiers used by biopax nodes that are inside gpml. These biopax
+   * List of identifiers used by BioPax nodes that are inside GPML. These BioPax
    * nodes contain annotations.
    */
   private List<String> biopaxReferences = new ArrayList<String>();
@@ -124,6 +126,7 @@ public class Edge implements Serializable {
     this.comments.addAll(original.getComments());
     this.biopaxReferences.addAll(original.getBiopaxReferences());
     this.zOrder = original.getzOrder();
+    this.reversibleReaction = original.isReversibleReaction();
   }
 
   /**
@@ -467,4 +470,12 @@ public class Edge implements Serializable {
     this.groupRef = groupRef;
   }
 
+  public boolean isReversibleReaction() {
+    return reversibleReaction;
+  }
+
+  public void setReversibleReaction(boolean reversibleReaction) {
+    this.reversibleReaction = reversibleReaction;
+  }
+
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Graph.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Graph.java
index e789c9debc84a97275a71df7007dacbbca90556d..69efb26c026e0bc9b0e100bb524689d2db250303 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Graph.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Graph.java
@@ -45,7 +45,7 @@ public class Graph implements Serializable {
   private double boardHeight;
 
   /**
-   * Information about biopax data in the gpml file.
+   * Information about BioPax data in the GPML file.
    */
   private BiopaxData biopaxData;
 
@@ -171,7 +171,11 @@ public class Graph implements Serializable {
     dataNodes.put(node.getGraphId(), node);
     nodes.put(node.getGraphId(), node);
     if (node.getGroupRef() != null && !node.getGroupRef().equals("")) {
-      groupsByGroupId.get(node.getGroupRef()).addNode(node);
+      if (groupsByGroupId.get(node.getGroupRef()) == null) {
+        logger.warn(node.getWarningPrefix() + "Missing group: " + node.getGroupRef());
+      } else {
+        groupsByGroupId.get(node.getGroupRef()).addNode(node);
+      }
     }
   }
 
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/GraphicalPathwayElement.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/GraphicalPathwayElement.java
index 2bb2c2bd468fb48c4e5d618bd6a9d98490b4f601..76174f80a8b0b4023b599d6b07d7b149671e4ee0 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/GraphicalPathwayElement.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/GraphicalPathwayElement.java
@@ -10,7 +10,7 @@ import lcsb.mapviewer.common.geometry.TextAlignment;
 import lcsb.mapviewer.model.graphics.LineType;
 
 /**
- * Class with common data for all Gpml elements that have a graphical
+ * Class with common data for all GPML elements that have a graphical
  * representation on the map.
  * 
  * @author Piotr Gawron
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Interaction.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Interaction.java
index 563536b9f0ed99fb1c720797903e603b1331bad6..0c70c936581c3746772a858415d81b6287fd3918 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Interaction.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Interaction.java
@@ -1,20 +1,23 @@
 package lcsb.mapviewer.wikipathway.model;
 
-import java.awt.*;
+import java.awt.Color;
 import java.io.Serializable;
 import java.util.*;
-import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
 
 import lcsb.mapviewer.model.graphics.PolylineData;
 import lcsb.mapviewer.model.map.MiriamData;
 
 /**
- * Class used to store data from Interaction from .gpml.
+ * Class used to store data from Interaction from GPML.
  * 
  * @author Jan Badura
  * 
  */
 public class Interaction implements Serializable {
+  static Logger logger = LogManager.getLogger();
 
   /**
    * 
@@ -22,7 +25,7 @@ public class Interaction implements Serializable {
   private static final long serialVersionUID = 1L;
 
   /**
-   * Identifier in gpml model.
+   * Identifier in GPML model.
    */
   private String graphId;
 
@@ -67,28 +70,30 @@ public class Interaction implements Serializable {
   /**
    * List of edges representing reactants in interaction.
    */
-  private Set<Edge> reactants = new HashSet<Edge>();
+  private Set<Edge> reactants = new HashSet<>();
 
   /**
    * List of edges representing products in interaction.
    */
-  private Set<Edge> products = new HashSet<Edge>();
+  private Set<Edge> products = new HashSet<>();
 
   /**
    * List of edges representing modifiers in interaction.
    */
-  private Set<Edge> modifiers = new HashSet<Edge>();
+  private Set<Edge> modifiers = new HashSet<>();
 
   /**
-   * Identifiers of biopax references.
+   * Identifiers of BioPax references.
    */
-  private Set<String> biopaxReferences = new HashSet<String>();
+  private Set<String> biopaxReferences = new HashSet<>();
 
   /**
    * References for given edge.
    */
   private List<MiriamData> references = new ArrayList<>();
 
+  private boolean reversible = false;
+
   /**
    * Default constructor.
    * 
@@ -108,13 +113,14 @@ public class Interaction implements Serializable {
     setColor(edge.getColor());
     this.comments.addAll(edge.getComments());
     biopaxReferences.addAll(edge.getBiopaxReferences());
+    reversible = edge.isReversibleReaction();
   }
 
   /**
    * Empty constructor that should be used only by serialization tools and
    * subclasses.
    */
-  protected Interaction() {
+  Interaction() {
   }
 
   /**
@@ -385,4 +391,12 @@ public class Interaction implements Serializable {
     this.zOrder = zOrder;
   }
 
+  public boolean isReversible() {
+    return reversible;
+  }
+
+  public void setReversible(boolean reversible) {
+    this.reversible = reversible;
+  }
+
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Label.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Label.java
index d6ba71d23cc78adc7652af090d386ecd27289168..9a59e192093576db4004662ebea56770d1d1d840 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Label.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Label.java
@@ -1,13 +1,23 @@
 package lcsb.mapviewer.wikipathway.model;
 
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import lcsb.mapviewer.model.map.MiriamData;
+
 /**
- * Class used to store data from Label from .gpml.
+ * Class used to store data from Label from GPML.
  * 
  * @author Jan Badura
  * 
  */
 public class Label extends GraphicalPathwayElement {
 
+  static Logger logger = LogManager.getLogger();
+
   /**
    * 
    */
@@ -38,6 +48,8 @@ public class Label extends GraphicalPathwayElement {
    */
   private String groupRef;
 
+  private Set<MiriamData> references = new HashSet<>();
+
   /**
    * Sometimes {@link Label labels} are connected to reactions. This field
    */
@@ -169,4 +181,15 @@ public class Label extends GraphicalPathwayElement {
     this.shape = shape;
   }
 
+  public Set<MiriamData> getReferences() {
+    return references;
+  }
+
+  public void setReferences(Set<MiriamData> references) {
+    this.references = references;
+  }
+
+  public void addReference(MiriamData md) {
+    this.references.add(md);
+  }
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PathwayElement.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PathwayElement.java
index 4b0a7263e85e47154e805dfa4fe3d3a9900665e2..ad817852bfa0ba1bc8a4a68043ca8105376c6715 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PathwayElement.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PathwayElement.java
@@ -9,7 +9,7 @@ import java.util.List;
  * Abstract class for pathway elements. It defines common functionalities for
  * all elements in the model. There are two known subclasses:
  * <ul>
- * <li>{@link GraphicalPathwayElement}, representing elemnts with some graphical
+ * <li>{@link GraphicalPathwayElement}, representing elements with some graphical
  * representation</li>
  * <li>{@link Group}, representing just groups of elements</li>
  * </ul>
@@ -41,7 +41,7 @@ public abstract class PathwayElement implements Serializable {
 
   /**
    * 
-   * Reference to biopax node with references about this element.
+   * Reference to BioPax node with references about this element.
    */
   private List<String> biopaxReferences = new ArrayList<>();
 
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PointData.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PointData.java
index a651e4af3e98a96233c4bcca32afe340593631a6..bff65363b8b948998d165a48faf8826744b669a4 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PointData.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/PointData.java
@@ -7,7 +7,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 /**
- * Class that defines infgomration about point stored in gpml structures.
+ * Class that defines information about point stored in GPML structures.
  * 
  * @author Piotr Gawron
  *
@@ -20,7 +20,7 @@ public class PointData implements Serializable {
   private static final long serialVersionUID = 1L;
 
   /**
-   * Defdault clas logger.
+   * Default class logger.
    */
   private final transient Logger logger = LogManager.getLogger(PointData.class);
 
@@ -35,7 +35,7 @@ public class PointData implements Serializable {
   private Double y;
 
   /**
-   * String identifing anchor point on the map.
+   * String identifying anchor point on the map.
    */
   private String graphRef;
 
@@ -52,7 +52,7 @@ public class PointData implements Serializable {
   private String relY;
 
   /**
-   * Type of line asociated with line that ends in this point.
+   * Type of line associated with line that ends in this point.
    */
   private GpmlInteractionType type;
 
@@ -180,8 +180,10 @@ public class PointData implements Serializable {
       return Direction.SOUTH;
     } else if (relY.equals("-1.0")) {
       return Direction.NORTH;
+    } else if (relX.equals("0.0") && relY.equals("0.0")) {
+      return Direction.NONE;
     } else {
-      logger.warn(
+      logger.warn("[" + graphRef + "]\t" +
           "Cannot determine connection direction from values: relX=" + relX + "; relY=" + relY + ". Estimating...");
       double xVal = Double.valueOf(relX);
       double yVal = Double.valueOf(relY);
@@ -200,4 +202,10 @@ public class PointData implements Serializable {
       }
     }
   }
+
+  @Override
+  public String toString() {
+    return "[" + this.getClass().getSimpleName() + " x=" + x + "; y=" + y + "; graphRef=" + graphRef + "; relX=" + relX
+        + "; relY=" + relY + "; type=" + type + "]";
+  }
 }
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Shape.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Shape.java
index 8755fc2ebc6ed28f4916d039bf29f876d3a9a91d..4f5c2a2e490482e2b0ce2017efd8ca1e2abced72 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Shape.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/Shape.java
@@ -1,7 +1,9 @@
 package lcsb.mapviewer.wikipathway.model;
 
+import java.awt.Color;
+
 /**
- * Class used to store data from Shape from .gpml.
+ * Class used to store data from Shape from GPML.
  * 
  * @author Jan Badura
  * 
@@ -66,6 +68,7 @@ public class Shape extends GraphicalPathwayElement {
     setTextLabel(null);
     setGroupRef(null);
     setCompartment(false);
+    setFillColor(Color.GRAY);
   }
 
   /**
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxData.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxData.java
index 48b8c782c244708bcabb4fbed7128bfecaff6d09..60422b26e2b2ba444a15d7e1da3b0c2d4e5f795d 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxData.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxData.java
@@ -9,7 +9,7 @@ import org.apache.logging.log4j.Logger;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 
 /**
- * Element containg all biopax information parsed from gpml file.
+ * Element containing all BioPax information parsed from GPML file.
  * 
  * @author Piotr Gawron
  * 
@@ -30,12 +30,12 @@ public class BiopaxData implements Serializable {
   /**
    * List of {@link BiopaxPublication publications}.
    */
-  private Map<String, BiopaxPublication> publications = new HashMap<String, BiopaxPublication>();
+  private Map<String, BiopaxPublication> publications = new HashMap<>();
 
   /**
-   * List of {@link BiopaxOpenControlledVocabulary biopax vocabulary}.
+   * List of {@link BiopaxOpenControlledVocabulary BioPax vocabulary}.
    */
-  private List<BiopaxOpenControlledVocabulary> openControlledVocabularies = new ArrayList<BiopaxOpenControlledVocabulary>();
+  private List<BiopaxOpenControlledVocabulary> openControlledVocabularies = new ArrayList<>();
 
   /**
    * @return the publications
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxFactory.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..ac63f06475c24a885664eb3b058fd75b6dd80655
--- /dev/null
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxFactory.java
@@ -0,0 +1,66 @@
+package lcsb.mapviewer.wikipathway.model.biopax;
+
+import java.util.*;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+
+import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.model.map.*;
+
+public class BiopaxFactory {
+  private Logger logger = LogManager.getLogger();
+
+  /**
+   * Creates {@link MiriamData annotation} from {@link BiopaxPublication}.
+   * 
+   * @param publication
+   *          input BioPax structure
+   * @return {@link MiriamData annotation}
+   */
+  public MiriamData createMiriamData(BiopaxPublication publication) {
+    if ("PubMed".equals(publication.getDb())) {
+      if (publication.getId() == null || publication.getId().equals("")) {
+        return null;
+      } else {
+        return new MiriamData(MiriamRelationType.BQ_BIOL_IS_DESCRIBED_BY, MiriamType.PUBMED, publication.getId());
+      }
+    } else {
+      throw new InvalidArgumentException("Unknown biopax database: " + publication.getDb());
+    }
+  }
+
+  /**
+   * Returns list of {@link MiriamData} that are referenced in {@link BiopaxData}
+   * with identifier given in biopaxReference.
+   * 
+   * @param biopaxData
+   *          {@link BiopaxData} where annotations are stored
+   * @param biopaxReference
+   *          list of references (to data in {@link BiopaxData}) that we want to
+   *          convert into {@link MiriamData}
+   * @return list of {@link MiriamData} that are referenced in {@link BiopaxData}
+   *         with identifier given in biopaxReference.
+   */
+  public Collection<MiriamData> getMiriamData(BiopaxData biopaxData, Collection<String> biopaxReference) {
+    List<MiriamData> result = new ArrayList<>();
+    for (String string : biopaxReference) {
+      if (biopaxData != null) {
+        BiopaxPublication bp = biopaxData.getPublicationByReference(string);
+        if (bp != null) {
+          MiriamData md = createMiriamData(bp);
+          if (md != null) {
+            result.add(md);
+          } else {
+            logger.warn("[" + string + "]\tBiopax publication is invalid.");
+          }
+        } else {
+          logger.warn("[" + string + "]\tBiopax publication doesn't exist.");
+        }
+      } else {
+        logger.warn("[Biopax, " + string + "]\tInvalid BioPax reference.");
+      }
+    }
+    return result;
+  }
+}
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxPublication.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxPublication.java
index 7960830511f434a586757bc65a4637b26ca3b91a..27bb5a00f658bfdf43b261a7c0dacfd64c2c73f7 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxPublication.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/model/biopax/BiopaxPublication.java
@@ -3,7 +3,7 @@ package lcsb.mapviewer.wikipathway.model.biopax;
 import java.io.Serializable;
 
 /**
- * Describes biopax node with publication.
+ * Describes BioPax node with publication.
  * 
  * @author Piotr Gawron
  * 
diff --git a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/utils/Geo.java b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/utils/Geo.java
index 71d92007b1965eaa3341a2774a44634f94025a16..dc9fa236c55a08f5f954a2f1fd6462fed6e01e0b 100644
--- a/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/utils/Geo.java
+++ b/pathvisio/src/main/java/lcsb/mapviewer/wikipathway/utils/Geo.java
@@ -15,12 +15,12 @@ import lcsb.mapviewer.model.graphics.PolylineData;
 public final class Geo {
 
   /**
-   * Max distance betwen point and line that still allows to match intersection.
+   * Max distance between point and line that still allows to match intersection.
    */
   private static final int DISTANCE_PROXIMITY = 10;
 
   /**
-   * Default class constructor. Prevents instatiation.
+   * Default class constructor. Prevents instantiation.
    */
   private Geo() {
 
@@ -134,55 +134,11 @@ public final class Geo {
     return res;
   }
 
-  /**
-   * This function returns point on the middle of rectangle side, that is closest
-   * to the given point.
-   * 
-   * @param rect
-   *          rectangle on which we look for a point
-   * @param point
-   *          point to which result should be as close as possible
-   * @return point on the middle of rectangle side that is as close as possible to
-   *         the input point
-   */
-  public static Point2D pointOnRectangle(Rectangle2D rect, Point2D point) {
-
-    Point2D p1 = new Point2D.Double(rect.getX(), rect.getY());
-    Point2D p2 = new Point2D.Double(rect.getX(), rect.getY() + rect.getHeight());
-    Point2D p3 = new Point2D.Double(rect.getX() + rect.getWidth(), rect.getY() + rect.getHeight());
-    Point2D p4 = new Point2D.Double(rect.getX() + rect.getWidth(), rect.getY());
-
-    Point2D p12 = new Point2D.Double((p1.getX() + p2.getX()) / 2, (p1.getY() + p2.getY()) / 2);
-    Point2D p23 = new Point2D.Double((p2.getX() + p3.getX()) / 2, (p2.getY() + p3.getY()) / 2);
-    Point2D p34 = new Point2D.Double((p3.getX() + p4.getX()) / 2, (p3.getY() + p4.getY()) / 2);
-    Point2D p41 = new Point2D.Double((p4.getX() + p1.getX()) / 2, (p4.getY() + p1.getY()) / 2);
-
-    double dis1, dis2, dis3, dis4, min;
-    dis1 = point.distance(p12);
-    dis2 = point.distance(p23);
-    dis3 = point.distance(p34);
-    dis4 = point.distance(p41);
-
-    min = Math.min(dis1, dis2);
-    min = Math.min(min, dis3);
-    min = Math.min(min, dis4);
-
-    if (min == dis1) {
-      return p12;
-    } else if (min == dis2) {
-      return p23;
-    } else if (min == dis3) {
-      return p34;
-    } else {
-      return p41;
-    }
-  }
-
   /**
    * This function returns point on rectangle that is closest to given point.
    * 
    * @param rect
-   *          rectangle on which the result poiint will be placed
+   *          rectangle on which the result point will be placed
    * @param point
    *          point for which we look the closest reference on rectangle
    * @return the closest possible point on rectangle
@@ -213,47 +169,6 @@ public final class Geo {
     }
   }
 
-  /**
-   * Returns point that is outside given rectangle, but still close to the given
-   * point. If the given point is inside rec then the given point is returned.
-   * 
-   * @param rec
-   *          rectangle
-   * @param point
-   *          point
-   * @return point that is outside given rectangle, but still close to the given
-   *         point
-   */
-  public static Point2D pointRightOutsideRec(Rectangle2D rec, Point2D point) {
-    if (!rec.contains(point)) {
-      return (Point2D) point.clone();
-    } else {
-      double lx = rec.getX();
-      double rx = lx + rec.getWidth();
-      double uy = rec.getY();
-      double dy = uy + rec.getHeight();
-
-      double dis1 = Math.abs(point.getX() - lx);
-      double dis2 = Math.abs(point.getX() - rx);
-      double dis3 = Math.abs(point.getY() - uy);
-      double dis4 = Math.abs(point.getY() - dy);
-
-      double min = Math.min(dis1, dis2);
-      min = Math.min(min, dis3);
-      min = Math.min(min, dis4);
-
-      if (min == dis1) {
-        return new Point2D.Double(lx - 1.0, point.getY());
-      } else if (min == dis2) {
-        return new Point2D.Double(rx + 1.0, point.getY());
-      } else if (min == dis3) {
-        return new Point2D.Double(point.getX(), uy - 1.0);
-      } else {
-        return new Point2D.Double(point.getX(), uy + 1.0);
-      }
-    }
-  }
-
   /**
    * Creates a {@link PolylineData} that is identical to parameter line, but
    * doesn't contain duplicate points.
@@ -293,13 +208,13 @@ public final class Geo {
   }
 
   /**
-   * Returns point on line that is as closse as possible to point.
+   * Returns point on line that is as close as possible to point.
    * 
    * @param point
    *          point
    * @param mainLine
    *          line
-   * @return point on line that is as closse as possible to point
+   * @return point on line that is as close as possible to point
    */
   public static Point2D closestPointOnPolyline(PolylineData mainLine, Point2D point) {
     Point2D res = null;
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ComplexReactionToModelTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ComplexReactionToModelTest.java
index 6ca53968c42ad10c8f1745bed83f9e7df115a490..5c0944c51e4bc6ae5357a1eb8ff326b1aafd2f9f 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ComplexReactionToModelTest.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ComplexReactionToModelTest.java
@@ -2,7 +2,7 @@ package lcsb.mapviewer.wikipathway;
 
 import static org.junit.Assert.*;
 
-import java.awt.*;
+import java.awt.Color;
 
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
@@ -48,7 +48,7 @@ public class ComplexReactionToModelTest extends WikipathwaysTestFunctions {
     assertEquals(2, reaction.getReactants().size());
     assertEquals(1, reaction.getProducts().size());
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
   }
 
   @Test
@@ -107,7 +107,7 @@ public class ComplexReactionToModelTest extends WikipathwaysTestFunctions {
 
     assertEquals("File " + fileName + " different after transformation", 0, mc.compare(model1, model2));
 
-    assertEquals(5, getWarnings().size());
+    assertEquals(4, getWarnings().size());
   }
 
   @Test
@@ -126,7 +126,7 @@ public class ComplexReactionToModelTest extends WikipathwaysTestFunctions {
     assertFalse(Color.BLACK.equals(redAlias.getFillColor()));
     assertTrue(Color.WHITE.equals(blackAlias.getFillColor()));
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
   }
 
   @Test
@@ -141,9 +141,9 @@ public class ComplexReactionToModelTest extends WikipathwaysTestFunctions {
       lineCount += node.getLine().getLines().size();
     }
 
-    assertEquals(4, lineCount);
+    assertEquals(3, lineCount);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
   }
 
 }
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java
index 3d7e5bab20526882f1efbb274272ec131cc5fd85..5431444858d8ac29f31004022adf3bab3c6cba7f 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/GPMLToModelTest.java
@@ -10,6 +10,7 @@ import org.junit.Test;
 
 import lcsb.mapviewer.common.geometry.PointTransformation;
 import lcsb.mapviewer.converter.model.celldesigner.geometry.ReactionCellDesignerConverter;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelComparator;
@@ -19,7 +20,7 @@ import lcsb.mapviewer.wikipathway.XML.GPMLToModel;
 
 public class GPMLToModelTest extends WikipathwaysTestFunctions {
 
-  static Logger logger = LogManager.getLogger(GPMLToModelTest.class);
+  static Logger logger = LogManager.getLogger();
 
   private ModelComparator mc = new ModelComparator(1.0);
 
@@ -29,17 +30,31 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void DopamineTest() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/Dopamine.gpml");
 
-    assertEquals(22, getWarnings().size());
+    assertEquals(20, getWarnings().size());
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
     assertEquals(0, mc.compare(model1, model2));
   }
 
+  @Test
+  public void testZIndex() throws Exception {
+    try {
+      Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/Dopamine.gpml");
+
+      for (Drawable bioEntity : model1.getDrawables()) {
+        assertNotNull(bioEntity.getElementId() + " has null z-index", bioEntity.getZ());
+      }
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+  }
+
   @Test
   public void WP1403_75220Test() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/WP1403_75220.gpml");
 
-    assertEquals(22, getWarnings().size());
+    assertEquals(20, getWarnings().size());
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
     assertEquals(0, mc.compare(model1, model2));
@@ -49,7 +64,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void WP528_76269Test() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/WP528_76269.gpml");
 
-    assertEquals(15, getWarnings().size());
+    assertEquals(12, getWarnings().size());
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
     assertEquals(0, mc.compare(model1, model2));
@@ -59,7 +74,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void WP550_73391Test() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/WP550_73391.gpml");
 
-    assertEquals(16, getWarnings().size());
+    assertEquals(12, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -70,7 +85,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void WP197_69902Test() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/WP197_69902.gpml");
 
-    assertEquals(3, getWarnings().size());
+    assertEquals(9, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -92,7 +107,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void WP306_71714Test() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/WP306_71714.gpml");
 
-    assertEquals(41, getWarnings().size());
+    assertEquals(40, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -103,7 +118,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void WP481_72080Test() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/WP481_72080.gpml");
 
-    assertEquals(22, getWarnings().size());
+    assertEquals(19, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -145,17 +160,6 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
     assertEquals(0, mc.compare(model1, model2));
   }
 
-  @Test
-  public void testGstp() throws Exception {
-    Model model1 = new GPMLToModel().getModel("testFiles/wikipathways/gstp.gpml");
-
-    assertEquals(3, getWarnings().size());
-
-    Model model2 = serializeModelOverCellDesignerParser(model1);
-
-    assertEquals(0, mc.compare(model1, model2));
-  }
-
   @Test
   public void testMissingAliasesInCompartment() throws Exception {
     Model model1 = new GPMLToModel().getModel("testFiles/small/missing_aliases_in_compartment.gpml");
@@ -197,8 +201,11 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
   public void testNonHypotheticlaComplex() throws Exception {
     String fileName = "testFiles/complex/nonhypothetical_complex.gpml";
     Model model = new GPMLToModel().getModel(fileName);
-    for (Complex species : model.getComplexList()) {
-      assertFalse("Complex parsed from gpml should be hypothetical", species.isHypothetical());
+    for (Complex complex : model.getComplexList()) {
+      assertFalse("Complex parsed from gpml should be hypothetical", complex.isHypothetical());
+      for (Species species : complex.getElements()) {
+        assertTrue("Complex z index should be lower than children x index", species.getZ() > complex.getZ());
+      }
     }
     assertEquals(0, getWarnings().size());
   }
@@ -214,7 +221,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
       }
     }
     assertTrue("Complex parsed from gpml should have a valid name", nameFound);
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
   }
 
   @Test
@@ -312,7 +319,7 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
     assertTrue("Modifier is too far from center point: " + distance,
         distance < ReactionCellDesignerConverter.RECT_SIZE);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
   }
 
   @Test
@@ -354,4 +361,78 @@ public class GPMLToModelTest extends WikipathwaysTestFunctions {
     assertNotNull(protein.getStructuralState());
   }
 
+  @Test
+  public void parseModelAnnotation() throws Exception {
+    String fileName = "testFiles/small/model_annotation.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    assertEquals(1, model.getMiriamData().size());
+    assertEquals(0, getWarnings().size());
+  }
+
+  @Test
+  public void parseInvalidModelAnnotation() throws Exception {
+    String fileName = "testFiles/small/model_invalid_annotation.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    assertEquals(0, model.getMiriamData().size());
+    assertEquals(2, getWarnings().size());
+  }
+
+  @Test
+  public void parseElementWithComment() throws Exception {
+    String fileName = "testFiles/small/element_with_comment.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    Element element = model.getElementByElementId("a12");
+    assertTrue(element.getNotes().length() > 0);
+  }
+
+  @Test
+  public void parseReversibleReaction() throws Exception {
+    String fileName = "testFiles/small/reversible_reaction.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    Reaction reaction = model.getReactionByReactionId("e5d42");
+    assertTrue(reaction.isReversible());
+  }
+
+  @Test
+  public void parseReactionWithLabelAsSideProduct() throws Exception {
+    String fileName = "testFiles/small/reaction_with_label_as_side_product.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    Reaction reaction = model.getReactionByReactionId("id6f2bfa37");
+    assertEquals(2, reaction.getProducts().size());
+  }
+
+  @Test
+  public void parseNodeWithMissingGroup() throws Exception {
+    String fileName = "testFiles/small/node_with_missing_group.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    assertEquals(1, getWarnings().size());
+    assertEquals(1, model.getElements().size());
+  }
+
+  @Test
+  public void parseMoleculeWithColor() throws Exception {
+    String fileName = "testFiles/small/molecule_with_color.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    Element element = model.getElementByElementId("d9620");
+    logger.debug(element.getFontColor());
+  }
+
+  @Test
+  public void parseComplexName() throws Exception {
+    String fileName = "testFiles/small/compartment_without_name_and_with_complex_with_name.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    Complex complex = model.getElementByElementId("b33da");
+    assertFalse(complex.getName().isEmpty());
+    Compartment compartment = model.getElementByElementId("a3e41");
+    assertTrue(compartment.getName().isEmpty());
+  }
+
+  @Test
+  public void parseCompartmentFromShape() throws Exception {
+    String fileName = "testFiles/small/compartment_from_shape.gpml";
+    Model model = new GPMLToModel().getModel(fileName);
+    Compartment compartment = model.getElementByElementId("d5695");
+    assertFalse(compartment.getName().isEmpty());
+    assertTrue(compartment.contains(compartment.getNamePoint()));
+  }
 }
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionElbowsTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionElbowsTest.java
index 4e9b4a2cd58f9d642a9e6c89215ab52a870f7da0..47bac7caa84620fb41e5c180e49eaaf41ce79932 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionElbowsTest.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionElbowsTest.java
@@ -43,9 +43,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(5, lines);
+    assertEquals(4, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -70,9 +70,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -97,9 +97,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -124,9 +124,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(7, lines);
+    assertEquals(6, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -151,9 +151,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -178,9 +178,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -205,9 +205,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -232,9 +232,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -259,9 +259,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(5, lines);
+    assertEquals(4, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -286,9 +286,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -313,9 +313,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -340,9 +340,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(5, lines);
+    assertEquals(4, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -367,9 +367,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(5, lines);
+    assertEquals(4, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -394,9 +394,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -421,9 +421,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -448,9 +448,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(5, lines);
+    assertEquals(4, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -475,9 +475,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -502,9 +502,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -529,9 +529,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -556,9 +556,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -583,9 +583,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(7, lines);
+    assertEquals(6, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -610,9 +610,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(6, lines);
+    assertEquals(5, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -637,9 +637,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(4, lines);
+    assertEquals(3, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
@@ -664,9 +664,9 @@ public class ReactionElbowsTest extends WikipathwaysTestFunctions {
       }
     }
 
-    assertEquals(5, lines);
+    assertEquals(4, lines);
 
-    assertEquals(1, getWarnings().size());
+    assertEquals(0, getWarnings().size());
 
     Model model2 = serializeModelOverCellDesignerParser(model1);
 
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionGpmlInputToModelTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionGpmlInputToModelTest.java
index b0cafb8f6bb0bb44870d0bff5b662ee190f38762..4f27be00af8391a07cf081a72844e27c68aba6d0 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionGpmlInputToModelTest.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/ReactionGpmlInputToModelTest.java
@@ -2,6 +2,10 @@ package lcsb.mapviewer.wikipathway;
 
 import static org.junit.Assert.*;
 
+import java.awt.Color;
+import java.awt.geom.Point2D;
+import java.util.List;
+
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.Test;
@@ -1137,4 +1141,18 @@ public class ReactionGpmlInputToModelTest extends WikipathwaysTestFunctions {
 
     assertEquals(0, mc.compare(model1, model2));
   }
+
+  @Test
+  public void testProblematicInhibition() throws Exception {
+    String fileName = "testFiles/reactions/inhibition_with_problematic_line.gpml";
+
+    Model model1 = new GPMLToModel().getModel(fileName);
+    Reaction r = model1.getReactionByReactionId("eff08");
+    r.getLine().setColor(Color.BLUE);
+
+    List<Point2D> points = r.getProducts().get(0).getLine().getPoints();
+    assertTrue("End points shouldn't be too close",
+        points.get(points.size() - 1).distance(points.get(points.size() - 2)) > 0);
+  }
+
 }
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java
index 81430606958253c7871315d36b2cc4147b45f43c..c263cc8a5dabcf43a1a001e125cf02256a4007f6 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/WikipathwaysTestFunctions.java
@@ -1,5 +1,6 @@
 package lcsb.mapviewer.wikipathway;
 
+import java.awt.Color;
 import java.io.*;
 import java.net.URL;
 import java.net.URLConnection;
@@ -24,8 +25,10 @@ import lcsb.mapviewer.common.*;
 import lcsb.mapviewer.common.exception.InvalidXmlSchemaException;
 import lcsb.mapviewer.converter.*;
 import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
-import lcsb.mapviewer.model.map.BioEntity;
+import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.Drawable;
 import lcsb.mapviewer.model.map.InconsistentModelException;
+import lcsb.mapviewer.model.map.compartment.Compartment;
 import lcsb.mapviewer.model.map.model.Model;
 
 public abstract class WikipathwaysTestFunctions {
@@ -218,8 +221,17 @@ public abstract class WikipathwaysTestFunctions {
 
   protected Model serializeModelOverCellDesignerParser(Model model1)
       throws InconsistentModelException, InvalidInputDataExecption {
-    for (BioEntity bioEntity : model1.getBioEntities()) {
-      bioEntity.setZ(null);
+    for (Drawable bioEntity : model1.getDrawables()) {
+      if (!(bioEntity instanceof PolylineData)) {
+        bioEntity.setZ(null);
+      }
+    }
+    for (lcsb.mapviewer.model.map.species.Element bioEntity : model1.getElements()) {
+        bioEntity.setFontColor(Color.BLACK);
+    }
+    //CellDesigner doesn't allow to store compartment font size
+    for (Compartment bioEntity : model1.getCompartments()) {
+      bioEntity.setFontSize(Compartment.DEFAULT_COMPARTMENT_THICKNESS);
     }
     new ZIndexPopulator().populateZIndex(model1);
     CellDesignerXmlParser parser = new CellDesignerXmlParser();
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/AllXmlTests.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/AllXmlTests.java
index f52b49dddb85a54e886ff437c1cf89f87af47d41..b58aafc3d297662f10bff109cec124dd411eee8e 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/AllXmlTests.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/AllXmlTests.java
@@ -9,11 +9,13 @@ import org.junit.runners.Suite.SuiteClasses;
     DataNodeParserTest.class,
     BugTest.class,
     EdgeLineParserTest.class,
+    EdgeParserTest.class,
     GpmlParserTest.class,
     LabelParserTest.class,
-    ReferenceParserTest.class,
     ModelToGPMLTest.class,
     ModelContructorTest.class,
+    ReactionLayoutFinderTest.class,
+    ReferenceParserTest.class,
     ShapeParserTest.class,
     StateParserTest.class,
 })
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/EdgeParserTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/EdgeParserTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..e59195edd55a88e15401db9d874ad768d3256a44
--- /dev/null
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/EdgeParserTest.java
@@ -0,0 +1,103 @@
+package lcsb.mapviewer.wikipathway.XML;
+
+import static org.junit.Assert.assertEquals;
+
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.Test;
+
+import lcsb.mapviewer.common.Configuration;
+import lcsb.mapviewer.wikipathway.model.*;
+
+public class EdgeParserTest {
+
+  Logger logger = LogManager.getLogger();
+
+  EdgeParser parser = new EdgeParser();
+
+  @Test
+  public void testGetPointsWithoutTargetDirection() throws Exception {
+    List<PointData> gpmlPoints = new ArrayList<>();
+    PointData pointData = new PointData();
+    pointData.setX(370.0);
+    pointData.setY(506.9845153753351);
+    pointData.setRelX("0.0");
+    pointData.setRelY("1.0");
+    pointData.setGraphRef("db29a");
+    gpmlPoints.add(pointData);
+
+    pointData = new PointData();
+    pointData.setX(337.9360555506242);
+    pointData.setY(558.2089552238806);
+    gpmlPoints.add(pointData);
+
+    pointData = new PointData();
+    pointData.setX(305.8721111012484);
+    pointData.setY(587.6687409348253);
+    pointData.setRelX("0.0");
+    pointData.setRelY("0.0");
+    pointData.setGraphRef("ba36a");
+    pointData.setType(GpmlInteractionType.CONVERSION);
+    gpmlPoints.add(pointData);
+
+    GpmlLineConnectorType type = GpmlLineConnectorType.ELBOW;
+
+    List<Point2D> result = parser.getPoints(null, gpmlPoints, type);
+
+    assertEquals(0.0, result.get(0).distance(new Point2D.Double(370.0, 506.9845153753351)), Configuration.EPSILON);
+    assertEquals(0.0, result.get(1).distance(new Point2D.Double(370.0, 558.2089552238806)), Configuration.EPSILON);
+    assertEquals(0.0, result.get(2).distance(new Point2D.Double(305.8721111012484, 558.2089552238806)),
+        Configuration.EPSILON);
+    assertEquals(0.0, result.get(3).distance(new Point2D.Double(305.8721111012484, 587.6687409348253)),
+        Configuration.EPSILON);
+  }
+
+  @Test
+  public void testGetPointsWithoutSourceDirection() throws Exception {
+    List<PointData> gpmlPoints = new ArrayList<>();
+    PointData pointData = new PointData();
+    pointData.setX(418.1490729057133);
+    pointData.setY(421.3813636363637);
+    pointData.setRelX("0.0");
+    pointData.setRelY("0.0");
+    pointData.setGraphRef("f78da");
+    gpmlPoints.add(pointData);
+
+    pointData = new PointData();
+    pointData.setX(506.83491062039946);
+    pointData.setY(396.35686597839583);
+    gpmlPoints.add(pointData);
+
+    pointData = new PointData();
+    pointData.setX(506.83491062039946);
+    pointData.setY(369.3819137749735);
+    gpmlPoints.add(pointData);
+
+    pointData = new PointData();
+    pointData.setX(718.8015247108307);
+    pointData.setY(343.0727655099894);
+    pointData.setRelX("0.0");
+    pointData.setRelY("1.0");
+    pointData.setGraphRef("ca8");
+    pointData.setType(GpmlInteractionType.ARROW);
+    gpmlPoints.add(pointData);
+
+    GpmlLineConnectorType type = GpmlLineConnectorType.ELBOW;
+
+    List<Point2D> result = parser.getPoints(null, gpmlPoints, type);
+
+    assertEquals(0.0, result.get(0).distance(new Point2D.Double(418.1490729057133, 421.3813636363637)), Configuration.EPSILON);
+    assertEquals(0.0, result.get(1).distance(new Point2D.Double(506.83491062039946, 421.3813636363637)), Configuration.EPSILON);
+    assertEquals(0.0, result.get(2).distance(new Point2D.Double(506.83491062039946, 369.3819137749735)),
+        Configuration.EPSILON);
+    assertEquals(0.0, result.get(3).distance(new Point2D.Double(718.8015247108307, 369.3819137749735)),
+        Configuration.EPSILON);
+    assertEquals(0.0, result.get(4).distance(new Point2D.Double(718.8015247108307, 343.0727655099894)),
+        Configuration.EPSILON);
+  }
+
+}
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/LabelParserTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/LabelParserTest.java
index 14f6aeb0f9341a7099559b80e95088af923fc580..aa346f17ef07767653f3a8f4312c37269aea867e 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/LabelParserTest.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/LabelParserTest.java
@@ -2,7 +2,7 @@ package lcsb.mapviewer.wikipathway.XML;
 
 import static org.junit.Assert.*;
 
-import java.awt.*;
+import java.awt.Color;
 
 import org.junit.*;
 import org.w3c.dom.Element;
@@ -42,6 +42,17 @@ public class LabelParserTest extends WikipathwaysTestFunctions {
     assertEquals(0, getWarnings().size());
   }
 
+  @Test
+  public void testParseLabeHrefl() throws Exception {
+    Element node = fileToNode("testFiles/elements/label_href.xml");
+    Label label = parser.parse(node);
+    assertNotNull(label);
+
+    assertEquals(1, label.getReferences().size());
+
+    assertEquals(0, getWarnings().size());
+  }
+
   @Test
   public void testParseGraphics() throws Exception {
     Element node = fileToNode("testFiles/elements/label_graphics.xml");
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java
index 2d960c9302a4dba1fb8cb97d8dfdc02ab875ec65..acb69da6375af10472e03df7a029ac0652ed50ec 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ModelContructorTest.java
@@ -1,9 +1,8 @@
 package lcsb.mapviewer.wikipathway.XML;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.*;
 
-import java.awt.geom.Point2D;
+import java.awt.geom.Rectangle2D;
 import java.io.ByteArrayInputStream;
 import java.nio.charset.StandardCharsets;
 
@@ -11,8 +10,7 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 import org.junit.*;
 
-import lcsb.mapviewer.common.Pair;
-import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.common.Configuration;
 import lcsb.mapviewer.model.map.model.*;
 import lcsb.mapviewer.model.map.species.GenericProtein;
 import lcsb.mapviewer.wikipathway.WikipathwaysTestFunctions;
@@ -32,21 +30,6 @@ public class ModelContructorTest extends WikipathwaysTestFunctions {
   public void tearDown() throws Exception {
   }
 
-  @Test
-  public void testSplitPolyline() {
-    Point2D p1 = new Point2D.Double(1455.5988605049254, 562.0578193221613);
-    Point2D p2 = new Point2D.Double(1455.5988605049254, 562.0578193221613);
-    PolylineData pd = new PolylineData(p1, p2);
-
-    ModelContructor mc = new ModelContructor();
-    Pair<PolylineData, PolylineData> result = mc.splitPolyline(pd);
-    assertNotNull(result);
-    assertNotNull(result.getLeft());
-    assertNotNull(result.getRight());
-    assertEquals(2, result.getLeft().getPoints().size());
-    assertEquals(2, result.getRight().getPoints().size());
-  }
-
   @Test
   public void testZIndexForElement() throws Exception {
     ModelToGPML parser = new ModelToGPML();
@@ -76,4 +59,51 @@ public class ModelContructorTest extends WikipathwaysTestFunctions {
     return result;
   }
 
+  @Test
+  public void testShouldRotate90degreesWithNoAsAnswer() {
+    ModelContructor mc = new ModelContructor();
+    assertFalse(mc.shouldRotate90degrees(0.0));
+    assertFalse(mc.shouldRotate90degrees(Math.PI));
+    assertFalse(mc.shouldRotate90degrees(15 * Math.PI));
+    assertFalse(mc.shouldRotate90degrees(-Math.PI));
+    assertFalse(mc.shouldRotate90degrees(null));
+  }
+
+  @Test
+  public void testShouldRotate90degrees() {
+    ModelContructor mc = new ModelContructor();
+    assertTrue(mc.shouldRotate90degrees(Math.PI / 2));
+    assertTrue(mc.shouldRotate90degrees(15 * Math.PI / 2));
+    assertTrue(mc.shouldRotate90degrees(-Math.PI / 2));
+  }
+
+  @Test
+  public void testShouldRotate90degreesWithWarnings() {
+    ModelContructor mc = new ModelContructor();
+    assertFalse(mc.shouldRotate90degrees(0.0 + 0.5));
+    assertEquals(1, super.getWarnings().size());
+    assertFalse(mc.shouldRotate90degrees(Math.PI + 0.5));
+    assertEquals(2, super.getWarnings().size());
+    assertFalse(mc.shouldRotate90degrees(15 * Math.PI + 0.5));
+    assertEquals(3, super.getWarnings().size());
+    assertFalse(mc.shouldRotate90degrees(-Math.PI + 0.5));
+    assertEquals(4, super.getWarnings().size());
+    assertTrue(mc.shouldRotate90degrees(Math.PI / 2 + 0.5));
+    assertEquals(5, super.getWarnings().size());
+    assertTrue(mc.shouldRotate90degrees(15 * Math.PI / 2 + 0.5));
+    assertEquals(6, super.getWarnings().size());
+    assertTrue(mc.shouldRotate90degrees(-Math.PI / 2 + 0.5));
+    assertEquals(7, super.getWarnings().size());
+  }
+
+  @Test
+  public void testRotate90degrees() {
+    ModelContructor mc = new ModelContructor();
+    Rectangle2D result = mc.rotate90degrees(new Rectangle2D.Double(10, 20, 30, 40));
+    assertEquals(5, result.getX(), Configuration.EPSILON);
+    assertEquals(25, result.getY(), Configuration.EPSILON);
+    assertEquals(40, result.getWidth(), Configuration.EPSILON);
+    assertEquals(30, result.getHeight(), Configuration.EPSILON);
+  }
+
 }
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ReactionLayoutFinderTest.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ReactionLayoutFinderTest.java
new file mode 100644
index 0000000000000000000000000000000000000000..0dc4747db50c4a46497978b09be33d9c4053c452
--- /dev/null
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/XML/ReactionLayoutFinderTest.java
@@ -0,0 +1,270 @@
+package lcsb.mapviewer.wikipathway.XML;
+
+import static org.junit.Assert.*;
+
+import java.awt.geom.Line2D;
+import java.awt.geom.Point2D;
+import java.util.Arrays;
+import java.util.Map;
+
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.junit.Before;
+import org.junit.Test;
+
+import lcsb.mapviewer.common.Configuration;
+import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.common.geometry.LineTransformation;
+import lcsb.mapviewer.model.graphics.PolylineData;
+import lcsb.mapviewer.model.map.reaction.*;
+import lcsb.mapviewer.wikipathway.WikipathwaysTestFunctions;
+import lcsb.mapviewer.wikipathway.model.Edge;
+import lcsb.mapviewer.wikipathway.model.Interaction;
+
+public class ReactionLayoutFinderTest extends WikipathwaysTestFunctions {
+
+  Logger logger = LogManager.getLogger();
+
+  LineTransformation lt = new LineTransformation();
+
+  ReactionLayoutFinder finder;
+
+  @Before
+  public void setUp() {
+    finder = new ReactionLayoutFinder();
+  }
+
+  @Test
+  public void testNodePointsInteractionWithoutAnything() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithAdditionalReactant() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addReactant(createEdge("react1", new Point2D.Double(10, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Reactant.class).distance(new Point2D.Double(10, 0)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithShiftedReactant() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addReactant(createEdge("react1", new Point2D.Double(60, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Reactant.class).distance(new Point2D.Double(60, 0)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithAdditionalProduct() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addProduct(createEdge("prod", new Point2D.Double(80, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Product.class).distance(new Point2D.Double(80, 0)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithAdditionalModifier() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addModifier(createEdge("modifier", new Point2D.Double(80, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Modifier.class).distance(new Point2D.Double(80, 0)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithMultiNodes() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addReactant(createEdge("react1", new Point2D.Double(10, 0), new Point2D.Double(200, 200)));
+    interaction.addReactant(createEdge("react2", new Point2D.Double(20, 0), new Point2D.Double(200, 200)));
+    interaction.addReactant(createEdge("react3", new Point2D.Double(30, 0), new Point2D.Double(200, 200)));
+    interaction.addModifier(createEdge("modifier", new Point2D.Double(40, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod1", new Point2D.Double(50, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod2", new Point2D.Double(60, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod3", new Point2D.Double(70, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Modifier.class).distance(new Point2D.Double(40, 0)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithMultiModifiers() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addReactant(createEdge("react1", new Point2D.Double(10, 0), new Point2D.Double(200, 200)));
+    interaction.addReactant(createEdge("react2", new Point2D.Double(20, 0), new Point2D.Double(200, 200)));
+    interaction.addReactant(createEdge("react3", new Point2D.Double(30, 0), new Point2D.Double(200, 200)));
+    interaction.addModifier(createEdge("modifier", new Point2D.Double(40, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod1", new Point2D.Double(50, 0), new Point2D.Double(200, 200)));
+    interaction.addModifier(createEdge("modifier2", new Point2D.Double(60, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod3", new Point2D.Double(70, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Modifier.class).distance(new Point2D.Double(40, 0)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodePointsInteractionWithMultiModifiers2() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+
+    interaction.addReactant(createEdge("react1", new Point2D.Double(10, 0), new Point2D.Double(200, 200)));
+    interaction.addModifier(createEdge("modifier2", new Point2D.Double(20, 0), new Point2D.Double(200, 200)));
+    interaction.addReactant(createEdge("react3", new Point2D.Double(30, 0), new Point2D.Double(200, 200)));
+    interaction.addModifier(createEdge("modifier", new Point2D.Double(40, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod1", new Point2D.Double(50, 0), new Point2D.Double(200, 200)));
+    interaction.addProduct(createEdge("prod3", new Point2D.Double(70, 0), new Point2D.Double(200, 200)));
+
+    Map<Class<?>, Point2D> result = finder.getNodeStartPoints(interaction);
+    validatePointsResult(interaction, result);
+    assertEquals(0, result.get(Modifier.class).distance(new Point2D.Double(40, 0)), Configuration.EPSILON);
+  }
+
+  private Edge createEdge(String id, Point2D p1, Point2D p2) {
+    Edge modifierEdge = new Edge(id);
+    modifierEdge.setLine(new PolylineData(p1, p2));
+    return modifierEdge;
+  }
+
+  private void validatePointsResult(Interaction interaction, Map<Class<?>, Point2D> result) {
+    PolylineData pd = interaction.getLine();
+    Point2D reactantPoint = result.get(Reactant.class);
+    Point2D productPoint = result.get(Product.class);
+    Point2D modifierPoint = result.get(Modifier.class);
+    assertNotNull(reactantPoint);
+    assertNotNull(productPoint);
+    assertNotNull(modifierPoint);
+
+//    logger.debug(reactantPoint);
+//    logger.debug(modifierPoint);
+//    logger.debug(productPoint);
+//
+    assertEquals(0, distanceFromLine(pd, reactantPoint), Configuration.EPSILON);
+    assertEquals(0, distanceFromLine(pd, productPoint), Configuration.EPSILON);
+    assertEquals(0, distanceFromLine(pd, modifierPoint), Configuration.EPSILON);
+
+    assertTrue(
+        finder.distanceFromPolylineStart(pd, reactantPoint) < finder.distanceFromPolylineStart(pd, modifierPoint));
+    assertTrue(
+        finder.distanceFromPolylineStart(pd, modifierPoint) < finder.distanceFromPolylineStart(pd, productPoint));
+  }
+
+  private double distanceFromLine(PolylineData pd, Point2D point) {
+    double distance = Double.MAX_VALUE;
+    for (Line2D line : pd.getLines()) {
+      distance = Math.min(distance, lt.distBetweenPointAndLineSegment(line, point));
+    }
+    return distance;
+  }
+
+  @Test
+  public void testDistanceFromPolylineStartSimple() {
+    PolylineData line = new PolylineData(new Point2D.Double(10, 20), new Point2D.Double(40, 60));
+    assertEquals(0, finder.distanceFromPolylineStart(line, new Point2D.Double(10, 20)), Configuration.EPSILON);
+    assertEquals(50, finder.distanceFromPolylineStart(line, new Point2D.Double(40, 60)), Configuration.EPSILON);
+    assertEquals(25, finder.distanceFromPolylineStart(line, new Point2D.Double(25, 40)), Configuration.EPSILON);
+  }
+
+  @Test(expected = InvalidArgumentException.class)
+  public void testDistanceFromPolylineStartInvalid() {
+    PolylineData line = new PolylineData(new Point2D.Double(10, 20), new Point2D.Double(40, 60));
+    finder.distanceFromPolylineStart(line, new Point2D.Double(1, 2));
+  }
+
+  @Test
+  public void testDistanceFromPolylineStartComplex() {
+    PolylineData line = new PolylineData(new Point2D.Double(10, 20), new Point2D.Double(40, 60));
+    line.addPoint(new Point2D.Double(60, 60));
+    assertEquals(50, finder.distanceFromPolylineStart(line, new Point2D.Double(40, 60)), Configuration.EPSILON);
+    assertEquals(60, finder.distanceFromPolylineStart(line, new Point2D.Double(50, 60)), Configuration.EPSILON);
+    assertEquals(70, finder.distanceFromPolylineStart(line, new Point2D.Double(60, 60)), Configuration.EPSILON);
+  }
+
+  @Test
+  public void testNodeLinesInteractionWithoutAnything() {
+    Interaction interaction = new Interaction(createEdge("id", new Point2D.Double(0, 0), new Point2D.Double(100, 0)));
+    Map<Class<?>, PolylineData> result = finder.getNodeLines(interaction);
+    validateLinesResult(interaction, result);
+  }
+
+  @Test
+  public void testNodeLinesInteractionWithTwoReactants() {
+    Edge edge = new Edge("id");
+    PolylineData line = new PolylineData(Arrays.asList(
+        new Point2D.Double(0, 0), 
+        new Point2D.Double(100, 0),
+        new Point2D.Double(100, 100)
+        ));
+    edge.setLine(line);
+    Interaction interaction = new Interaction(edge);
+    interaction.addReactant(createEdge("reactant", new Point2D.Double(200, 0), new Point2D.Double(100, 0)));
+    
+    Map<Class<?>, PolylineData> result = finder.getNodeLines(interaction);
+    validateLinesResult(interaction, result);
+  }
+
+  @Test
+  public void testNodeLinesInteractionWithTwoProducts() {
+    Edge edge = new Edge("id");
+    PolylineData line = new PolylineData(Arrays.asList(
+        new Point2D.Double(0, 0), 
+        new Point2D.Double(100, 0),
+        new Point2D.Double(100, 100)
+        ));
+    edge.setLine(line);
+    Interaction interaction = new Interaction(edge);
+    interaction.addProduct(createEdge("product", new Point2D.Double(200, 0), new Point2D.Double(100, 0)));
+    
+    Map<Class<?>, PolylineData> result = finder.getNodeLines(interaction);
+    validateLinesResult(interaction, result);
+  }
+
+  private void validateLinesResult(Interaction interaction, Map<Class<?>, PolylineData> result) {
+    PolylineData pd = interaction.getLine();
+    PolylineData reactantLine = result.get(Reactant.class);
+    PolylineData inputOperatorLine = result.get(AndOperator.class);
+    PolylineData outputOperatorLine = result.get(SplitOperator.class);
+    PolylineData productLine = result.get(Product.class);
+    PolylineData modifierLine = result.get(Modifier.class);
+
+//    logger.debug(reactantLine);
+//    logger.debug(inputOperatorLine);
+//    logger.debug(modifierLine);
+//    logger.debug(outputOperatorLine);
+//    logger.debug(productLine);
+//
+    assertNotNull(reactantLine);
+    assertTrue(reactantLine.length() > Configuration.EPSILON);
+    assertNotNull(productLine);
+    assertTrue(productLine.length() > Configuration.EPSILON);
+    assertNotNull(modifierLine);
+    assertTrue("Modifier line length must be > 0", modifierLine.length() > Configuration.EPSILON);
+    assertNotNull(inputOperatorLine);
+    assertTrue(inputOperatorLine.length() > Configuration.EPSILON);
+    assertNotNull(outputOperatorLine);
+    assertTrue(outputOperatorLine.length() > Configuration.EPSILON);
+
+    assertEquals(0, pd.getBeginPoint().distance(reactantLine.getBeginPoint()), Configuration.EPSILON);
+    assertEquals(0, reactantLine.getEndPoint().distance(inputOperatorLine.getBeginPoint()), Configuration.EPSILON);
+    assertEquals(0, inputOperatorLine.getEndPoint().distance(modifierLine.getBeginPoint()), Configuration.EPSILON);
+    assertEquals(0, modifierLine.getEndPoint().distance(outputOperatorLine.getBeginPoint()), Configuration.EPSILON);
+    assertEquals(0, outputOperatorLine.getEndPoint().distance(productLine.getBeginPoint()), Configuration.EPSILON);
+    assertEquals(0, productLine.getEndPoint().distance(pd.getEndPoint()), Configuration.EPSILON);
+  }
+
+}
diff --git a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/model/biopax/AllBiopaxTests.java b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/model/biopax/AllBiopaxTests.java
index 7962c204a2a79b43529de5715793376f586d0bbd..cd54c21984a90a08bd8510fa2ec07391b753ebcd 100644
--- a/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/model/biopax/AllBiopaxTests.java
+++ b/pathvisio/src/test/java/lcsb/mapviewer/wikipathway/model/biopax/AllBiopaxTests.java
@@ -5,7 +5,9 @@ import org.junit.runners.Suite;
 import org.junit.runners.Suite.SuiteClasses;
 
 @RunWith(Suite.class)
-@SuiteClasses({ BiopaxDataTest.class, BiopaxOpenControlledVocabularyTest.class, BiopaxPublicationTest.class })
+@SuiteClasses({ BiopaxDataTest.class,
+    BiopaxOpenControlledVocabularyTest.class,
+    BiopaxPublicationTest.class })
 public class AllBiopaxTests {
 
 }
diff --git a/pathvisio/testFiles/elements/label_href.xml b/pathvisio/testFiles/elements/label_href.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4c10b05272a1122e596dda5bcd160cf51ae6e839
--- /dev/null
+++ b/pathvisio/testFiles/elements/label_href.xml
@@ -0,0 +1,3 @@
+<Label
+	TextLabel="Phosphoribosylpyrophosphate &#10;synthetase 1 defects"
+	GraphId="cfbda" Href="http://omim.org/311850"></Label>
diff --git a/pathvisio/testFiles/reactions/inhibition_with_problematic_line.gpml b/pathvisio/testFiles/reactions/inhibition_with_problematic_line.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..955ba3e923f02d522af4e58c83fe1bf427176470
--- /dev/null
+++ b/pathvisio/testFiles/reactions/inhibition_with_problematic_line.gpml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="MAPK Signaling Pathway" Organism="Homo sapiens" License="CC BY 2.0">
+  <Graphics BoardWidth="1824.945655991181" BoardHeight="1510.0" />
+  <DataNode TextLabel="PPP5C" GraphId="e19" Type="GeneProduct" GroupRef="cd419">
+    <Attribute Key="org.pathvisio.model.BackpageHead" Value="PPP5C | protein phosphatase 5 catalytic subuni..." />
+    <Graphics CenterX="541.9543147208124" CenterY="1108.7648054145516" Width="40.0" Height="20.0" ZOrder="32932" FontSize="10" Valign="Middle" />
+    <Xref Database="Entrez Gene" ID="5536" />
+  </DataNode>
+  <DataNode TextLabel="MAP3K5" GraphId="d1a" Type="GeneProduct">
+    <Attribute Key="org.pathvisio.model.BackpageHead" Value="MAP3K5 | mitogen-activated protein kinase kinas..." />
+    <Graphics CenterX="590.5104765583576" CenterY="1082.6835871404394" Width="60.0" Height="20.0" ZOrder="33214" FontSize="10" Valign="Middle" />
+    <Xref Database="Entrez Gene" ID="4217" />
+  </DataNode>
+  <DataNode TextLabel="PPP5D1" GraphId="c908a" Type="GeneProduct" GroupRef="cd419">
+    <Attribute Key="org.pathvisio.model.BackpageHead" Value="PPP5C | protein phosphatase 5 catalytic subuni..." />
+    <Graphics CenterX="541.9543147208121" CenterY="1128.764805414554" Width="40.0" Height="20.0" ZOrder="33227" FontSize="10" Valign="Middle" />
+    <Xref Database="Ensembl" ID="ENSG00000230510" />
+  </DataNode>
+  <Interaction GraphId="eff08">
+    <Graphics ConnectorType="Elbow" ZOrder="12348" LineThickness="1.0" Color="ff0000">
+      <Point X="569.9543147208124" Y="1118.764805414553" GraphRef="efe70" RelX="1.0" RelY="0.0" />
+      <Point X="590.5104765583576" Y="1092.6835871404394" GraphRef="d1a" RelX="0.0" RelY="1.0" ArrowHead="mim-inhibition" />
+    </Graphics>
+    <Xref Database="" ID="" />
+  </Interaction>
+  <Group GroupId="cd419" GraphId="efe70" Style="Group" />
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/compartment_from_shape.gpml b/pathvisio/testFiles/small/compartment_from_shape.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..3f146f8843d3d12fe22645f294b93e123fd5b8ba
--- /dev/null
+++ b/pathvisio/testFiles/small/compartment_from_shape.gpml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="ACE Inhibitor Pathway" Organism="Homo sapiens">
+  <Label TextLabel="Zona glomerulosa &#10;of the adrenal gland" GraphId="a49c5">
+    <Graphics CenterX="400.0" CenterY="585.5" Width="184.0" Height="35.0" ZOrder="28672" FillColor="ffffff" FontWeight="Bold" FontSize="14" Valign="Middle" Color="999999"/>
+  </Label>
+  <Label TextLabel="EDHF" GraphId="b2aa3">
+    <Graphics CenterX="808.0" CenterY="475.0" Width="42.0" Height="20.0" ZOrder="28672" FillColor="ffffff" FontWeight="Bold" FontSize="10" Valign="Middle"/>
+  </Label>
+  <Label TextLabel="Blood vessels" GraphId="d3e2b">
+    <Graphics CenterX="749.0" CenterY="579.5" Width="184.0" Height="35.0" ZOrder="28672" FillColor="ffffff" FontWeight="Bold" FontSize="14" Valign="Middle" Color="999999"/>
+  </Label>
+  <Label TextLabel="Mesangial cells around&#10;blood vessels in the kidneys" GraphId="e166c">
+    <Graphics CenterX="139.0" CenterY="583.5" Width="222.0" Height="35.0" ZOrder="28672" FillColor="ffffff" FontWeight="Bold" FontSize="14" Valign="Middle" Color="999999"/>
+  </Label>
+  <Shape GraphId="c2049">
+    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double"/>
+    <Graphics CenterX="748.0" CenterY="502.5" Width="232.0" Height="235.0" ZOrder="16384" FontSize="10" Valign="Middle" ShapeType="RoundedRectangle" LineThickness="3.0" Color="c0c0c0" Rotation="0.0"/>
+  </Shape>
+  <Shape GraphId="d5695">
+    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double"/>
+    <Graphics CenterX="450.0" CenterY="503.5" Width="344.0" Height="235.0" ZOrder="16384" FontSize="10" Valign="Middle" ShapeType="RoundedRectangle" LineThickness="3.0" Color="c0c0c0" Rotation="0.0"/>
+  </Shape>
+  <Shape GraphId="f975e">
+    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double"/>
+    <Graphics CenterX="140.0" CenterY="504.0" Width="254.0" Height="232.0" ZOrder="16384" FontSize="10" Valign="Middle" ShapeType="RoundedRectangle" LineThickness="3.0" Color="c0c0c0" Rotation="0.0"/>
+  </Shape>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/compartment_without_name_and_with_complex_with_name.gpml b/pathvisio/testFiles/small/compartment_without_name_and_with_complex_with_name.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..b83e297d1dca930fa18ccd305046073f4eb72417
--- /dev/null
+++ b/pathvisio/testFiles/small/compartment_without_name_and_with_complex_with_name.gpml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="MAPK Signaling Pathway" Organism="Homo sapiens" License="CC BY 2.0">
+  <DataNode TextLabel="Apoptosis" GraphId="d8cd7" Type="Pathway" GroupRef="bbb58">
+    <Graphics CenterX="1411.756345177664" CenterY="989.730964467005" Width="80.0" Height="20.0" ZOrder="32991" FontWeight="Bold" FontSize="12" Valign="Middle" ShapeType="None" Color="14961e" />
+    <Xref Database="WikiPathways" ID="WP254" />
+  </DataNode>
+  <Label TextLabel="Proliferation, differentiation,&#xA;inflammation" GraphId="e66" GroupRef="bbb58">
+    <Graphics CenterX="1408.4230118443306" CenterY="969.230964467005" Width="138.66666666666666" Height="29.0" ZOrder="28688" FillColor="ffffff" FontWeight="Bold" FontSize="10" Valign="Middle" />
+  </Label>
+  <Group GroupId="bbb58" GraphId="b33da" Style="Group" />
+  <Shape GraphId="a3e41">
+    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
+    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
+    <Graphics CenterX="861.0" CenterY="778.0" Width="1382.0" Height="1404.0" ZOrder="16384" FontSize="12" Valign="Middle" ShapeType="RoundedRectangle" LineThickness="3.0" Color="c0c0c0" Rotation="0.0" />
+  </Shape>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/element_with_comment.gpml b/pathvisio/testFiles/small/element_with_comment.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..741131f2686c2c3ef5968d28f4dd5c20d78f08ef
--- /dev/null
+++ b/pathvisio/testFiles/small/element_with_comment.gpml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Cholesterol Biosynthesis Pathway" Last-Modified="2/22/2013" Organism="Homo sapiens">
+  <Graphics BoardWidth="709.6540434669985" BoardHeight="679.0097543709028" />
+  <DataNode TextLabel="NSDHL" GraphId="a12" Type="GeneProduct">
+    <Comment Source="GenMAPP remarks">NAD(P) dependent steroid dehydrogenase-like</Comment>
+    <Attribute Key="org.pathvisio.model.BackpageHead" Value="NSDHL | NAD(P) dependent steroid dehydrogenase-..." />
+    <Graphics CenterX="646.3207101336652" CenterY="261.70514694126564" Width="66.66666666666667" Height="20.0" ZOrder="32768" FontSize="10" Valign="Middle" />
+    <Xref Database="Entrez Gene" ID="50814" />
+  </DataNode>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/model_annotation.gpml b/pathvisio/testFiles/small/model_annotation.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..7195854a170005a14d59b4b68696299fac86a818
--- /dev/null
+++ b/pathvisio/testFiles/small/model_annotation.gpml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Purine metabolism" Version="20161102" Organism="Homo sapiens">
+  <BiopaxRef>de6</BiopaxRef>
+  <Graphics BoardWidth="2357.1066152108338" BoardHeight="1006.1828435291823"/>
+  <Biopax>
+    <bp:openControlledVocabulary xmlns:bp="http://www.biopax.org/release/biopax-level3.owl#">
+      <bp:TERM xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:datatype="http://www.w3.org/2001/XMLSchema#string">classic metabolic pathway</bp:TERM>
+      <bp:ID xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PW:0000002</bp:ID>
+      <bp:Ontology xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Pathway Ontology</bp:Ontology>
+    </bp:openControlledVocabulary>
+    <bp:PublicationXref xmlns:bp="http://www.biopax.org/release/biopax-level3.owl#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" rdf:id="de6">
+      <bp:ID rdf:datatype="http://www.w3.org/2001/XMLSchema#string">12235098</bp:ID>
+      <bp:DB rdf:datatype="http://www.w3.org/2001/XMLSchema#string">PubMed</bp:DB>
+      <bp:TITLE rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Malformation syndromes due to inborn errors of cholesterol synthesis.</bp:TITLE>
+      <bp:SOURCE rdf:datatype="http://www.w3.org/2001/XMLSchema#string">J Clin Invest</bp:SOURCE>
+      <bp:YEAR rdf:datatype="http://www.w3.org/2001/XMLSchema#string">2002</bp:YEAR>
+      <bp:AUTHORS rdf:datatype="http://www.w3.org/2001/XMLSchema#string">Porter FD</bp:AUTHORS>
+    </bp:PublicationXref>
+  </Biopax>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/model_invalid_annotation.gpml b/pathvisio/testFiles/small/model_invalid_annotation.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..ae791f773a8a1446dfa7f4fefcb90cdfe6872026
--- /dev/null
+++ b/pathvisio/testFiles/small/model_invalid_annotation.gpml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Purine metabolism" Version="20161102" Organism="Homo sapiens">
+  <BiopaxRef>de6</BiopaxRef>
+  <BiopaxRef>unknown</BiopaxRef>
+  <Graphics BoardWidth="2357.1066152108338" BoardHeight="1006.1828435291823"/>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/molecule_with_color.gpml b/pathvisio/testFiles/small/molecule_with_color.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..fd6e1c9eee9083c1019e38f486682b271dbb03f3
--- /dev/null
+++ b/pathvisio/testFiles/small/molecule_with_color.gpml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="ACE Inhibitor Pathway" Organism="Homo sapiens">
+  <DataNode TextLabel="ACE Inhibitor" GraphId="d9620" Type="Metabolite">
+    <Graphics CenterX="467.5" CenterY="40.66666666666666" Width="91.0" Height="20.0" ZOrder="32768" FontSize="10" Valign="Middle" Color="cc0000"/>
+    <Xref Database="ChEBI" ID="CHEBI:35457"/>
+  </DataNode>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/node_with_missing_group.gpml b/pathvisio/testFiles/small/node_with_missing_group.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..1617b316ad6e60deb49d78277ce42885808038dc
--- /dev/null
+++ b/pathvisio/testFiles/small/node_with_missing_group.gpml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Purine metabolism" Version="20161102" Organism="Homo sapiens">
+  <DataNode TextLabel="AO" GraphId="a7af3" Type="Protein" GroupRef="d0eb9">
+    <Graphics CenterX="1772.9349290844132" CenterY="61.849749175651525" Width="46.16009280742433" Height="25.0" ZOrder="32768" FontSize="12" Valign="Middle"/>
+  </DataNode>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/reaction_with_label_as_side_product.gpml b/pathvisio/testFiles/small/reaction_with_label_as_side_product.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..0022c589e9292a4efea8d64a9f7e071238fa41e9
--- /dev/null
+++ b/pathvisio/testFiles/small/reaction_with_label_as_side_product.gpml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Purine metabolism" Version="20161102" Organism="Homo sapiens">
+  <Graphics BoardWidth="2357.1066152108338" BoardHeight="1006.1828435291823"/>
+  <DataNode TextLabel="Hypoxanthine" GraphId="ce7d3" Type="Metabolite">
+    <Graphics CenterX="825.4195292898956" CenterY="771.2721891544751" Width="90.0" Height="25.0" ZOrder="32768" FontSize="12" Valign="Middle" LineThickness="2.0" Color="ff6666"/>
+    <Xref Database="ChEBI" ID="CHEBI:17368"/>
+  </DataNode>
+  <DataNode TextLabel="2'-deoxyinosine" GraphId="dc77e" Type="Metabolite">
+    <Graphics CenterX="158.50507786644994" CenterY="873.9515387851391" Width="123.41614420062683" Height="25.0" ZOrder="32769" FontSize="12" Valign="Middle" LineThickness="2.0" Color="ff6666"/>
+    <Xref Database="ChEBI" ID="CHEBI:28997"/>
+  </DataNode>
+  <DataNode TextLabel="PNP" GraphId="e42f7" Type="Protein">
+    <Graphics CenterX="311.24362390084195" CenterY="868.6948483311019" Width="43.60542582228957" Height="25.0" ZOrder="32774" FontSize="12" Valign="Middle"/>
+    <Xref Database="Uniprot-TrEMBL" ID="P00491"/>
+  </DataNode>
+  <Interaction GraphId="id6f2bfa37">
+    <Graphics ConnectorType="Elbow" ZOrder="12288" LineThickness="1.0">
+      <Point X="189.35911391660665" Y="886.4515387851391" GraphRef="dc77e" RelX="0.5" RelY="1.0"/>
+      <Point X="802.9195292898956" Y="783.7721891544751" GraphRef="ce7d3" RelX="-0.5" RelY="1.0" ArrowHead="mim-conversion"/>
+      <Anchor Position="0.18744319428080264" Shape="None" GraphId="b5668"/>
+    </Graphics>
+    <Xref Database="Rhea" ID="27751"/>
+  </Interaction>
+
+  <Interaction GraphId="id63eeb6f">
+    <Graphics ZOrder="12288" LineThickness="1.0">
+      <Point X="311.24362390084195" Y="881.1948483311019" GraphRef="e42f7" RelX="0.0" RelY="1.0"/>
+      <Point X="311.11111111111114" Y="906.4515387851391" GraphRef="b5668" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis"/>
+    </Graphics>
+    <Xref Database="" ID=""/>
+  </Interaction>
+
+  <GraphicalLine GraphId="e8aae">
+    <Graphics ConnectorType="Elbow" ZOrder="12288" LineStyle="Broken" LineThickness="1.0">
+      <Point X="311.11111111111114" Y="906.4515387851391" GraphRef="b5668" RelX="0.0" RelY="0.0"/>
+      <Point X="337.42384957454703" Y="892.9824561403509"/>
+      <Point X="363.736588037983" Y="789.0918747157914" GraphRef="cd255" RelX="0.5" RelY="1.0" ArrowHead="Arrow"/>
+    </Graphics>
+  </GraphicalLine>
+
+  <Label TextLabel="Purine nucleoside &#10;phosphorylase &#10;deficiency" GraphId="cd255" Href="https://omim.org/entry/613179">
+    <Comment>DISEASE</Comment>
+    <Graphics CenterX="332.03769301035845" CenterY="765.6464158267954" Width="126.79558011049801" Height="46.890917777992016" ZOrder="32906" FillColor="ffcccc" FontSize="12" Valign="Middle" ShapeType="RoundedRectangle" Color="0000ff"/>
+  </Label>
+  <InfoBox CenterX="0.0" CenterY="0.0"/>
+
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/small/reversible_reaction.gpml b/pathvisio/testFiles/small/reversible_reaction.gpml
new file mode 100644
index 0000000000000000000000000000000000000000..67ae2b86d2f00e2ee9afcefc148453565aaef852
--- /dev/null
+++ b/pathvisio/testFiles/small/reversible_reaction.gpml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Cholesterol Biosynthesis Pathway" Last-Modified="2/22/2013" Organism="Homo sapiens">
+  <Graphics BoardWidth="709.6540434669985" BoardHeight="679.0097543709028" />
+  <DataNode TextLabel="IDI1" GraphId="c3b" Type="GeneProduct">
+    <Attribute Key="org.pathvisio.model.BackpageHead" Value="IDI1 | isopentenyl-diphosphate delta isomerase" />
+    <Graphics CenterX="263.62037134806815" CenterY="533.9075111234577" Width="66.66666666666667" Height="20.0" ZOrder="32768" FontSize="10" Valign="Middle" />
+    <Xref Database="Entrez Gene" ID="3422" />
+  </DataNode>
+  <DataNode TextLabel="isopentenyl pyrophosphate" GraphId="db29a" Type="Metabolite">
+    <Graphics CenterX="370.0" CenterY="496.9845153753351" Width="141.71445929526124" Height="20.0" ZOrder="32768" FontSize="10" Valign="Middle" Color="0000ff" />
+    <Xref Database="CAS" ID="358-71-4" />
+  </DataNode>
+  <DataNode TextLabel="Dimethylallyl pyrophosphate" GraphId="fce72" Type="Metabolite">
+    <Graphics CenterX="151.27502573612358" CenterY="496.9845153753352" Width="151.88176471647557" Height="20.0" ZOrder="32768" FontSize="10" Valign="Middle" Color="0000ff" />
+    <Xref Database="CAS" ID="358-72-5" />
+  </DataNode>
+  <Interaction GraphId="e5d42">
+    <Graphics ZOrder="12288" LineThickness="1.0">
+      <Point X="227.21590809436137" Y="496.9845153753352" GraphRef="fce72" RelX="1.0" RelY="0.0" ArrowHead="Arrow" />
+      <Point X="299.1427703523694" Y="496.9845153753351" GraphRef="db29a" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
+      <Anchor Position="0.504761824415362" Shape="None" GraphId="fd8da" />
+    </Graphics>
+    <Xref Database="" ID="" />
+  </Interaction>
+  <Interaction GraphId="id6b5f2131">
+    <Graphics ZOrder="12288" LineThickness="1.0">
+      <Point X="263.62037134806815" Y="523.9075111234577" GraphRef="c3b" RelX="0.0" RelY="-1.0" />
+      <Point X="263.5218423121859" Y="496.98451537533515" GraphRef="fd8da" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
+    </Graphics>
+    <Xref Database="" ID="" />
+  </Interaction>
+</Pathway>
\ No newline at end of file
diff --git a/pathvisio/testFiles/wikipathways/gstp.gpml b/pathvisio/testFiles/wikipathways/gstp.gpml
deleted file mode 100644
index 304c78148cd059bee594c4320d2d8f33bdf6439f..0000000000000000000000000000000000000000
--- a/pathvisio/testFiles/wikipathways/gstp.gpml
+++ /dev/null
@@ -1,2629 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<Pathway xmlns="http://pathvisio.org/GPML/2013a" Name="Generated">
-  <Graphics BoardWidth="10030.0" BoardHeight="6030.0" />
-  <DataNode TextLabel="GSTP1" GraphId="sa312" Type="Rna">
-    <Comment></Comment>
-    <Graphics CenterX="1161.0" CenterY="973.0" Width="90.0" Height="25.0" ZOrder="32883" FillColor="66ff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="electrophile-SG" GraphId="sa326" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4601.5" CenterY="2106.5" Width="109.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="pyruvate" GraphId="sa374" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1492.0" CenterY="2471.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GLRX2" GraphId="sa397" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1381.0" CenterY="1994.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PSMA5" GraphId="sa404" Type="Protein" GroupRef="csa14">
-    <Comment></Comment>
-    <Graphics CenterX="1127.0" CenterY="1130.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GCLC" GraphId="sa257" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1470.518796992481" CenterY="1315.6447368421052" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glucose" GraphId="sa373" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3606.0" CenterY="2472.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CAPN1" GraphId="sa379" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="480.0" CenterY="1298.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSTP1" GraphId="sa394" Type="Protein" GroupRef="csa12">
-    <Comment></Comment>
-    <Graphics CenterX="343.66666666666674" CenterY="1558.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="00ccff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Paraquat-SG" GraphId="sa295" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2189.5882352941176" CenterY="2037.6176470588236" Width="90.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MTPT" GraphId="sa274" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3966.0" CenterY="1524.0882352941176" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubchem.compound" ID="1388" />
-  </DataNode>
-  <DataNode TextLabel="ROS" GraphId="sa396" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="792.0" CenterY="1714.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:26523" />
-  </DataNode>
-  <DataNode TextLabel="GGT1" GraphId="sa307" Type="GeneProduct">
-    <Comment></Comment>
-    <Graphics CenterX="983.0" CenterY="918.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ffff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PRDX1" GraphId="sa281" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1480.0" CenterY="1770.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5R1" GraphId="sa386" Type="Protein" GroupRef="csa11">
-    <Comment></Comment>
-    <Graphics CenterX="177.090909090909" CenterY="1376.9870129870126" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MAPK3K5" GraphId="sa413" Type="Protein" GroupRef="csa20">
-    <Comment></Comment>
-    <Graphics CenterX="246.0" CenterY="1803.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa238" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3348.0" CenterY="1013.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa358" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="395.52941176470586" CenterY="2121.9411764705883" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MAPK8" GraphId="sa277" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="696.0" CenterY="1602.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="NFE2L2" GraphId="sa316" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="659.5454545454545" CenterY="791.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PRDX2" GraphId="sa383" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="911.1428571428573" CenterY="1223.1428571428573" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC6A3" GraphId="sa264" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1862.0" CenterY="1662.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MPP-SG" GraphId="sa271" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2193.9411764705883" CenterY="1786.0882352941178" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSH Depletion" GraphId="sa403" Type="Pathway">
-    <Comment></Comment>
-    <Graphics CenterX="1107.5" CenterY="1247.5" Width="125.0" Height="35.0" ZOrder="32883" FillColor="cc99ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa412" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1064.0" CenterY="2300.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="MPP+" GraphId="sa398" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="834.0" CenterY="1655.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubchem.compound" ID="39484" />
-  </DataNode>
-  <DataNode TextLabel="GGT1" GraphId="sa310" Type="Rna">
-    <Comment></Comment>
-    <Graphics CenterX="1161.0" CenterY="918.0" Width="90.0" Height="25.0" ZOrder="32883" FillColor="66ff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5R1 (p25)" GraphId="sa392" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="639.6666666666667" CenterY="1320.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ffcccc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PRDX6" GraphId="sa407" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1480.0" CenterY="1820.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC7A11" GraphId="sa336" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4495.666666666667" CenterY="963.6666666666667" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GCLM" GraphId="sa258" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1564.0902255639094" CenterY="1316.2796574770261" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="ROS/RNS" GraphId="sa322" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="574.5454545454545" CenterY="1017.681818181818" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:62764" />
-  </DataNode>
-  <DataNode TextLabel="L-cysteine" GraphId="sa250" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2286.7142857142862" CenterY="1296.5" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17561" />
-  </DataNode>
-  <DataNode TextLabel="generic protein" GraphId="sa287" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1210.0" CenterY="1614.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PRKAB1" GraphId="sa408" Type="Protein" GroupRef="csa17">
-    <Comment></Comment>
-    <Graphics CenterX="1302.0" CenterY="2350.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="ANPEP" GraphId="sa247" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1856.0" CenterY="1227.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="UPS" GraphId="sa345">
-    <Comment></Comment>
-    <Graphics CenterX="674.0" CenterY="1072.0" Width="30.0" Height="30.0" ZOrder="32883" FillColor="ffcccc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubmed" ID="18990698" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa406" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1294.0" CenterY="1000.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="PRKAB2" GraphId="sa409" Type="Protein" GroupRef="csa17">
-    <Comment></Comment>
-    <Graphics CenterX="1304.0" CenterY="2394.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSH/GSSG ratio" GraphId="sa401" Type="Pathway">
-    <Comment></Comment>
-    <Graphics CenterX="1136.0" CenterY="1312.0" Width="126.0" Height="38.0" ZOrder="32883" FillColor="cc99ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="generic protein" GraphId="sa289" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1211.625" CenterY="1862.375" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="generic protein" GraphId="sa284" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="2190.875" CenterY="1882.375" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glucose" GraphId="sa372" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4608.0" CenterY="2468.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="ABCB1" GraphId="sa241" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="2380.0" CenterY="951.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Paraquat" GraphId="sa292" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="834.0" CenterY="2034.0" Width="80.0" Height="30.0" ZOrder="32883" FillColor="ff00ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:34905" />
-  </DataNode>
-  <DataNode TextLabel="electrophile-SG" GraphId="sa297" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1167.5" CenterY="2114.0" Width="109.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC1A1" GraphId="sa309" Type="Rna">
-    <Comment></Comment>
-    <Graphics CenterX="1161.0" CenterY="865.0" Width="90.0" Height="25.0" ZOrder="32883" FillColor="66ff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="KEAP1" GraphId="sa300" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="540.0" CenterY="836.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MAPK8" GraphId="sa278" Type="Protein" GroupRef="csa3">
-    <Comment></Comment>
-    <Graphics CenterX="680.875" CenterY="1730.3750000000002" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PSMA5" GraphId="sa405" Type="Protein" GroupRef="csa15">
-    <Comment></Comment>
-    <Graphics CenterX="1362.5" CenterY="1069.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSS" GraphId="sa236" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="3428.0" CenterY="950.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MAOB" GraphId="sa276" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="3870.0" CenterY="1468.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MAP3K5" GraphId="sa361" Type="Protein" GroupRef="csa9">
-    <Comment></Comment>
-    <Graphics CenterX="682.5294117647059" CenterY="2161.9411764705883" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione  disulfide" GraphId="sa286" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1211.5" CenterY="1929.5" Width="85.0" Height="40.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17858" />
-  </DataNode>
-  <DataNode TextLabel="GSS" GraphId="sa308" Type="Rna">
-    <Comment></Comment>
-    <Graphics CenterX="1161.0" CenterY="817.0" Width="90.0" Height="25.0" ZOrder="32883" FillColor="66ff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSTP1" GraphId="sa352" Type="Protein" GroupRef="csa7">
-    <Comment></Comment>
-    <Graphics CenterX="1001.0" CenterY="1768.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="00ccff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa419" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1479.0" CenterY="966.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="MPP-SG" GraphId="sa270" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1640.0" CenterY="1788.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="lactate" GraphId="sa366" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2536.0" CenterY="2471.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="cystine" GraphId="sa229" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4232.857142857143" CenterY="888.134920634921" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16283" />
-  </DataNode>
-  <DataNode TextLabel="electrophile-SG" GraphId="sa325" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3600.5" CenterY="2110.5" Width="109.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSR" GraphId="sa400" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1125.0" CenterY="1467.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="L-glutamic acid" GraphId="sa227" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4249.857142857143" CenterY="1014.134920634921" Width="102.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16015" />
-  </DataNode>
-  <DataNode TextLabel="yGluCys" GraphId="sa256" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1437.375939849624" CenterY="1383.2796574770261" Width="70.0" Height="40.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17515" />
-  </DataNode>
-  <DataNode TextLabel="MPP+" GraphId="sa275" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3771.0" CenterY="1528.0882352941176" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubchem.compound" ID="39484" />
-  </DataNode>
-  <DataNode TextLabel="Paraquat-SG" GraphId="sa294" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1161.0" CenterY="2035.0" Width="90.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MPP+" GraphId="sa265" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2322.75" CenterY="1528.75" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubchem.compound" ID="39484" />
-  </DataNode>
-  <DataNode TextLabel="GLRX" GraphId="sa346" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1410.0" CenterY="1946.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="DAXX" GraphId="sa362" Type="Protein" GroupRef="csa9">
-    <Comment></Comment>
-    <Graphics CenterX="679.5294117647059" CenterY="2113.9411764705883" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="lactate" GraphId="sa367" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1683.0" CenterY="2470.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC3A2" GraphId="sa338" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4104.0" CenterY="821.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSTP1" GraphId="sa266" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="914.0" CenterY="1544.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="00ccff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="TRAF2" GraphId="sa353" Type="Protein" GroupRef="csa7">
-    <Comment></Comment>
-    <Graphics CenterX="1001.0" CenterY="1720.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa314" Type="Protein" GroupRef="csa5">
-    <Comment></Comment>
-    <Graphics CenterX="341.5454545454545" CenterY="1093.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="L-cysteine" GraphId="sa376" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3907.0" CenterY="962.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17561" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa254" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1204.018796992481" CenterY="1380.6447368421052" Width="83.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="L-glutamic acid" GraphId="sa226" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3905.357142857143" CenterY="1052.634920634921" Width="97.0" Height="28.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16015" />
-  </DataNode>
-  <DataNode TextLabel="GCLM" GraphId="sa234" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="3789.5714285714284" CenterY="946.634920634921" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MTPT" GraphId="sa272" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4620.0" CenterY="1522.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GCLC" GraphId="sa235" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="3691.0" CenterY="947.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="ROS/RNS" GraphId="sa321" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="429.5454545454545" CenterY="986.681818181818" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:62764" />
-  </DataNode>
-  <DataNode TextLabel="MPP-SG" GraphId="sa330" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4595.0" CenterY="1785.5" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Apotosis" GraphId="sa335" Type="Pathway">
-    <Comment></Comment>
-    <Graphics CenterX="446.0" CenterY="1799.0" Width="80.0" Height="30.0" ZOrder="32883" FillColor="cc99ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.go" ID="GO:0006915" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa267" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1533.4411764705883" CenterY="1645.0882352941178" Width="89.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="GLUT?" GraphId="sa369" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="2391.0" CenterY="2535.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Proliferation" GraphId="sa377" Type="Pathway">
-    <Comment></Comment>
-    <Graphics CenterX="543.0" CenterY="1829.0" Width="80.0" Height="30.0" ZOrder="32883" FillColor="cc99ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.go" ID="GO:0014009" />
-  </DataNode>
-  <DataNode TextLabel="yGluCys" GraphId="sa228" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3589.857142857143" CenterY="1013.134920634921" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17515" />
-  </DataNode>
-  <DataNode TextLabel="SLC7A11" GraphId="sa225" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4099.0" CenterY="970.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa420" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1642.0" CenterY="869.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="glycine" GraphId="sa259" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1329.518796992481" CenterY="1427.6447368421052" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:15428" />
-  </DataNode>
-  <DataNode TextLabel="PRKAB1" GraphId="sa411" Type="Protein" GroupRef="csa19">
-    <Comment></Comment>
-    <Graphics CenterX="928.25" CenterY="2343.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GGT1" GraphId="sa242" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="2388.0" CenterY="1089.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="cystine" GraphId="sa224" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4021.0" CenterY="911.5" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16283" />
-  </DataNode>
-  <DataNode TextLabel="L-glutamic acid" GraphId="sa230" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4012.357142857143" CenterY="1027.134920634921" Width="99.0" Height="29.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16015" />
-  </DataNode>
-  <DataNode TextLabel="glutathione  disulfide" GraphId="sa399" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1037.0" CenterY="1390.5" Width="78.0" Height="44.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17858" />
-  </DataNode>
-  <DataNode TextLabel="L-cysteine" GraphId="sa260" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1705.518796992481" CenterY="1297.1447368421052" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:17561" />
-  </DataNode>
-  <DataNode TextLabel="E1/E2 domain " GraphId="sa402" Type="Protein" GroupRef="csa13">
-    <Comment></Comment>
-    <Graphics CenterX="1385.5" CenterY="1210.0" Width="95.0" Height="48.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glycine" GraphId="sa239" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3507.0" CenterY="1090.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:15428" />
-  </DataNode>
-  <DataNode TextLabel="GSS" GraphId="sa306" Type="GeneProduct">
-    <Comment></Comment>
-    <Graphics CenterX="983.0" CenterY="818.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ffff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5R1" GraphId="sa389" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="216.66666666666674" CenterY="1501.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MPP+" GraphId="sa395" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="377.66666666666674" CenterY="1294.3333333333335" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubchem.compound" ID="39484" />
-  </DataNode>
-  <DataNode TextLabel="Paraquat-SG" GraphId="sa324" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4596.0" CenterY="2031.5" Width="90.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="generic proteine" GraphId="sa327" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="3594.0" CenterY="1881.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5" GraphId="sa393" Type="Protein" GroupRef="csa12">
-    <Comment></Comment>
-    <Graphics CenterX="345.66666666666674" CenterY="1509.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MPP+" GraphId="sa263" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1642.0" CenterY="1528.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubchem.compound" ID="39484" />
-  </DataNode>
-  <DataNode TextLabel="ABCB1" GraphId="sa348" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4099.0" CenterY="2202.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="JUN" GraphId="sa334" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="550.0" CenterY="1708.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5" GraphId="sa387" Type="Protein" GroupRef="csa11">
-    <Comment></Comment>
-    <Graphics CenterX="178.090909090909" CenterY="1327.9870129870126" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="ROS/RNS" GraphId="sa288" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1241.0" CenterY="1508.5" Width="86.0" Height="38.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:62764" />
-  </DataNode>
-  <DataNode TextLabel="KEAP1" GraphId="sa303" Type="Protein" GroupRef="csa4">
-    <Comment></Comment>
-    <Graphics CenterX="216.5454545454545" CenterY="851.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="JUN" GraphId="sa332" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="552.0" CenterY="1581.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PRDX2" GraphId="sa382" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="636.0" CenterY="1223.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MRP5" GraphId="sa291" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4100.0" CenterY="2067.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSTP1" GraphId="sa279" Type="Protein" GroupRef="csa3">
-    <Comment></Comment>
-    <Graphics CenterX="679.875" CenterY="1778.3750000000002" Width="80.0" Height="40.0" ZOrder="32883" FillColor="00ccff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa302" Type="Protein" GroupRef="csa4">
-    <Comment></Comment>
-    <Graphics CenterX="216.5454545454545" CenterY="803.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MPP-SG" GraphId="sa329" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3607.0" CenterY="1789.5" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="UPS" GraphId="sa340">
-    <Comment></Comment>
-    <Graphics CenterX="1528.0" CenterY="1606.0" Width="30.0" Height="30.0" ZOrder="32883" FillColor="ffcccc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubmed" ID="18990698" />
-  </DataNode>
-  <DataNode TextLabel="TRAF2" GraphId="sa354" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="823.1176470588234" CenterY="1812.7058823529412" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="cystine" GraphId="sa251" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4397.9473684210525" CenterY="888.6954887218044" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16283" />
-  </DataNode>
-  <DataNode TextLabel="CDK5" GraphId="sa385" Type="Protein" GroupRef="csa10">
-    <Comment></Comment>
-    <Graphics CenterX="772.1428571428573" CenterY="1328.1428571428573" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSH Depletion" GraphId="sa421" Type="Pathway">
-    <Comment></Comment>
-    <Graphics CenterX="1658.3571428571431" CenterY="1960.2142857142858" Width="125.0" Height="35.0" ZOrder="32883" FillColor="cc99ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC7A5" GraphId="sa337" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4309.0" CenterY="961.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CysGly" GraphId="sa244" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2286.0" CenterY="1157.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:4047" />
-  </DataNode>
-  <DataNode TextLabel="DAXX" GraphId="sa356" Type="Protein" GroupRef="csa8">
-    <Comment></Comment>
-    <Graphics CenterX="277.0" CenterY="2062.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="generic protein" GraphId="sa283" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1413.0" CenterY="1883.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="TXN" GraphId="sa317" Type="GeneProduct">
-    <Comment></Comment>
-    <Graphics CenterX="983.0" CenterY="1022.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ffff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa351" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="965.25" CenterY="2215.5" Width="95.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="TXN" GraphId="sa414" Type="Protein" GroupRef="csa20">
-    <Comment></Comment>
-    <Graphics CenterX="247.0" CenterY="1757.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MAP3K5" GraphId="sa355" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="733.0" CenterY="1951.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="ROS" GraphId="sa360" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="402.0" CenterY="1927.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:26523" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa319" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="518.5454545454545" CenterY="912.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="DAXX" GraphId="sa313" Type="Protein" GroupRef="csa5">
-    <Comment></Comment>
-    <Graphics CenterX="341.0" CenterY="1141.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GLUT?" GraphId="sa370" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1859.0454545454545" CenterY="2540.727272727273" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="DAXX" GraphId="sa315" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="227.5454545454545" CenterY="982.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSTP1" GraphId="sa220" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1155.7777777777774" CenterY="1711.0" Width="86.0" Height="46.0" ZOrder="32883" FillColor="00ccff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa320" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="674.5454545454545" CenterY="911.181818181818" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="L-glutamic acid" GraphId="sa261" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="1717.875939849624" CenterY="1377.2796574770261" Width="101.0" Height="24.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16015" />
-  </DataNode>
-  <DataNode TextLabel="SLC1A1" GraphId="sa304" Type="GeneProduct">
-    <Comment></Comment>
-    <Graphics CenterX="983.0" CenterY="866.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ffff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5R1 (p25)" GraphId="sa384" Type="Protein" GroupRef="csa10">
-    <Comment></Comment>
-    <Graphics CenterX="773.1428571428573" CenterY="1380.1428571428573" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ffcccc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="generic proteine" GraphId="sa328" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4598.0" CenterY="1880.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="electrophile-SG" GraphId="sa298" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2198.970588235294" CenterY="2114.735294117647" Width="109.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC1A1" GraphId="sa253" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1863.0" CenterY="1393.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="TRX" GraphId="sa415" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="663.0" CenterY="1885.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa301" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="343.0" CenterY="912.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Paraquat-SG" GraphId="sa323" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="3599.0" CenterY="2039.5" Width="90.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="GSTP1" GraphId="sa311" Type="GeneProduct">
-    <Comment></Comment>
-    <Graphics CenterX="983.0" CenterY="971.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ffff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="MRP1" GraphId="sa290" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4097.0" CenterY="1945.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="NFE2L2" GraphId="sa299" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="842.0" CenterY="839.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:45454" />
-  </DataNode>
-  <DataNode TextLabel="cystine" GraphId="sa252" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="4591.9473684210525" CenterY="887.6954887218044" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16283" />
-  </DataNode>
-  <DataNode TextLabel="GSS" GraphId="sa255" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1284.518796992481" CenterY="1317.6447368421052" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="electrophile" GraphId="sa296" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="833.0" CenterY="2118.0" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC25A10" GraphId="sa417" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1763.0" CenterY="976.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="TXN" GraphId="sa318" Type="Rna">
-    <Comment></Comment>
-    <Graphics CenterX="1161.0" CenterY="1022.0" Width="90.0" Height="25.0" ZOrder="32883" FillColor="66ff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="TRX" GraphId="sa347" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1294.0" CenterY="1981.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa293" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="962.0882352941176" CenterY="2074.6176470588234" Width="89.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="electrophile" GraphId="sa350" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="832.75" CenterY="2167.5" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="CDK5" GraphId="sa390" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="473.66666666666674" CenterY="1427.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PARK7" GraphId="sa357" Type="Protein" GroupRef="csa8">
-    <Comment></Comment>
-    <Graphics CenterX="277.0" CenterY="2017.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="glutathione" GraphId="sa240" Type="Metabolite">
-    <Comment></Comment>
-    <Graphics CenterX="2284.1428571428573" CenterY="1014.5" Width="70.0" Height="25.0" ZOrder="32883" FillColor="ccff66" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.chebi" ID="CHEBI:16856" />
-  </DataNode>
-  <DataNode TextLabel="generic  protein" GraphId="sa282" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1412.0" CenterY="1615.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="PRKAB2" GraphId="sa410" Type="Protein" GroupRef="csa19">
-    <Comment></Comment>
-    <Graphics CenterX="928.25" CenterY="2388.5" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Apotosis" GraphId="sa363" Type="Pathway">
-    <Comment></Comment>
-    <Graphics CenterX="682.5294117647059" CenterY="2294.9411764705883" Width="80.0" Height="30.0" ZOrder="32883" FillColor="cc99ff" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="obo.go" ID="GO:0006915" />
-  </DataNode>
-  <DataNode TextLabel="GLUT1" GraphId="sa371" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="4102.0" CenterY="2554.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="DAXX" GraphId="sa359" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="494.52941176470586" CenterY="2050.9411764705883" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="SLC25A11" GraphId="sa418" Type="Protein">
-    <Comment></Comment>
-    <Graphics CenterX="1760.0" CenterY="920.0" Width="80.0" Height="40.0" ZOrder="32883" FillColor="ccffcc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="UPS" GraphId="sa331">
-    <Comment></Comment>
-    <Graphics CenterX="1046.0" CenterY="1536.0" Width="30.0" Height="30.0" ZOrder="32883" FillColor="ffcccc" FontSize="10" Valign="Middle" Color="0000ff" />
-    <Xref Database="pubmed" ID="18990698" />
-  </DataNode>
-  <DataNode TextLabel="MRP/ABCC" GraphId="csa6" Type="Complex">
-    <Graphics CenterX="1874.0" CenterY="2275.5" Width="84.0" Height="79.0" ZOrder="32883" FillColor="ffffcc" FontSize="10" Valign="Middle" LineStyle="Broken" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <DataNode TextLabel="Complex I" GraphId="csa2" Type="Complex">
-    <Graphics CenterX="1640.5" CenterY="1053.5" Width="73.0" Height="51.0" ZOrder="32883" FillColor="ffffcc" FontSize="10" Valign="Middle" LineStyle="Broken" Color="0000ff" />
-    <Xref Database="" ID="" />
-  </DataNode>
-  <Interaction GraphId="re7">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3313.0" Y="1013.0" GraphRef="sa238" RelX="-1.0" RelY="0.0" />
-      <Point X="2319.1428571428573" Y="1014.5" GraphRef="sa240" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5050559555858475" Shape="None" GraphId="id10001" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10002">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2380.0" Y="971.0" GraphRef="sa241" RelX="0.0" RelY="1.0" />
-      <Point X="2811.0465309984656" Y="1013.7575839333788" GraphRef="id10001" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re74">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="682.0" Y="2189.9411764705883" GraphRef="csa9" RelX="0.019607843137255443" RelY="1.0" />
-      <Point X="682.5294117647059" Y="2279.9411764705883" GraphRef="sa363" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re30">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1250.0" Y="1614.0" GraphRef="sa287" RelX="1.0" RelY="0.0" />
-      <Point X="1372.0" Y="1615.0" GraphRef="sa282" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5016767317349492" Shape="None" GraphId="id10003" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10004">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1257.4553875916988" Y="1526.0537111177146" GraphRef="sa288" RelX="0.38268343236508856" RelY="0.9238795325112924" />
-      <Point X="1311.2045612716638" Y="1614.501676731735" GraphRef="id10003" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re18">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1675.0" Y="1788.0" GraphRef="sa270" RelX="1.0" RelY="0.0" />
-      <Point X="2158.9411764705883" Y="1786.0882352941178" GraphRef="sa271" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4897772316848099" Shape="None" GraphId="id10005" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10006">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1853.0" Y="2236.0" GraphRef="csa6" RelX="-0.5" RelY="-1.0" />
-      <Point X="1912.0233697100548" Y="1787.0636611747202" GraphRef="id10005" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re61">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="510.0" Y="1728.0" GraphRef="sa334" RelX="-1.0" RelY="1.0" />
-      <Point X="459.33333333333337" Y="1784.0" GraphRef="sa335" RelX="0.33333333333333426" RelY="-1.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re32">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1373.0" Y="1883.0" GraphRef="sa283" RelX="-1.0" RelY="0.0" />
-      <Point X="1312.5" Y="1882.9999999999998" />
-      <Point X="1251.625" Y="1862.375" GraphRef="sa289" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4848763796637738" Shape="None" GraphId="id10007" />
-      <Anchor Position="0.7306040243855229" Shape="None" GraphId="id10009" />
-      <Anchor Position="0.770214860629146" Shape="None" GraphId="id10011" />
-      <Anchor Position="0.7306040243855229" Shape="None" GraphId="id10013" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10008">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1312.5" Y="1882.9999999999998" GraphRef="id10007" RelX="0.0" RelY="0.0" />
-      <Point X="1250.7648801317296" Y="1921.8463313526981" GraphRef="sa286" RelX="0.923879532511284" RelY="-0.38268343236509283" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10010">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1390.0" Y="1926.0" GraphRef="sa346" RelX="-0.5" RelY="-1.0" />
-      <Point X="1342.75" Y="1878.0" />
-      <Point X="1283.4610086163923" Y="1873.1613273546297" GraphRef="id10009" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10012">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1294.0" Y="1961.0" GraphRef="sa347" RelX="0.0" RelY="-1.0" />
-      <Point X="1337.75" Y="1878.0" />
-      <Point X="1278.7799775761991" Y="1871.5753517455294" GraphRef="id10011" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10014">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1361.0" Y="1974.0" GraphRef="sa397" RelX="-0.5" RelY="-1.0" />
-      <Point X="1342.75" Y="1888.0" />
-      <Point X="1283.4610086163923" Y="1873.1613273546297" GraphRef="id10013" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re16">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2287.75" Y="1528.75" GraphRef="sa265" RelX="-1.0" RelY="0.0" />
-      <Point X="1677.0" Y="1528.0" GraphRef="sa263" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000670167400771" Shape="None" GraphId="id10015" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10016">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1862.0" Y="1642.0" GraphRef="sa264" RelX="0.0" RelY="-1.0" />
-      <Point X="1982.3340695259978" Y="1528.374949737445" GraphRef="id10015" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re25">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="874.0" Y="1554.0" GraphRef="sa266" RelX="-1.0" RelY="0.5" />
-      <Point X="679.0" Y="1706.0" GraphRef="csa3" RelX="-0.028350515463917526" RelY="-0.9302884615384659" ArrowHead="mim-conversion" />
-      <Anchor Position="0.32034208514337853" Shape="None" GraphId="id10017" />
-      <Anchor Position="0.6465231978103948" Shape="None" GraphId="id10019" />
-      <Anchor Position="0.6277490587052114" Shape="None" GraphId="id10021" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10018">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="736.0" Y="1602.0" GraphRef="sa277" RelX="1.0" RelY="0.0" />
-      <Point X="811.0000000000011" Y="1601.999999999999" GraphRef="id10017" RelX="-0.5332933970400973" RelY="-0.691996941794514" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10020">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="767.2512626584709" Y="1705.1611652351683" GraphRef="sa396" RelX="-0.7071067811865467" RelY="-0.7071067811865396" />
-      <Point X="747.927976426973" Y="1652.27152606718" GraphRef="id10019" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10022">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="799.0" Y="1655.0" GraphRef="sa398" RelX="-1.0" RelY="0.0" />
-      <Point X="751.5889335524838" Y="1649.4178569231922" GraphRef="id10021" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re33">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="962.0882352941176" Y="2062.1176470588234" GraphRef="sa293" RelX="0.0" RelY="-1.0" />
-      <Point X="963.29411764706" Y="2034.9999999999998" />
-      <Point X="1116.0" Y="2035.0" GraphRef="sa294" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.15092797451923595" Shape="None" GraphId="id10023" />
-      <Anchor Position="0.5763732892771269" Shape="None" GraphId="id10025" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10024">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="874.0" Y="2034.0" GraphRef="sa292" RelX="1.0" RelY="0.0" />
-      <Point X="963.29411764706" Y="2034.9999999999998" GraphRef="id10023" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10026">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1112.7777777777774" Y="1728.0" GraphRef="sa220" RelX="-1.0" RelY="0.7391304347826086" />
-      <Point X="1039.81059708971" Y="2035.0" GraphRef="id10025" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re111">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1503.7487373415292" Y="957.1611652351681" GraphRef="sa419" RelX="0.70710678118655" RelY="-0.7071067811865487" />
-      <Point X="1628.6060798672218" Y="880.548494156391" GraphRef="sa420" RelX="-0.38268343236509283" RelY="0.9238795325112824" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5352218520083318" Shape="None" GraphId="id10027" />
-      <Anchor Position="0.46711631261061937" Shape="None" GraphId="id10029" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10028">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1720.0" Y="920.0" GraphRef="sa418" RelX="-1.0" RelY="0.0" />
-      <Point X="1570.575115444969" Y="916.1563895330798" GraphRef="id10027" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10030">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1723.0" Y="986.0" GraphRef="sa417" RelX="-1.0" RelY="0.5" />
-      <Point X="1562.0716387844918" Y="921.3741368215996" GraphRef="id10029" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re11">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1673.183013354586" Y="1301.9282797466687" GraphRef="sa260" RelX="-0.9238795325112863" RelY="0.38268343236508373" />
-      <Point X="1600.3759398496256" Y="1376.9282797466683" />
-      <Point X="1469.711723487519" Y="1375.6259888297243" GraphRef="sa256" RelX="0.9238795325112863" RelY="-0.38268343236509283" ArrowHead="mim-conversion" />
-      <Anchor Position="0.444421583023901" Shape="None" GraphId="id10031" />
-      <Anchor Position="0.7442241803576288" Shape="None" GraphId="id10033" />
-      <Anchor Position="0.7018314200851412" Shape="None" GraphId="id10035" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10032">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1667.375939849624" Y="1377.2796574770261" GraphRef="sa261" RelX="-1.0" RelY="0.0" />
-      <Point X="1600.3759398496256" Y="1376.9282797466683" GraphRef="id10031" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10034">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1564.0902255639094" Y="1336.2796574770261" GraphRef="sa258" RelX="0.0" RelY="1.0" />
-      <Point X="1529.8665927494467" Y="1376.2255343061436" GraphRef="id10033" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10036">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1470.518796992481" Y="1335.6447368421052" GraphRef="sa257" RelX="0.0" RelY="1.0" />
-      <Point X="1539.8367727117643" Y="1376.3249040889864" GraphRef="id10035" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re49">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="558.5454545454545" Y="912.181818181818" GraphRef="sa319" RelX="1.0" RelY="0.0" />
-      <Point X="634.5454545454545" Y="911.181818181818" GraphRef="sa320" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5043089386732678" Shape="None" GraphId="id10037" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10038">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="574.5454545454545" Y="1005.181818181818" GraphRef="sa322" RelX="0.0" RelY="-1.0" />
-      <Point X="596.8729338846229" Y="911.6775092431448" GraphRef="id10037" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re14">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1655.3939201327782" Y="1516.4515058436089" GraphRef="sa263" RelX="0.38268343236509283" RelY="-0.9238795325112915" />
-      <Point X="1840.3729394972438" Y="1414.4486383657968" GraphRef="sa253" RelX="-0.5656765125689048" RelY="1.0724319182898399" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re60">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="552.0" Y="1601.0" GraphRef="sa332" RelX="0.0" RelY="1.0" />
-      <Point X="550.0" Y="1688.0" GraphRef="sa334" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5032903750693" Shape="None" GraphId="id10039" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10040">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="656.0" Y="1602.0" GraphRef="sa277" RelX="-1.0" RelY="0.0" />
-      <Point X="550.9934192498614" Y="1644.786262631029" GraphRef="id10039" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re47">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1018.0" Y="1022.0" GraphRef="sa317" RelX="1.0" RelY="0.0" />
-      <Point X="1127.25" Y="1022.0" />
-      <Point X="1116.0" Y="1022.0" GraphRef="sa318" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4139108142497064" Shape="None" GraphId="id10041" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10042">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="882.0" Y="839.0" GraphRef="sa299" RelX="1.0" RelY="0.0" />
-      <Point X="1067.8762531170896" Y="1022.0" GraphRef="id10041" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re118">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2148.619153713429" Y="2109.9517512130833" GraphRef="sa298" RelX="-0.923879532511285" RelY="-0.38268343236508373" />
-      <Point X="1720.8571428571431" Y="1960.2142857142858" GraphRef="sa421" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re36">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="868.0" Y="2118.0" GraphRef="sa296" RelX="1.0" RelY="0.0" />
-      <Point X="1113.0" Y="2114.0" GraphRef="sa297" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.39228588314475404" Shape="None" GraphId="id10043" />
-      <Anchor Position="0.6958861494762144" Shape="None" GraphId="id10045" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10044">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="962.0882352941176" Y="2087.1176470588234" GraphRef="sa293" RelX="0.0" RelY="1.0" />
-      <Point X="964.1176480343661" Y="2118.9999999999995" GraphRef="id10043" RelX="0.007606663901356114" RelY="2.569143532578437" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10046">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1132.7777777777774" Y="1728.0" GraphRef="sa220" RelX="-0.5348837209302325" RelY="0.7391304347826086" />
-      <Point X="1038.4921066216725" Y="2115.216455402095" GraphRef="id10045" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re6">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3507.0" Y="1077.5" GraphRef="sa239" RelX="0.0" RelY="-1.0" />
-      <Point X="3507.2510629899216" Y="1015.0000000000006" />
-      <Point X="3383.0" Y="1013.0" GraphRef="sa238" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.334643071358157" Shape="None" GraphId="id10047" />
-      <Anchor Position="0.6950883255682911" Shape="None" GraphId="id10049" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10048">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3554.857142857143" Y="1013.134920634921" GraphRef="sa228" RelX="-1.0" RelY="0.0" />
-      <Point X="3507.2510629899216" Y="1015.0000000000006" GraphRef="id10047" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10050">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3428.0" Y="970.0" GraphRef="sa236" RelX="0.0" RelY="1.0" />
-      <Point X="3439.9402647440834" Y="1013.9165356556945" GraphRef="id10049" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re52">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2234.5882352941176" Y="2037.6176470588236" GraphRef="sa295" RelX="1.0" RelY="1.818989403545873E-14" />
-      <Point X="3554.0" Y="2039.5" GraphRef="sa323" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re67">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="674.5454545454545" Y="931.181818181818" GraphRef="sa320" RelX="0.0" RelY="1.0" />
-      <Point X="674.0" Y="1064.0" GraphRef="sa345" RelX="0.0" RelY="-0.5333333333333333" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4638848789151732" Shape="None" GraphId="id10051" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10052">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="609.5454545454545" Y="1017.681818181818" GraphRef="sa322" RelX="1.0" RelY="0.0" />
-      <Point X="674.2924264296826" Y="992.7941643722788" GraphRef="id10051" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re12">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1329.518796992481" Y="1415.1447368421052" GraphRef="sa259" RelX="0.0" RelY="-1.0" />
-      <Point X="1331.7698599824007" Y="1381.6447368421057" />
-      <Point X="1245.518796992481" Y="1380.6447368421052" GraphRef="sa254" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.28018753123878637" Shape="None" GraphId="id10053" />
-      <Anchor Position="0.6839802643266089" Shape="None" GraphId="id10055" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10054">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1402.375939849624" Y="1383.2796574770261" GraphRef="sa256" RelX="-1.0" RelY="0.0" />
-      <Point X="1331.7698599824007" Y="1381.6447368421057" GraphRef="id10053" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10056">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1284.518796992481" Y="1337.6447368421052" GraphRef="sa255" RelX="0.0" RelY="1.0" />
-      <Point X="1283.3856571964066" Y="1381.0837674915983" GraphRef="id10055" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re9">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2286.0" Y="1169.5" GraphRef="sa244" RelX="0.0" RelY="1.0" />
-      <Point X="2286.7142857142862" Y="1284.0" GraphRef="sa250" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5019032084930475" Shape="None" GraphId="id10057" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10058">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1896.0" Y="1227.0" GraphRef="sa247" RelX="1.0" RelY="0.0" />
-      <Point X="2286.358502291781" Y="1226.967917372454" GraphRef="id10057" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re70">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="914.0" Y="1564.0" GraphRef="sa266" RelX="0.0" RelY="1.0" />
-      <Point X="853.117647058824" Y="1736.0000000000011" />
-      <Point X="949.0" Y="1755.0" GraphRef="csa7" RelX="-1.0833333333333333" RelY="0.21153846153846154" ArrowHead="mim-conversion" />
-      <Anchor Position="0.6511586820802163" Shape="None" GraphId="id10059" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10060">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="823.1176470588234" Y="1792.7058823529412" GraphRef="sa354" RelX="0.0" RelY="-1.0" />
-      <Point X="853.117647058824" Y="1736.0000000000011" GraphRef="id10059" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re94">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="226.090909090909" Y="1404.9870129870126" GraphRef="csa11" RelX="1.0" RelY="1.0" />
-      <Point X="229.0" Y="1430.0" />
-      <Point X="351.49999999999903" Y="1428.5000000000005" />
-      <Point X="236.66666666666674" Y="1481.5" GraphRef="sa389" RelX="0.5" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5386932968881721" Shape="None" GraphId="id10061" />
-      <Anchor Position="0.7810401491546461" Shape="None" GraphId="id10063" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10062">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="351.49999999999903" Y="1428.5000000000005" GraphRef="id10061" RelX="0.0" RelY="0.0" />
-      <Point X="433.66666666666674" Y="1427.5" GraphRef="sa390" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10064">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="874.0" Y="1534.0" GraphRef="sa266" RelX="-1.0" RelY="-0.5" />
-      <Point X="295.31084509871926" Y="1434.1884052979444" />
-      <Point X="291.1724637191019" Y="1456.3434782834915" GraphRef="id10063" RelX="5.6843418860808015E-14" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re72">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="329.0" Y="2049.5" GraphRef="csa8" RelX="1.0833333333333333" RelY="0.19801980198019803" />
-      <Point X="395.7647058823537" Y="2051.0000000000005" />
-      <Point X="395.52941176470586" Y="2101.9411764705883" GraphRef="sa358" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5672757118741708" Shape="None" GraphId="id10065" />
-      <Anchor Position="0.854075895477922" Shape="None" GraphId="id10067" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10066">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="395.7647058823537" Y="2051.0000000000005" GraphRef="id10065" RelX="0.0" RelY="0.0" />
-      <Point X="454.52941176470586" Y="2050.9411764705883" GraphRef="sa359" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10068">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="402.0" Y="1939.5" GraphRef="sa360" RelX="0.0" RelY="1.0" />
-      <Point X="362.4946594023683" Y="2045.2512614332438" />
-      <Point X="395.6087580929783" Y="2084.7626963996704" GraphRef="id10067" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re29">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1453.0" Y="1883.0" GraphRef="sa283" RelX="1.0" RelY="0.0" />
-      <Point X="2150.875" Y="1882.375" GraphRef="sa284" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5072152078448142" Shape="None" GraphId="id10069" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10070">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1832.0" Y="2236.0" GraphRef="csa6" RelX="-1.0" RelY="-1.0" />
-      <Point X="1806.9728131746997" Y="1882.682990495097" GraphRef="id10069" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re76">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3571.0" Y="2472.0" GraphRef="sa373" RelX="-1.0" RelY="0.0" />
-      <Point X="2571.0" Y="2471.0" GraphRef="sa366" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re116">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2157.768430140723" Y="2028.778812293992" GraphRef="sa295" RelX="-0.7071067811865457" RelY="-0.7071067811865278" />
-      <Point X="1720.8571428571431" Y="1960.2142857142858" GraphRef="sa421" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re41">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1018.0" Y="818.0" GraphRef="sa306" RelX="1.0" RelY="0.0" />
-      <Point X="1127.25" Y="817.0" />
-      <Point X="1116.0" Y="817.0" GraphRef="sa308" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4552161914560297" Shape="None" GraphId="id10071" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10072">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="882.0" Y="839.0" GraphRef="sa299" RelX="1.0" RelY="0.0" />
-      <Point X="1072.8533365493356" Y="817.4979099629352" GraphRef="id10071" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re89">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="500.0" Y="836.0" GraphRef="sa300" RelX="-1.0" RelY="0.0" />
-      <Point X="269.0" Y="836.0" GraphRef="csa4" RelX="1.0928030303030312" RelY="0.16958041958042275" ArrowHead="mim-conversion" />
-      <Anchor Position="0.42621107329991975" Shape="None" GraphId="id10073" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10074">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="478.5454545454545" Y="892.181818181818" GraphRef="sa319" RelX="-1.0" RelY="-1.0" />
-      <Point X="401.5454545454545" Y="835.7954545454543" GraphRef="id10073" RelX="2.124777359995278E-4" RelY="-0.20454545454572326" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re43">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1018.0" Y="918.0" GraphRef="sa307" RelX="1.0" RelY="0.0" />
-      <Point X="1127.25" Y="918.0" />
-      <Point X="1116.0" Y="918.0" GraphRef="sa310" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.45521456962895257" Shape="None" GraphId="id10075" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10076">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="882.0" Y="839.0" GraphRef="sa299" RelX="1.0" RelY="0.0" />
-      <Point X="1072.8533556402888" Y="918.0" GraphRef="id10075" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re45">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="659.5454545454545" Y="811.181818181818" GraphRef="sa316" RelX="0.0" RelY="1.0" />
-      <Point X="802.0" Y="839.0" GraphRef="sa299" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.44070193610908515" Shape="None" GraphId="id10077" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10078">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="580.0" Y="836.0" GraphRef="sa300" RelX="1.0" RelY="0.0" />
-      <Point X="722.3254485348124" Y="823.4413447681254" GraphRef="id10077" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re48">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="383.0" Y="912.0" GraphRef="sa301" RelX="1.0" RelY="0.0" />
-      <Point X="478.5454545454545" Y="912.181818181818" GraphRef="sa319" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5027310767145677" Shape="None" GraphId="id10079" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10080">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="429.5454545454545" Y="974.181818181818" GraphRef="sa321" RelX="0.0" RelY="-1.0" />
-      <Point X="431.03366923881913" Y="912.0914056503117" GraphRef="id10079" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re83">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="550.0" Y="1728.0" GraphRef="sa334" RelX="0.0" RelY="1.0" />
-      <Point X="543.0" Y="1814.0" GraphRef="sa377" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re26">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1516.4117637303418" Y="1656.636729450509" GraphRef="sa267" RelX="-0.3826834323650892" RelY="0.9238795325112915" />
-      <Point X="1411.9999999999989" Y="1738.999999999999" />
-      <Point X="1413.0" Y="1863.0" GraphRef="sa283" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5174770778879245" Shape="None" GraphId="id10081" />
-      <Anchor Position="0.7595217557199425" Shape="None" GraphId="id10083" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10082">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1412.0" Y="1635.0" GraphRef="sa282" RelX="0.0" RelY="1.0" />
-      <Point X="1411.9999999999989" Y="1738.999999999999" GraphRef="id10081" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10084">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1192.7777777777774" Y="1728.0" GraphRef="sa220" RelX="0.8604651162790697" RelY="0.7391304347826086" />
-      <Point X="1412.5016231700915" Y="1801.2012730914341" GraphRef="id10083" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re96">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1165.6777963932625" Y="1375.8611939375417" GraphRef="sa254" RelX="-0.9238795325112875" RelY="-0.38268343236508373" />
-      <Point X="1064.5771644662752" Y="1374.943650813896" GraphRef="sa399" RelX="0.7071067811865445" RelY="-0.7071067811865429" ArrowHead="mim-conversion" />
-      <Anchor Position="0.45325234280346416" Shape="None" GraphId="id10085" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10086">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1210.5944084089786" Y="1495.0649711574556" GraphRef="sa288" RelX="-0.7071067811865454" RelY="-0.7071067811865472" />
-      <Point X="1119.8536981134448" Y="1375.445315367126" GraphRef="id10085" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re57">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3642.0" Y="1789.5" GraphRef="sa329" RelX="1.0" RelY="0.0" />
-      <Point X="4560.0" Y="1785.5" GraphRef="sa330" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000296642599328" Shape="None" GraphId="id10087" />
-      <Anchor Position="0.5054759160131082" Shape="None" GraphId="id10089" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10088">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4077.0" Y="1925.0" GraphRef="sa290" RelX="-0.5" RelY="-1.0" />
-      <Point X="4101.027231790618" Y="1787.4998813429602" GraphRef="id10087" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10090">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4120.0" Y="2047.0" GraphRef="sa291" RelX="0.5" RelY="-1.0" />
-      <Point X="4106.026890900033" Y="1787.4780963359476" GraphRef="id10089" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re62">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4362.9473684210525" Y="888.6954887218044" GraphRef="sa251" RelX="-1.0" RelY="0.0" />
-      <Point X="4267.857142857143" Y="888.134920634921" GraphRef="sa229" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5027571310036102" Shape="None" GraphId="id10091" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10092">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4309.0" Y="941.0" GraphRef="sa337" RelX="0.0" RelY="-1.0" />
-      <Point X="4315.140079430055" Y="888.4136591187107" GraphRef="id10091" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re69">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="965.25" Y="2203.0" GraphRef="sa351" RelX="0.0" RelY="-1.0" />
-      <Point X="965.7500000000002" Y="2162.716457095436" />
-      <Point X="1128.9626804253332" Y="2122.838834764832" GraphRef="sa297" RelX="-0.7071067811865459" RelY="0.7071067811865578" ArrowHead="mim-conversion" />
-      <Anchor Position="0.19340652263911287" Shape="None" GraphId="id10093" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10094">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="865.085783637895" Y="2162.7164570954365" GraphRef="sa350" RelX="0.9238795325112863" RelY="-0.38268343236508373" />
-      <Point X="965.7500000000002" Y="2162.716457095436" GraphRef="id10093" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re77">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2501.0" Y="2471.0" GraphRef="sa366" RelX="-1.0" RelY="0.0" />
-      <Point X="1718.0" Y="2470.0" GraphRef="sa367" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4936556120027011" Shape="None" GraphId="id10095" />
-      <Anchor Position="0.5064259520679214" Shape="None" GraphId="id10097" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10096">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2391.0" Y="2515.0" GraphRef="sa369" RelX="0.0" RelY="-1.0" />
-      <Point X="2114.467655801885" Y="2470.506344387997" GraphRef="id10095" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10098">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1859.0454545454545" Y="2520.727272727273" GraphRef="sa370" RelX="0.0" RelY="-1.0" />
-      <Point X="2104.4684795308176" Y="2470.4935740479323" GraphRef="id10097" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re46">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="343.0" Y="932.0" GraphRef="sa301" RelX="0.0" RelY="1.0" />
-      <Point X="341.5454545454545" Y="1073.181818181818" GraphRef="sa314" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.35428427451600913" Shape="None" GraphId="id10099" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10100">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="267.5454545454545" Y="982.181818181818" GraphRef="sa315" RelX="1.0" RelY="0.0" />
-      <Point X="341.5454545454549" Y="982.0000000000001" GraphRef="id10099" RelX="-0.9392228734308787" RelY="-0.01849802939636902" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re93">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="473.66666666666674" Y="1447.5" GraphRef="sa390" RelX="0.0" RelY="1.0" />
-      <Point X="474.8333333333337" Y="1545.499999999999" />
-      <Point X="395.0" Y="1545.0" GraphRef="csa12" RelX="1.02721088435374" RelY="0.20952380952380953" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5510904655041811" Shape="None" GraphId="id10101" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10102">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="874.0" Y="1544.0" GraphRef="sa266" RelX="-1.0" RelY="0.0" />
-      <Point X="474.8333333333337" Y="1545.499999999999" GraphRef="id10101" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re117">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2169.192439129059" Y="1794.9270700589495" GraphRef="sa271" RelX="-0.70710678118655" RelY="0.7071067811865396" />
-      <Point X="1720.8571428571431" Y="1960.2142857142858" GraphRef="sa421" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re112">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="343.0" Y="892.0" GraphRef="sa301" RelX="0.0" RelY="-1.0" />
-      <Point X="342.9999999999998" Y="807.9999999999998" />
-      <Point X="269.0" Y="836.0" GraphRef="csa4" RelX="1.0928030303030312" RelY="0.16958041958042275" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5149578021728225" Shape="None" GraphId="id10103" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10104">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="500.0" Y="826.0" GraphRef="sa300" RelX="-1.0" RelY="-0.5" />
-      <Point X="342.9999999999998" Y="807.9999999999998" GraphRef="id10103" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re53">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2253.470588235294" Y="2114.735294117647" GraphRef="sa298" RelX="1.0" RelY="0.0" />
-      <Point X="3550.148565478135" Y="2115.2835429045635" GraphRef="sa325" RelX="-0.923879532511285" RelY="0.38268343236508373" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re82">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3874.664216362105" Y="966.7835429045637" GraphRef="sa376" RelX="-0.9238795325112863" RelY="0.38268343236509283" />
-      <Point X="3859.0000000000014" Y="1013.1349206349213" />
-      <Point X="3624.857142857143" Y="1013.134920634921" GraphRef="sa228" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.17284326154952862" Shape="None" GraphId="id10105" />
-      <Anchor Position="0.5867986539829333" Shape="None" GraphId="id10107" />
-      <Anchor Position="0.6044467301692145" Shape="None" GraphId="id10109" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10106">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3856.857142857143" Y="1052.634920634921" GraphRef="sa226" RelX="-1.0" RelY="0.0" />
-      <Point X="3859.0000000000014" Y="1013.1349206349213" GraphRef="id10105" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10108">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3769.5714285714284" Y="966.634920634921" GraphRef="sa234" RelX="-0.5" RelY="1.0" />
-      <Point X="3741.8218476517277" Y="1013.1349206349211" GraphRef="id10107" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10110">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3691.0" Y="967.0" GraphRef="sa235" RelX="0.0" RelY="1.0" />
-      <Point X="3736.826215277298" Y="1013.1349206349211" GraphRef="id10109" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re37">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1222.0" Y="2114.0" GraphRef="sa297" RelX="1.0" RelY="0.0" />
-      <Point X="2144.470588235294" Y="2114.735294117647" GraphRef="sa298" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000293779791283" Shape="None" GraphId="id10111" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10112">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1832.0" Y="2275.5" GraphRef="csa6" RelX="-1.0" RelY="0.0" />
-      <Point X="1683.2623944393347" Y="2114.3676686602785" GraphRef="id10111" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re44">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1018.0" Y="971.0" GraphRef="sa311" RelX="1.0" RelY="0.0" />
-      <Point X="1127.25" Y="973.0" />
-      <Point X="1116.0" Y="973.0" GraphRef="sa312" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4552210558302262" Shape="None" GraphId="id10113" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10114">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="882.0" Y="839.0" GraphRef="sa299" RelX="1.0" RelY="0.0" />
-      <Point X="1072.853279295624" Y="972.0041790260068" GraphRef="id10113" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re54">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3644.0" Y="2039.5" GraphRef="sa323" RelX="1.0" RelY="0.0" />
-      <Point X="4554.425421036992" Y="2036.2835429045635" GraphRef="sa324" RelX="-0.9238795325112935" RelY="0.38268343236508373" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000301600973204" Shape="None" GraphId="id10115" />
-      <Anchor Position="0.5000301600973204" Shape="None" GraphId="id10117" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10116">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4097.0" Y="1965.0" GraphRef="sa290" RelX="0.0" RelY="1.0" />
-      <Point X="4099.240169037797" Y="2037.8916744436228" GraphRef="id10115" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10118">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4080.0" Y="2047.0" GraphRef="sa291" RelX="-0.5" RelY="-1.0" />
-      <Point X="4099.240169037797" Y="2037.8916744436228" GraphRef="id10117" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re65">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1452.0" Y="1615.0" GraphRef="sa282" RelX="1.0" RelY="0.0" />
-      <Point X="1520.0" Y="1606.0" GraphRef="sa340" RelX="-0.5333333333333333" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.505285559145076" Shape="None" GraphId="id10119" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10120">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1284.0" Y="1508.5" GraphRef="sa288" RelX="1.0" RelY="0.0" />
-      <Point X="1486.3594180218652" Y="1610.4524299676943" GraphRef="id10119" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re109">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="295.0" Y="1791.0" GraphRef="csa20" RelX="1.0" RelY="0.21568627450980393" />
-      <Point X="568.0000000000011" Y="1900.9999999999998" />
-      <Point X="623.0" Y="1885.0" GraphRef="sa415" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.8370912953426023" Shape="None" GraphId="id10121" />
-      <Anchor Position="0.43292979652708147" Shape="None" GraphId="id10123" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10122">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="568.0000000000011" Y="1900.9999999999998" GraphRef="id10121" RelX="0.0" RelY="0.0" />
-      <Point X="693.0" Y="1951.0" GraphRef="sa355" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10124">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="415.39392013277813" Y="1915.4515058436089" GraphRef="sa360" RelX="0.38268343236508956" RelY="-0.9238795325112915" />
-      <Point X="435.0644358956985" Y="1850.6101617757013" GraphRef="id10123" RelX="-1.126656532901336" RelY="2.719978013262107" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re58">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1152.7777777777774" Y="1688.0" GraphRef="sa220" RelX="-0.06976744186046512" RelY="-1.0" />
-      <Point X="1046.0" Y="1544.0" GraphRef="sa331" RelX="0.0" RelY="0.5333333333333333" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5007773033778923" Shape="None" GraphId="id10125" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10126">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1224.5446124083012" Y="1526.0537111177146" GraphRef="sa288" RelX="-0.38268343236508856" RelY="0.9238795325112924" />
-      <Point X="1099.3058901615382" Y="1615.8880683135835" GraphRef="id10125" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re71">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="803.1176470588234" Y="1832.7058823529412" GraphRef="sa354" RelX="-0.5" RelY="1.0" />
-      <Point X="753.0" Y="1931.0" GraphRef="sa355" RelX="0.5" RelY="-1.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re51">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2230.875" Y="1882.375" GraphRef="sa284" RelX="1.0" RelY="0.0" />
-      <Point X="3554.0" Y="1881.0" GraphRef="sa327" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re50">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2226.2769601084833" Y="1790.8717781986813" GraphRef="sa271" RelX="0.9238795325112863" RelY="0.38268343236508373" />
-      <Point X="3572.0" Y="1789.5" GraphRef="sa329" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re38">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="954.0" Y="1564.0" GraphRef="sa266" RelX="1.0" RelY="1.0" />
-      <Point X="1112.7777777777774" Y="1708.0" GraphRef="sa220" RelX="-1.0" RelY="-0.13043478260869565" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5005438167379873" Shape="None" GraphId="id10127" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10128">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1201.2731801020147" Y="1515.7709852149367" GraphRef="sa288" RelX="-0.923879532511285" RelY="0.382683432365088" />
-      <Point X="1033.4752349020646" Y="1636.0783096102703" GraphRef="id10127" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re90">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="229.0" Y="1364.5" GraphRef="csa11" RelX="1.0599812558575463" RelY="0.2288188002473795" />
-      <Point X="722.0" Y="1364.5" GraphRef="csa10" RelX="-1.0441826215022132" RelY="0.1917989417989382" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5001028493391495" Shape="None" GraphId="id10129" />
-      <Anchor Position="0.5001028493391495" Shape="None" GraphId="id10131" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10130">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="480.0" Y="1318.0" GraphRef="sa379" RelX="0.0" RelY="1.0" />
-      <Point X="475.5507047242007" Y="1364.5" GraphRef="id10129" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10132">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="391.0605867994449" Y="1305.8818274897246" GraphRef="sa395" RelX="0.38268343236508956" RelY="0.9238795325112915" />
-      <Point X="475.5507047242007" Y="1364.5" GraphRef="id10131" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re22">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3736.0" Y="1528.0882352941176" GraphRef="sa275" RelX="-1.0" RelY="0.0" />
-      <Point X="2357.75" Y="1528.75" GraphRef="sa265" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re42">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1018.0" Y="866.0" GraphRef="sa304" RelX="1.0" RelY="0.0" />
-      <Point X="1127.25" Y="865.0" />
-      <Point X="1116.0" Y="865.0" GraphRef="sa309" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4552161914560297" Shape="None" GraphId="id10133" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10134">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="882.0" Y="839.0" GraphRef="sa299" RelX="1.0" RelY="0.0" />
-      <Point X="1072.8533365493356" Y="865.4979099629352" GraphRef="id10133" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re3">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4061.857142857143" Y="1027.134920634921" GraphRef="sa230" RelX="1.0" RelY="0.0" />
-      <Point X="4198.857142857143" Y="1014.134920634921" GraphRef="sa227" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.501318359088464" Shape="None" GraphId="id10135" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10136">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4099.0" Y="990.0" GraphRef="sa225" RelX="0.0" RelY="1.0" />
-      <Point X="4130.537758052263" Y="1020.617781966771" GraphRef="id10135" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re23">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1642.0" Y="1515.5" GraphRef="sa263" RelX="0.0" RelY="-1.0" />
-      <Point X="1640.5103092174797" Y="1081.9999822866203" GraphRef="csa2" RelX="2.824443145135313E-4" RelY="1.1176463641811865" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re104">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1159.5833333333335" Y="1238.75" GraphRef="sa403" RelX="0.8333333333333358" RelY="-0.5" />
-      <Point X="1330.0" Y="1221.3239488045826" GraphRef="csa13" RelX="-1.0" RelY="0.35387340014320756" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re55">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3655.0" Y="2110.5" GraphRef="sa325" RelX="1.0" RelY="0.0" />
-      <Point X="4547.0" Y="2106.5" GraphRef="sa326" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000314186790644" Shape="None" GraphId="id10137" />
-      <Anchor Position="0.5000314186790634" Shape="None" GraphId="id10139" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10138">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4137.0" Y="1965.0" GraphRef="sa290" RelX="1.0" RelY="1.0" />
-      <Point X="4101.0280254617255" Y="2108.4998743252836" GraphRef="id10137" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10140">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4080.0" Y="2087.0" GraphRef="sa291" RelX="-0.5" RelY="1.0" />
-      <Point X="4101.028025461725" Y="2108.4998743252836" GraphRef="id10139" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re103">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1178.0" Y="1293.0" GraphRef="sa401" RelX="0.6666666666666666" RelY="-1.0" />
-      <Point X="1320.0544162131757" Y="1265.568802386421" />
-      <Point X="1330.0" Y="1242.0" GraphRef="csa13" RelX="-1.0" RelY="1.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re107">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1280.6060798672218" Y="1011.548494156391" GraphRef="sa406" RelX="-0.38268343236509283" RelY="0.9238795325112824" />
-      <Point X="1249.0" Y="1130.4999999999995" />
-      <Point X="1315.5" Y="1113.5" />
-      <Point X="1315.5" Y="1097.0" GraphRef="csa15" RelX="-0.9791666666666666" RelY="1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.591107444389808" Shape="None" GraphId="id10141" />
-      <Anchor Position="0.7416216900937317" Shape="None" GraphId="id10143" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10142">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1174.0" Y="1150.0" GraphRef="csa14" RelX="0.9791666666666666" RelY="0.7142857142857143" />
-      <Point X="1249.0" Y="1130.4999999999995" GraphRef="id10141" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10144">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1149.1666666666667" Y="1230.0" GraphRef="sa403" RelX="0.6666666666666679" RelY="-1.0" />
-      <Point X="1279.3632462598441" Y="1122.7379671215433" GraphRef="id10143" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re108">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1064.0" Y="2312.5" GraphRef="sa412" RelX="0.0" RelY="1.0" />
-      <Point X="1063.999999999999" Y="2391.7499999999995" />
-      <Point X="1240.0" Y="2391.0" GraphRef="csa16" RelX="-1.105263157894737" RelY="0.3275862068965517" ArrowHead="mim-conversion" />
-      <Anchor Position="0.3104779778840939" Shape="None" GraphId="id10145" />
-      <Anchor Position="0.6557950274240998" Shape="None" GraphId="id10147" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10146">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="984.25" Y="2392.0" GraphRef="csa18" RelX="1.0" RelY="0.4444444444444444" />
-      <Point X="1063.999999999999" Y="2391.7499999999995" GraphRef="id10145" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10148">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1152.7777777777774" Y="1728.0" GraphRef="sa220" RelX="-0.06976744186046512" RelY="0.7391304347826086" />
-      <Point X="1152.1419284224464" Y="2391.3743951913816" GraphRef="id10147" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re13">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2251.7142857142862" Y="1296.5" GraphRef="sa250" RelX="-1.0" RelY="0.0" />
-      <Point X="1740.518796992481" Y="1297.1447368421052" GraphRef="sa260" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000956585405854" Shape="None" GraphId="id10149" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10150">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1863.0" Y="1373.0" GraphRef="sa253" RelX="0.0" RelY="-1.0" />
-      <Point X="1996.0676411389786" Y="1296.822430095638" GraphRef="id10149" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re86">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="676.0" Y="1223.0" GraphRef="sa382" RelX="1.0" RelY="0.0" />
-      <Point X="871.1428571428573" Y="1223.1428571428573" GraphRef="sa383" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5006560691603318" Shape="None" GraphId="id10151" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10152">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="772.5" Y="1299.0" GraphRef="csa10" RelX="-0.002945508100151294" RelY="-1.0211640211640247" />
-      <Point X="773.6994557818591" Y="1223.0715222955944" GraphRef="id10151" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re19">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1577.9411764705883" Y="1645.0882352941178" GraphRef="sa267" RelX="1.0" RelY="0.0" />
-      <Point X="1641.0000000000016" Y="1644.7835429045645" />
-      <Point X="1640.0" Y="1775.5" GraphRef="sa270" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.32541857332371066" Shape="None" GraphId="id10153" />
-      <Anchor Position="0.6636947816911754" Shape="None" GraphId="id10155" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10154">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1642.0" Y="1540.5" GraphRef="sa263" RelX="0.0" RelY="1.0" />
-      <Point X="1641.0000000000016" Y="1644.7835429045645" GraphRef="id10153" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10156">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1192.7777777777774" Y="1708.0" GraphRef="sa220" RelX="0.8604651162790697" RelY="-0.13043478260869565" />
-      <Point X="1640.498539101449" Y="1710.3327349351528" GraphRef="id10155" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re1">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4197.857142857143" Y="888.134920634921" GraphRef="sa229" RelX="-1.0" RelY="0.0" />
-      <Point X="4053.335783637895" Y="906.7164570954363" GraphRef="sa224" RelX="0.9238795325112863" RelY="-0.38268343236509283" ArrowHead="mim-conversion" />
-      <Anchor Position="0.535415229350107" Shape="None" GraphId="id10157" />
-      <Anchor Position="0.5011761015746136" Shape="None" GraphId="id10159" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10158">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4099.0" Y="950.0" GraphRef="sa225" RelX="0.0" RelY="-1.0" />
-      <Point X="4120.47820616478" Y="898.0837582406051" GraphRef="id10157" RelX="0.0" RelY="-1.1368683772161603E-13" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10160">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4104.0" Y="841.0" GraphRef="sa338" RelX="0.0" RelY="1.0" />
-      <Point X="4125.426491449376" Y="897.4475426394687" GraphRef="id10159" RelX="0.0" RelY="1.1368683772161603E-13" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re92">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="724.1428571428573" Y="1408.1428571428573" GraphRef="csa10" RelX="-1.0" RelY="1.0" />
-      <Point X="722.0" Y="1430.0" />
-      <Point X="641.0000000003549" Y="1429.03124999992" />
-      <Point X="639.6666666666667" Y="1340.5" GraphRef="sa392" RelX="0.0" RelY="1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.537665163177522" Shape="None" GraphId="id10161" />
-      <Anchor Position="0.7507640041001563" Shape="None" GraphId="id10163" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10162">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="641.0000000003549" Y="1429.03124999992" GraphRef="id10161" RelX="0.0" RelY="0.0" />
-      <Point X="513.6666666666667" Y="1427.5" GraphRef="sa390" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10164">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="874.0" Y="1524.0" GraphRef="sa266" RelX="-1.0" RelY="-1.0" />
-      <Point X="681.4402048938089" Y="1434.5152674417006" />
-      <Point X="640.3854415346221" Y="1388.225528133759" GraphRef="id10163" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re63">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4556.9473684210525" Y="887.6954887218044" GraphRef="sa252" RelX="-1.0" RelY="0.0" />
-      <Point X="4432.9473684210525" Y="888.6954887218044" GraphRef="sa251" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5016231700922162" Shape="None" GraphId="id10165" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10166">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4495.666666666667" Y="943.6666666666667" GraphRef="sa336" RelX="0.0" RelY="-1.0" />
-      <Point X="4494.746095329618" Y="888.1971118918966" GraphRef="id10165" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re113">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1204.018796992481" Y="1368.1447368421052" GraphRef="sa254" RelX="0.0" RelY="-1.0" />
-      <Point X="1157.0" Y="1331.0" GraphRef="sa401" RelX="0.3333333333333333" RelY="1.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re8">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2284.1428571428573" Y="1027.0" GraphRef="sa240" RelX="0.0" RelY="1.0" />
-      <Point X="2286.0" Y="1144.5" GraphRef="sa244" RelX="0.0" RelY="-1.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5018070564112698" Shape="None" GraphId="id10167" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10168">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2348.0" Y="1089.0" GraphRef="sa242" RelX="-1.0" RelY="0.0" />
-      <Point X="2285.0747845333353" Y="1085.9623291283242" GraphRef="id10167" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re115">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="2150.875" Y="1892.375" GraphRef="sa284" RelX="-1.0" RelY="0.5" />
-      <Point X="1720.8571428571431" Y="1960.2142857142858" GraphRef="sa421" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re97">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1076.0" Y="1390.5" GraphRef="sa399" RelX="1.0" RelY="0.0" />
-      <Point X="1174.6738655732393" Y="1389.483571606937" GraphRef="sa254" RelX="-0.7071067811865464" RelY="0.7071067811865396" ArrowHead="mim-conversion" />
-      <Anchor Position="0.502560819195487" Shape="None" GraphId="id10169" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10170">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1125.0" Y="1447.0" GraphRef="sa400" RelX="0.0" RelY="-1.0" />
-      <Point X="1125.5896187156725" Y="1389.9891829141286" GraphRef="id10169" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re56">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3634.0" Y="1881.0" GraphRef="sa327" RelX="1.0" RelY="0.0" />
-      <Point X="4558.0" Y="1880.0" GraphRef="sa328" RelX="-1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.4946183488907516" Shape="None" GraphId="id10171" />
-      <Anchor Position="0.5054402195550952" Shape="None" GraphId="id10173" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10172">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4097.0" Y="1925.0" GraphRef="sa290" RelX="0.0" RelY="-1.0" />
-      <Point X="4091.0273543750545" Y="1880.5053816511092" GraphRef="id10171" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10174">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4140.0" Y="2047.0" GraphRef="sa291" RelX="1.0" RelY="-1.0" />
-      <Point X="4101.026762868908" Y="1880.494559780445" GraphRef="id10173" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re73">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="534.5294117647059" Y="2050.9411764705883" GraphRef="sa359" RelX="1.0" RelY="0.0" />
-      <Point X="625.4999999999995" Y="2010.9999999999995" />
-      <Point X="657.0" Y="2090.0" GraphRef="csa9" RelX="-0.4854426619132496" RelY="-0.9219457013574671" ArrowHead="mim-conversion" />
-      <Anchor Position="0.538785324003741" Shape="None" GraphId="id10175" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10176">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="713.0" Y="1971.0" GraphRef="sa355" RelX="-0.5" RelY="1.0" />
-      <Point X="625.4999999999995" Y="2010.9999999999995" GraphRef="id10175" RelX="0.0" RelY="0.0" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re20">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4585.0" Y="1522.0" GraphRef="sa272" RelX="-1.0" RelY="0.0" />
-      <Point X="4001.0" Y="1524.0882352941176" GraphRef="sa274" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re78">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1648.0" Y="2470.0" GraphRef="sa367" RelX="-1.0" RelY="0.0" />
-      <Point X="1527.0" Y="2471.0" GraphRef="sa374" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re95">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1271.4055915910214" Y="1495.0649711574556" GraphRef="sa288" RelX="0.7071067811865454" RelY="-0.7071067811865472" />
-      <Point X="1820.0326610054308" Y="1413.4414739984513" GraphRef="sa253" RelX="-1.0741834748642305" RelY="1.0220736999225664" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re35">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1206.0" Y="2035.0" GraphRef="sa294" RelX="1.0" RelY="0.0" />
-      <Point X="2144.5882352941176" Y="2037.6176470588236" GraphRef="sa295" RelX="-1.0" RelY="1.818989403545873E-14" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5000283774975058" Shape="None" GraphId="id10177" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10178">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1832.0" Y="2255.75" GraphRef="csa6" RelX="-1.0" RelY="-0.5" />
-      <Point X="1675.3207524323648" Y="2036.3088978116848" GraphRef="id10177" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re75">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4573.0" Y="2468.0" GraphRef="sa372" RelX="-1.0" RelY="0.0" />
-      <Point X="3641.0" Y="2472.0" GraphRef="sa373" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5053932317543401" Shape="None" GraphId="id10179" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10180">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="4102.0" Y="2534.0" GraphRef="sa371" RelX="0.0" RelY="-1.0" />
-      <Point X="4101.973508004955" Y="2470.0215729270176" GraphRef="id10179" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re21">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3933.664216362105" Y="1528.871778198681" GraphRef="sa274" RelX="-0.9238795325112863" RelY="0.38268343236508373" />
-      <Point X="3806.0" Y="1528.0882352941176" GraphRef="sa275" RelX="1.0" RelY="0.0" ArrowHead="mim-conversion" />
-      <Anchor Position="0.5015315129136176" Shape="None" GraphId="id10181" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="id10182">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3870.0" Y="1488.0" GraphRef="sa276" RelX="0.0" RelY="1.0" />
-      <Point X="3869.636588785087" Y="1528.4788067403226" GraphRef="id10181" RelX="0.0" RelY="0.0" ArrowHead="mim-catalysis" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re81">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="3986.0" Y="911.5" GraphRef="sa224" RelX="-1.0" RelY="0.0" />
-      <Point X="3931.7487373415292" Y="953.1611652351681" GraphRef="sa376" RelX="0.70710678118655" RelY="-0.7071067811865487" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Interaction GraphId="re114">
-    <Attribute Key="org.pathvisio.core.ds" Value="" />
-    <Attribute Key="org.pathvisio.core.id" Value="" />
-    <Graphics ConnectorType="Segmented" ZOrder="32827" LineThickness="1.0">
-      <Point X="1051.9246538622385" Y="1370.1746502847518" GraphRef="sa399" RelX="0.3826834323650905" RelY="-0.9238795325112815" />
-      <Point X="1112.4515219713892" Y="1332.5828012312631" GraphRef="sa401" RelX="-0.373785365533505" RelY="1.0833053279612184" ArrowHead="mim-conversion" />
-    </Graphics>
-    <Xref Database="" ID="" />
-  </Interaction>
-  <Shape TextLabel="nucleus" GraphId="ca7">
-    <Comment>GSTP1;TXN;GSS;SLC1A1;GGT1;TXN;GSTP1;SLC1A1;GSS;GGT1;NFE2L2;</Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="998.0" CenterY="921.0" Width="490.0" Height="304.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Shape TextLabel="Astrocyte" GraphId="ca3">
-    <Comment>GLUT?;ABCB1;yGluCys;SLC7A11;glucose;GGT1;cystine;GSS;L-glutamic acid;glycine;MAOB;MTPT;generic
-proteine;Paraquat-SG;MRP1;ABCB1;glutathione;lactate;electrophile-SG;MRP5;MPP+;MPP-SG;SLC3A2;L-cysteine;L-glutamic acid;GLUT1;GCLM;GCLC;</Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="3239.0" CenterY="1722.0" Width="1732.0" Height="1936.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Shape TextLabel="Mitochondria" GraphId="ca8">
-    <Comment>SLC25A10;Complex I;glutathione;SLC25A11;</Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="1662.5" CenterY="923.0" Width="201.0" Height="276.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Shape TextLabel="endothelial cell" GraphId="ca6">
-    <Comment>cystine;SLC7A11;SLC7A5;</Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="4400.0" CenterY="1689.0" Width="200.0" Height="1900.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Shape TextLabel="blood vessel" GraphId="ca5">
-    <Comment></Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="7414.0" CenterY="3000.0" Width="5172.0" Height="6000.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Shape TextLabel="blood vessel" GraphId="ca4">
-    <Comment>glutathione;generic
-protein;cystine;electrophile-SG;L-glutamic acid;CysGly;MPP-SG;Paraquat-SG;L-cysteine;MPP+;</Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="2260.5" CenterY="3000.0" Width="4521.0" Height="6000.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Shape TextLabel="Neuron" GraphId="ca1">
-    <Comment>Apotosis;glutathione;pyruvate;GLRX2;Proliferation;glycine;GCLC;TRAF2-GSTP1;Thioredoxin-ASK1;CAPN1;MRP/ABCC;glutathione
- disulfide;L-cysteine;CDK5R1;MPP+;ROS;PRDX1;MPP+;PARK-DAXX;PARK7-DAXX;JUN;ROS/RNS;PARK7;JUN;PRDX2;MAPK8;NFE2L2;PRDX2;SLC6A3;GSH Depletion;glutathione;MPP+;UPS;TRAF2;PARK7-KEAP1;CDK5R1 (p25);PRDX6;GSH Depletion;GCLM;ROS/RNS;generic
-protein;generic
-protein;GSTP1-CDK5;glutathione;ANPEP;UPS;MAP3K5;glutathione;ASK1-DAXX;ROS;GSH/GSSG ratio;generic
-protein;PARK7;Paraquat;electrophile-SG;GLUT?;20S core;DAXX;GSTP1;JNK-GSTP1;PARK7;L-glutamic acid;KEAP1;SLC1A1;TRX;PARK7;AMPK;glutathione
- disulfide;CDK5-p25;glutathione;MPP-SG;GSS;electrophile;GSR;CDK5-p35;yGluCys;TRX;glutathione;Paraquat-SG;electrophile;CDK5;AMPK;GLRX;lactate;20S core;generic
- protein;E1/E2;GSTP1;glutathione;Apotosis;DAXX;ROS/RNS;UPS;</Comment>
-    <Attribute Key="org.pathvisio.CellularComponentProperty" Value="Cell" />
-    <Attribute Key="org.pathvisio.DoubleLineProperty" Value="Double" />
-    <Graphics CenterX="983.0" CenterY="1712.0" Width="1772.0" Height="1924.0" ZOrder="16384" FontSize="20" Valign="Bottom" ShapeType="Rectangle" LineThickness="3.0" Color="ffcc66" Rotation="0.0" />
-  </Shape>
-  <Group GroupId="csa7" GraphId="csa7" />
-  <Group GroupId="csa8" GraphId="csa8" />
-  <Group GroupId="csa5" GraphId="csa5" />
-  <Group GroupId="csa9" GraphId="csa9" />
-  <Group GroupId="csa15" GraphId="csa15" />
-  <Group GroupId="csa11" GraphId="csa11" />
-  <Group GroupId="csa16" GraphId="csa16" />
-  <Group GroupId="csa20" GraphId="csa20" />
-  <Group GroupId="csa4" GraphId="csa4" />
-  <Group GroupId="csa12" GraphId="csa12" />
-  <Group GroupId="csa3" GraphId="csa3" />
-  <Group GroupId="csa19" GraphId="csa19" GroupRef="csa18" />
-  <Group GroupId="csa18" GraphId="csa18" />
-  <Group GroupId="csa10" GraphId="csa10" />
-  <Group GroupId="csa14" GraphId="csa14" />
-  <Group GroupId="csa13" GraphId="csa13" />
-  <Group GroupId="csa17" GraphId="csa17" GroupRef="csa16" />
-  <InfoBox CenterX="0.0" CenterY="0.0" />
-</Pathway>
-
diff --git a/persist/src/main/java/lcsb/mapviewer/persist/ApplicationContextLoader.java b/persist/src/main/java/lcsb/mapviewer/persist/ApplicationContextLoader.java
index c480231a2a77c021ca268509c0bdb5e46e287170..63bc73e8f3ce796d7c4d51b2da4b82761f0d4b52 100644
--- a/persist/src/main/java/lcsb/mapviewer/persist/ApplicationContextLoader.java
+++ b/persist/src/main/java/lcsb/mapviewer/persist/ApplicationContextLoader.java
@@ -28,7 +28,7 @@ public final class ApplicationContextLoader {
   private static ConfigurableApplicationContext applicationContext;
 
   /**
-   * Default constructor. Prevents instatiation.
+   * Default constructor. Prevents instantiation.
    */
   private ApplicationContextLoader() {
 
diff --git a/persist/src/main/resources/db/migration/15.0.0/V15.0.0.20191022__font_color_is_obligatory.sql b/persist/src/main/resources/db/migration/15.0.0/V15.0.0.20191022__font_color_is_obligatory.sql
new file mode 100644
index 0000000000000000000000000000000000000000..f79af3ae4ab07ba4f51a8a444c0b9a607997a08b
--- /dev/null
+++ b/persist/src/main/resources/db/migration/15.0.0/V15.0.0.20191022__font_color_is_obligatory.sql
@@ -0,0 +1,2 @@
+update element_table set font_color = E'\\xaced00057372000e6a6176612e6177742e436f6c6f7201a51783108f337502000546000666616c70686149000576616c75654c0002637374001b4c6a6176612f6177742f636f6c6f722f436f6c6f7253706163653b5b00096672676276616c75657400025b465b00066676616c756571007e0002787000000000ff000000707070' where font_color is null;
+ALTER TABLE element_table ALTER COLUMN font_color SET NOT NULL;
diff --git a/rest-api/pom.xml b/rest-api/pom.xml
index f9d2e9f26b3547b7aabcd49ff87948df258faba7..3560c6db610553db2ed7985bf285cac908ae3b84 100644
--- a/rest-api/pom.xml
+++ b/rest-api/pom.xml
@@ -26,6 +26,12 @@
 			<version>1.0</version>
 		</dependency>
 
+		<dependency>
+			<groupId>lcsb.mapviewer</groupId>
+			<artifactId>pathvisio</artifactId>
+			<version>1.0</version>
+		</dependency>
+
 		<dependency>
 			<groupId>javax.ws.rs</groupId>
 			<artifactId>jsr311-api</artifactId>
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
index bc9c4366ab4c056f74a422392e16135c94007e6c..5ab4674620e75aa3225032ac375ad9e410ba9b4f 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/BaseRestImpl.java
@@ -23,9 +23,6 @@ import lcsb.mapviewer.annotation.services.*;
 import lcsb.mapviewer.common.comparator.StringComparator;
 import lcsb.mapviewer.common.exception.*;
 import lcsb.mapviewer.converter.Converter;
-import lcsb.mapviewer.converter.model.celldesigner.CellDesignerXmlParser;
-import lcsb.mapviewer.converter.model.sbgnml.SbgnmlXmlConverter;
-import lcsb.mapviewer.converter.model.sbml.SbmlParser;
 import lcsb.mapviewer.model.map.*;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.reaction.Reaction;
@@ -60,6 +57,9 @@ public abstract class BaseRestImpl {
   @Autowired
   private PubmedParser pubmedParser;
 
+  @Autowired
+  private List<Converter> modelConverters;
+
   private ElementMatcher elementMatcher = new ElementMatcher();
 
   private Transformer mathMlTransformer;
@@ -161,7 +161,7 @@ public abstract class BaseRestImpl {
    * @param modelId
    *          list of model identifiers separated by "," or '*' when all models
    *          should be returned
-   * @throws QueryException 
+   * @throws QueryException
    */
   protected List<Model> getModels(String projectId, String modelId) throws QueryException {
     Model model = modelService.getLastModelByProjectId(projectId);
@@ -318,11 +318,7 @@ public abstract class BaseRestImpl {
   }
 
   protected List<Converter> getModelConverters() {
-    List<Converter> result = new ArrayList<>();
-    result.add(new CellDesignerXmlParser());
-    result.add(new SbgnmlXmlConverter());
-    result.add(new SbmlParser());
-    return result;
+    return modelConverters;
   }
 
   protected String getFirstValue(List<Object> list) {
diff --git a/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java b/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java
index 28365629698bf7a2625b0cefd7899d2d3cde31cb..57b92597b0c411165ef847f29e13de0a0f0856fa 100644
--- a/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java
+++ b/rest-api/src/main/java/lcsb/mapviewer/api/SpringRestApiConfig.java
@@ -8,7 +8,7 @@ import lcsb.mapviewer.services.SpringServiceConfig;
 @Configuration
 @EnableWebMvc
 @Import({ SpringServiceConfig.class })
-@ComponentScan(basePackages = { "lcsb.mapviewer.api" })
+@ComponentScan(basePackages = { "lcsb.mapviewer" })
 public class SpringRestApiConfig {
 
 }
diff --git a/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java b/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java
index 77e415ea34e49fd29215be138e0ad97e0e2fc4ba..84d9f956a0b7e8aa72e65fbc4de242593ce407b0 100644
--- a/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java
+++ b/rest-api/src/test/java/lcsb/mapviewer/api/BaseRestImplTest.java
@@ -15,16 +15,21 @@ import org.springframework.beans.factory.annotation.Autowired;
 import lcsb.mapviewer.annotation.services.MiriamConnector;
 import lcsb.mapviewer.annotation.services.PubmedParser;
 import lcsb.mapviewer.annotation.services.annotators.ElementAnnotator;
+import lcsb.mapviewer.api.projects.ProjectRestImpl;
+import lcsb.mapviewer.converter.Converter;
 import lcsb.mapviewer.model.map.MiriamData;
 import lcsb.mapviewer.model.map.MiriamType;
 import lcsb.mapviewer.model.user.annotator.AnnotatorData;
 
 public class BaseRestImplTest extends RestTestFunctions {
-  Logger logger = LogManager.getLogger(BaseRestImplTest.class);
+  Logger logger = LogManager.getLogger();
 
   @Autowired
   MiriamConnector mc;
 
+  @Autowired
+  ProjectRestImpl restImpl;
+
   @Autowired
   PubmedParser pubmedParser;
 
@@ -107,4 +112,11 @@ public class BaseRestImplTest extends RestTestFunctions {
     Integer x = controller.parseInteger(null);
     assertNull(x);
   }
+
+  @Test
+  public void testGetConverters() throws Exception {
+    List<Converter> list = restImpl.getModelConverters();
+    assertTrue(list.size() > 0);
+  }
+
 }