diff --git a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java
index dded4298bdca5eaf2d5480d40ed5ded68117e3bf..57001079c87ca067e121c547b66889480533695f 100644
--- a/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java
+++ b/converter-CellDesigner/src/test/java/lcsb/mapviewer/converter/model/celldesigner/ProjectExportTest.java
@@ -12,7 +12,6 @@ import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelData;
 import lcsb.mapviewer.model.map.model.ModelSubmodelConnection;
 import lcsb.mapviewer.model.map.model.SubmodelType;
-import lcsb.mapviewer.model.map.species.Element;
 import lcsb.mapviewer.model.map.species.Protein;
 import org.junit.After;
 import org.junit.Before;
@@ -87,6 +86,19 @@ public class ProjectExportTest extends CellDesignerTestFunctions {
     testSerializationOverZip(project);
   }
 
+  @Test
+  public void testImmediateLink() throws Exception {
+    Project project = createProject();
+    Model model = createEmptyModel();
+    model.setWidth(260);
+    Protein protein = createProtein();
+    protein.setImmediateLink("https://uni.lu/");
+    model.addElement(protein);
+    project.addModel(model);
+
+    testSerializationOverZip(project);
+  }
+
   private void testSerializationOverZip(final Project project) throws Exception {
     File tempFile = File.createTempFile("CD-", ".zip");
     try (FileOutputStream outputStream = new FileOutputStream(tempFile)) {
@@ -101,10 +113,6 @@ public class ProjectExportTest extends CellDesignerTestFunctions {
     }
     for (ModelData model : project2.getModels()) {
       clearModelFromZ(model);
-
-      for (Element element : model.getElements()) {
-        logger.debug(element.getSubmodel());
-      }
     }
 
     assertEquals(0, projectComparator.compare(project, project2));
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java
index bea7b0376e89ae1e8ebf0502f8ce3f6629bfcadc..5d6bc2741c2dc10b2f18223f019874358c771f2b 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java
@@ -64,7 +64,7 @@ public class ComplexZipConverter {
    * Default class logger.
    */
   private static final Logger logger = LogManager.getLogger();
-  private static final String IMMEDIATE_LINK_PREFIX = "IMMEDIATE_LINK:";
+  protected static final String IMMEDIATE_LINK_PREFIX = "IMMEDIATE_LINK:";
 
   /**
    * Class used to create single submap from a file.
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
index b42db99a4bf4325e344cd1837b988942e64904b2..b5f450031f4f9d21313458eba8b0fdb377bc8c4e 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
@@ -8,6 +8,8 @@ import lcsb.mapviewer.converter.zip.LayoutZipEntryFile;
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.InconsistentModelException;
+import lcsb.mapviewer.model.map.compartment.Compartment;
+import lcsb.mapviewer.model.map.compartment.SquareCompartment;
 import lcsb.mapviewer.model.map.layout.graphics.Glyph;
 import lcsb.mapviewer.model.map.layout.graphics.Layer;
 import lcsb.mapviewer.model.map.layout.graphics.LayerText;
@@ -221,6 +223,14 @@ public class ProjectFactory {
           reaction.addProduct(new Product(targetElement));
           mapping.addReaction(reaction);
         }
+        if (parentElement.getImmediateLink() != null) {
+          Compartment mappingParentCompartment = getCompartmentForConnection(parentModel.getName(), mapping);
+
+          Species sourceElement = getCompartmentChildForConnection(parentElement.getElementId(), mappingParentCompartment);
+          String notes = sourceElement.getNotes();
+          notes += ComplexZipConverter.IMMEDIATE_LINK_PREFIX + parentElement.getImmediateLink() + "\n";
+          sourceElement.setNotes(notes);
+        }
       }
     }
     try {
@@ -248,6 +258,23 @@ public class ProjectFactory {
     return sourceElement;
   }
 
+  private Species getCompartmentChildForConnection(final String elementId, final Compartment mappingParentElement) {
+    Species sourceElement = null;
+    for (Element child : mappingParentElement.getElements()) {
+      if (child instanceof Species && child.getName().equals(elementId)) {
+        sourceElement = (Species) child;
+      }
+    }
+
+    if (sourceElement == null) {
+      sourceElement = new GenericProtein("sa" + idCounter++);
+      sourceElement.setName(elementId);
+      mappingParentElement.addElement(sourceElement);
+      mappingParentElement.getModel().addElement(sourceElement);
+    }
+    return sourceElement;
+  }
+
   private Complex getComplexForConnection(final String modelName, final Model mapping) {
     List<Element> mappingParentElements = mapping.getElementsByName(modelName);
 
@@ -264,4 +291,21 @@ public class ProjectFactory {
     }
     return mappingParentElement;
   }
+
+  private Compartment getCompartmentForConnection(final String modelName, final Model mapping) {
+    List<Element> mappingParentElements = mapping.getElementsByName(modelName);
+
+    Compartment mappingParentElement = null;
+    for (Element mappingElement : mappingParentElements) {
+      if (mappingElement instanceof Compartment) {
+        mappingParentElement = (Compartment) mappingElement;
+      }
+    }
+    if (mappingParentElement == null) {
+      mappingParentElement = new SquareCompartment("ca" + idCounter++);
+      mappingParentElement.setName(modelName);
+      mapping.addElement(mappingParentElement);
+    }
+    return mappingParentElement;
+  }
 }