diff --git a/CHANGELOG b/CHANGELOG
index 484adae3d314d425d238eab492a1e117ef809120..d91c26390c51dc06c695ef7daedbe17ae8faef60 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -28,6 +28,7 @@ minerva (12.3.1~beta.1) unstable; urgency=low
     close button twice (#818)
   * Bug fix: empty type for data overlay is allowed (#827)
   * Bug fix: genetic variants data overlay was ignoring color parameter (#827)
+  * Bug fix: pathways can be drawn using glyphs (#825)
 
 minerva (13.1.0~beta.0) unstable; urgency=low
   * Feature: annotators are more flexible - you can define set of input and
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
index dd5c55cbb876971cc8aaaa549b1ec06fc8b8a994..3b576a5fb26bd26c202a27d11fa76d61bf5b36c5 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
@@ -18,8 +18,11 @@ import lcsb.mapviewer.converter.zip.LayoutZipEntryFile;
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.layout.graphics.Glyph;
+import lcsb.mapviewer.model.map.layout.graphics.Layer;
+import lcsb.mapviewer.model.map.layout.graphics.LayerText;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelData;
+import lcsb.mapviewer.model.map.model.ModelSubmodelConnection;
 import lcsb.mapviewer.model.map.species.Element;
 
 public class ProjectFactory {
@@ -90,7 +93,15 @@ public class ProjectFactory {
   }
 
   private void assignGlyphsToElements(Project project) throws InvalidGlyphFile {
+    Set<ModelData> models = new HashSet<>();
+    models.addAll(project.getModels());
+
     for (ModelData model : project.getModels()) {
+      for (ModelSubmodelConnection connection : model.getSubmodels()) {
+        models.add(connection.getSubmodel());
+      }
+    }
+    for (ModelData model : models) {
       for (Element element : model.getElements()) {
         Glyph glyph = extractGlyph(project, element.getNotes());
         if (glyph != null) {
@@ -98,6 +109,15 @@ public class ProjectFactory {
           element.setGlyph(glyph);
         }
       }
+      for (Layer layer : model.getLayers()) {
+        for (LayerText text : layer.getTexts()) {
+          Glyph glyph = extractGlyph(project, text.getNotes());
+          if (glyph != null) {
+            text.setNotes(removeGlyph(text.getNotes()));
+            text.setGlyph(glyph);
+          }
+        }
+      }
     }
   }
 
diff --git a/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java b/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
index ad6b5dc3975aaf8450acb93b7ccd67448f401424..b882d44aa69ec3526b4622d3ed11d5e0c2d0aed1 100644
--- a/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
+++ b/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
@@ -23,6 +23,8 @@ import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.OverviewImage;
 import lcsb.mapviewer.model.map.OverviewLink;
 import lcsb.mapviewer.model.map.OverviewModelLink;
+import lcsb.mapviewer.model.map.layout.graphics.Layer;
+import lcsb.mapviewer.model.map.layout.graphics.LayerText;
 import lcsb.mapviewer.model.map.model.Model;
 import lcsb.mapviewer.model.map.model.ModelData;
 import lcsb.mapviewer.model.map.model.ModelFullIndexed;
@@ -211,6 +213,53 @@ public class ProjectFactoryTest extends ConverterTestFunctions {
 
   }
 
+  @Test
+  public void testParseGlyphsAndPutThemAsTextGlyphs() throws Exception {
+    try {
+      Model model = new ModelFullIndexed(null);
+      Layer layer = new Layer();
+      
+      LayerText text = new LayerText();
+      text.setNotes("Glyph: glyphs/g1.png");
+      layer.addLayerText(text);
+      model.addLayer(layer);
+
+      MockConverter.modelToBeReturned = model;
+
+      ComplexZipConverter converter = new ComplexZipConverter(MockConverter.class);
+      ProjectFactory projectFactory = new ProjectFactory(converter);
+
+      ComplexZipConverterParams params = new ComplexZipConverterParams();
+      params.zipFile(new ZipFile("testFiles/complex_with_glyphs.zip"));
+      params.entry(new ModelZipEntryFile("main.xml", "main", true, false, null));
+
+      ZipFile zipFile = new ZipFile("testFiles/complex_with_glyphs.zip");
+
+      ZipEntryFileFactory factory = new ZipEntryFileFactory();
+      Enumeration<? extends ZipEntry> entries = zipFile.entries();
+      while (entries.hasMoreElements()) {
+        ZipEntry entry = entries.nextElement();
+        if (!entry.isDirectory()) {
+          params.entry(factory.createZipEntryFile(entry, zipFile));
+        }
+      }
+
+      Project project = projectFactory.create(params);
+      assertNotNull(project);
+      model = project.getModels().iterator().next().getModel();
+
+      LayerText fetchedProtein = model.getLayers().iterator().next().getTexts().get(0);
+
+      assertFalse("Glyph field should be removed from notes", fetchedProtein.getNotes().contains("Glyph"));
+      assertNotNull("Glyph in the protein is not defined but should", fetchedProtein.getGlyph());
+
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
   private GenericProtein createProtein() {
     GenericProtein result = new GenericProtein("s" + elementCounter++);
     return result;
diff --git a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
index adb5061425f39f5a07d72c0728ee30ace2141be7..294b1fb29c9ad079e24c2c14c34d530dea33d5ed 100644
--- a/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
+++ b/model-command/src/main/java/lcsb/mapviewer/commands/CreateHierarchyCommand.java
@@ -43,11 +43,11 @@ public class CreateHierarchyCommand extends ModelCommand {
   private static final double LOG_4 = Math.log(4);
 
   /**
-   * Top left corner x coordinate of the text associated with compratment.
+   * Top left corner x coordinate of the text associated with compartment.
    */
   private static final double DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT = 10;
   /**
-   * Top left corner y coordinate of the text associated with compratment.
+   * Top left corner y coordinate of the text associated with compartment.
    */
   private static final double DEFAULT_TITLE_Y_COORD_IN_ARTIFITIAL_COMPARTMENT = 10;
 
@@ -180,6 +180,7 @@ public class CreateHierarchyCommand extends ModelCommand {
         compartment.setName(extractNameFromText(text.getNotes()));
         compartment.setNotes(extractNotesFromText(text.getNotes()));
         compartment.setZ(text.getZ());
+        compartment.setGlyph(text.getGlyph());
         rap.processNotes(compartment);
 
         compartment.setNamePoint(new Point2D.Double(text.getX() + DEFAULT_TITLE_X_COORD_IN_ARTIFITIAL_COMPARTMENT,
diff --git a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java
index d866c3e6e1d2d300460fa81aa696a47a8415be1a..ecd49c6f8b656d96f9d6c0decd51861a4209d25b 100644
--- a/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java
+++ b/model/src/main/java/lcsb/mapviewer/model/map/layout/graphics/LayerText.java
@@ -5,9 +5,11 @@ import java.awt.geom.Rectangle2D;
 import java.io.Serializable;
 
 import javax.persistence.Entity;
+import javax.persistence.FetchType;
 import javax.persistence.GeneratedValue;
 import javax.persistence.GenerationType;
 import javax.persistence.Id;
+import javax.persistence.ManyToOne;
 
 import org.apache.log4j.Logger;
 
@@ -92,6 +94,12 @@ public class LayerText implements Serializable, Drawable {
    */
   private Double fontSize = DEFAULT_LAYER_FONT_SIZE;
 
+  /**
+   * Glyph used for drawing (instead of text).
+   */
+  @ManyToOne(fetch = FetchType.LAZY)
+  private Glyph glyph = null;
+
   /**
    * Default constructor.
    */
@@ -130,6 +138,9 @@ public class LayerText implements Serializable, Drawable {
     height = layerText.getHeight();
     notes = layerText.getNotes();
     fontSize = layerText.getFontSize();
+    if (layerText.getGlyph() != null) {
+      setGlyph(new Glyph(layerText.getGlyph()));
+    }
   }
 
   /**
@@ -377,4 +388,12 @@ public class LayerText implements Serializable, Drawable {
     return "x=" + x + ";y=" + y + "; w=" + width + ", h=" + height;
   }
 
+  public Glyph getGlyph() {
+    return glyph;
+  }
+
+  public void setGlyph(Glyph glyph) {
+    this.glyph = glyph;
+  }
+
 }
diff --git a/persist/src/main/resources/db/migration/13.1.0~beta.1/V13.1.0.20190607__text_contains_glyph.sql b/persist/src/main/resources/db/migration/13.1.0~beta.1/V13.1.0.20190607__text_contains_glyph.sql
new file mode 100644
index 0000000000000000000000000000000000000000..8c1f1ac837d55e41bb92f36d8b072bc82d18f449
--- /dev/null
+++ b/persist/src/main/resources/db/migration/13.1.0~beta.1/V13.1.0.20190607__text_contains_glyph.sql
@@ -0,0 +1,5 @@
+alter table layer_text_table add column glyph_id integer;
+alter table layer_text_table add constraint layer_text_table_glyph_fk FOREIGN KEY (glyph_id)
+      REFERENCES glyph_table (id) MATCH SIMPLE
+      ON UPDATE NO ACTION ON DELETE NO ACTION;
+