diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java
index 666db27bc6c1665954510a031f9dcc3b947b207e..9c734eeac9204e140c1c2426a88818c52734f114 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ComplexZipConverter.java
@@ -21,6 +21,7 @@ import org.apache.log4j.Logger;
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
 import lcsb.mapviewer.common.exception.InvalidClassException;
 import lcsb.mapviewer.common.exception.NotImplementedException;
+import lcsb.mapviewer.converter.zip.GlyphZipEntryFile;
 import lcsb.mapviewer.converter.zip.ImageZipEntryFile;
 import lcsb.mapviewer.converter.zip.LayoutZipEntryFile;
 import lcsb.mapviewer.converter.zip.ModelZipEntryFile;
@@ -122,7 +123,8 @@ public class ComplexZipConverter {
             continue;
           } else if (zef instanceof ImageZipEntryFile) {
             continue;
-            // imageEntries.add((ImageZipEntryFile) zef);
+          } else if (zef instanceof GlyphZipEntryFile) {
+            continue;
           } else if (!isIgnoredFile(entry.getName())) {
             throw new NotImplementedException("Unknwon entry type: " + zef.getClass());
           }
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/GlyphParser.java b/converter/src/main/java/lcsb/mapviewer/converter/GlyphParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..1e7d480fbb30366b80e175b335877498737a89ef
--- /dev/null
+++ b/converter/src/main/java/lcsb/mapviewer/converter/GlyphParser.java
@@ -0,0 +1,60 @@
+package lcsb.mapviewer.converter;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.ZipFile;
+
+import org.apache.commons.io.FilenameUtils;
+import org.apache.commons.io.IOUtils;
+import org.apache.log4j.Logger;
+
+import lcsb.mapviewer.converter.zip.GlyphZipEntryFile;
+import lcsb.mapviewer.model.cache.UploadedFileEntry;
+import lcsb.mapviewer.model.map.layout.graphics.Glyph;
+
+/**
+ * Parser used to extract data about {@link Glyph} from zip file.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class GlyphParser {
+
+  /**
+   * Default class logger.
+   */
+  @SuppressWarnings("unused")
+  private final Logger logger = Logger.getLogger(GlyphParser.class);
+
+  /**
+   * Method that parse zip entry and creates a {@link Glyph} from it.
+   *
+   * @param entry
+   *          zip entry to parse
+   * @param zipFile
+   *          original file where zip entry comes from
+   * @throws IOException
+   *           thrown when there is a problem with zip file
+   * @throws InvalidGlyphFile
+   *           thrown when the zip file contains invalid data
+   */
+  public Glyph parseGlyph(GlyphZipEntryFile entry, ZipFile zipFile) throws InvalidGlyphFile, IOException {
+
+    String filename = FilenameUtils.getName(entry.getFilename());
+    if (filename.toLowerCase().endsWith("png")) {
+      InputStream is = zipFile.getInputStream(zipFile.getEntry(entry.getFilename()));
+
+      UploadedFileEntry file = new UploadedFileEntry();
+      file.setFileContent(IOUtils.toByteArray(is));
+      file.setOriginalFileName(entry.getFilename());
+      file.setLength(file.getFileContent().length);
+
+      Glyph result = new Glyph();
+      result.setFile(file);
+      return result;
+    } else {
+      throw new InvalidGlyphFile("Unknown file in overview images zip archive: " + filename);
+    }
+  }
+
+}
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/InvalidGlyphFile.java b/converter/src/main/java/lcsb/mapviewer/converter/InvalidGlyphFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..d126dc1928d658eb11eb0f0f9b24db977b308db1
--- /dev/null
+++ b/converter/src/main/java/lcsb/mapviewer/converter/InvalidGlyphFile.java
@@ -0,0 +1,48 @@
+package lcsb.mapviewer.converter;
+
+/**
+ * Exception thrown when the zip file containing data about
+ * {@link lcsb.mapviewer.model.map.layout.graphics.Glyph} is invalid.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class InvalidGlyphFile extends InvalidInputDataExecption {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Default constructor.
+   * 
+   * @param e
+   *          parent exception (reason)
+   */
+  public InvalidGlyphFile(Exception e) {
+    super(e);
+  }
+
+  /**
+   * Default constructor.
+   * 
+   * @param message
+   *          exception message
+   * @param e
+   *          parent exception (reason)
+   */
+  public InvalidGlyphFile(String message, Exception e) {
+    super(message, e);
+  }
+
+  /**
+   * Default constructor.
+   * 
+   * @param message
+   *          exception message
+   */
+  public InvalidGlyphFile(String message) {
+    super(message);
+  }
+}
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
index 2f193101b48d81abaff73143219f25d078095d64..db770c3ed396b0c615285b1da2d9acbb32ff8e67 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/ProjectFactory.java
@@ -12,6 +12,7 @@ import java.util.zip.ZipFile;
 import org.apache.log4j.Logger;
 
 import lcsb.mapviewer.common.exception.InvalidArgumentException;
+import lcsb.mapviewer.converter.zip.GlyphZipEntryFile;
 import lcsb.mapviewer.converter.zip.ImageZipEntryFile;
 import lcsb.mapviewer.converter.zip.LayoutZipEntryFile;
 import lcsb.mapviewer.converter.zip.ZipEntryFile;
@@ -21,13 +22,15 @@ import lcsb.mapviewer.model.map.model.Model;
 public class ProjectFactory {
 
   /**
-   * Deafult class clogger.
+   * Default class logger.
    */
   @SuppressWarnings("unused")
   private Logger logger = Logger.getLogger(ProjectFactory.class);
 
   private ComplexZipConverter converter;
 
+  private GlyphParser glyphParser = new GlyphParser();
+
   public ProjectFactory(ComplexZipConverter converter) {
     this.converter = converter;
   }
@@ -59,6 +62,8 @@ public class ProjectFactory {
           ZipEntryFile zef = params.getEntry(entry.getName());
           if (zef instanceof ImageZipEntryFile) {
             imageEntries.add((ImageZipEntryFile) zef);
+          } else if (zef instanceof GlyphZipEntryFile) {
+            project.addGlyph(glyphParser.parseGlyph((GlyphZipEntryFile) zef, zipFile));
           } else if (zef instanceof LayoutZipEntryFile) {
             project.addLayout(
                 converter.layoutZipEntryFileToLayout(params, zipFile, entry, (LayoutZipEntryFile) zef, overlayOrder++));
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/zip/GlyphZipEntryFile.java b/converter/src/main/java/lcsb/mapviewer/converter/zip/GlyphZipEntryFile.java
new file mode 100644
index 0000000000000000000000000000000000000000..db9e15362684f386f97fb52b6e103553942a8550
--- /dev/null
+++ b/converter/src/main/java/lcsb/mapviewer/converter/zip/GlyphZipEntryFile.java
@@ -0,0 +1,42 @@
+package lcsb.mapviewer.converter.zip;
+
+import java.io.IOException;
+import java.io.Serializable;
+
+/**
+ * Structure used to describe a file in a zip archive with single entry about
+ * {@link lcsb.mapviewer.model.map.layout.graphics.Glyph}.
+ * 
+ * @author Piotr Gawron
+ * 
+ */
+public class GlyphZipEntryFile extends ZipEntryFile implements Serializable {
+
+  /**
+   * 
+   */
+  private static final long serialVersionUID = 1L;
+
+  /**
+   * Default constructor.
+   */
+  public GlyphZipEntryFile() {
+
+  }
+
+  /**
+   * Default constructor.
+   * 
+   * @param filename
+   *          {@link ZipEntryFile#filename}
+   * @param inputStream
+   *          input stream with the data for this entry.
+   * @see #baos
+   * @throws IOException
+   *           thrown when there is a problem with accessing input stream
+   */
+  public GlyphZipEntryFile(String filename) {
+    super(filename);
+  }
+
+}
diff --git a/converter/src/main/java/lcsb/mapviewer/converter/zip/ZipEntryFileFactory.java b/converter/src/main/java/lcsb/mapviewer/converter/zip/ZipEntryFileFactory.java
index 1dc84388e4fad3310d76380ad253188b7a35d6b7..e647bedc78143a91ec33fa037ad9a6d347a939f5 100644
--- a/converter/src/main/java/lcsb/mapviewer/converter/zip/ZipEntryFileFactory.java
+++ b/converter/src/main/java/lcsb/mapviewer/converter/zip/ZipEntryFileFactory.java
@@ -38,6 +38,13 @@ public class ZipEntryFileFactory {
    */
   private static final String IMAGES_DIRECTORY = "images/";
 
+  /**
+   * Directory in a zip file where information about
+   * {@link lcsb.mapviewer.model.map.layout.graphics.Glyph} is stored. These
+   * entries should be by default transformed into {@link GlyphZipEntryFile}.
+   */
+  private static final String GLYPHS_DIRECTORY = "glyphs/";
+
   /**
    * Directory in a zip file where information about
    * {@link lcsb.mapviewer.model.map.layout.Layout Layout} is stored. These
@@ -128,6 +135,9 @@ public class ZipEntryFileFactory {
       } else if (directory.equals(IMAGES_DIRECTORY)) {
         ImageZipEntryFile result = new ImageZipEntryFile(entry.getName());
         return result;
+      } else if (directory.equals(GLYPHS_DIRECTORY)) {
+        GlyphZipEntryFile result = new GlyphZipEntryFile(entry.getName());
+        return result;
       } else if (directory.equals(LAYOUT_DIRECTORY)) {
         LayoutZipEntryFile result = createLayoutZipEntryFile(entry.getName(), zipFile.getInputStream(entry));
         return result;
diff --git a/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java b/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
index 0ab238b07f5a504fd3c010515e4d3c81c3e55182..9c3be560f4a756a52d4c19ee3defe64e98ab8915 100644
--- a/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
+++ b/converter/src/test/java/lcsb/mapviewer/converter/ProjectFactoryTest.java
@@ -10,12 +10,14 @@ import java.util.List;
 import java.util.zip.ZipEntry;
 import java.util.zip.ZipFile;
 
+import org.apache.log4j.Logger;
 import org.junit.After;
 import org.junit.AfterClass;
 import org.junit.Before;
 import org.junit.Test;
 
 import lcsb.mapviewer.converter.ComplexZipConverterTest.MockConverter;
+import lcsb.mapviewer.converter.zip.ModelZipEntryFile;
 import lcsb.mapviewer.converter.zip.ZipEntryFileFactory;
 import lcsb.mapviewer.model.Project;
 import lcsb.mapviewer.model.map.OverviewImage;
@@ -24,6 +26,7 @@ import lcsb.mapviewer.model.map.OverviewModelLink;
 import lcsb.mapviewer.model.map.model.ModelData;
 
 public class ProjectFactoryTest {
+  Logger logger = Logger.getLogger(ProjectFactoryTest.class);
 
   @AfterClass
   public static void tearDownAfterClass() throws Exception {
@@ -126,4 +129,36 @@ public class ProjectFactoryTest {
 
   }
 
+  @Test
+  public void testParseGlyphs() throws Exception {
+    try {
+      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);
+      assertEquals(1, project.getGlyphs().size());
+      
+    } catch (Exception e) {
+      e.printStackTrace();
+      throw e;
+    }
+
+  }
+
 }
diff --git a/converter/testFiles/complex_with_glyphs.zip b/converter/testFiles/complex_with_glyphs.zip
new file mode 100644
index 0000000000000000000000000000000000000000..05b2874b50ffbc86ff8e0e75bd6cef5d159cd939
Binary files /dev/null and b/converter/testFiles/complex_with_glyphs.zip differ
diff --git a/model/src/main/java/lcsb/mapviewer/model/Project.java b/model/src/main/java/lcsb/mapviewer/model/Project.java
index 25f565fa55e8b13a143955955387bd69ed26beec..9991f192e912a267ff7afef0ccbc75d2676425c8 100644
--- a/model/src/main/java/lcsb/mapviewer/model/Project.java
+++ b/model/src/main/java/lcsb/mapviewer/model/Project.java
@@ -698,4 +698,9 @@ public class Project implements Serializable {
     this.glyphs = glyphs;
   }
 
+  public void addGlyph(Glyph parseGlyph) {
+    this.glyphs.add(parseGlyph);
+    parseGlyph.setProject(this);
+  }
+
 }
diff --git a/model/src/main/java/lcsb/mapviewer/model/cache/UploadedFileEntry.java b/model/src/main/java/lcsb/mapviewer/model/cache/UploadedFileEntry.java
index 05d024494f892c4c9d67b243dc6ea24e81723ea9..6d36a152d0a7a48bb641207a011ae7ed956e87bb 100644
--- a/model/src/main/java/lcsb/mapviewer/model/cache/UploadedFileEntry.java
+++ b/model/src/main/java/lcsb/mapviewer/model/cache/UploadedFileEntry.java
@@ -43,7 +43,7 @@ public class UploadedFileEntry extends FileEntry implements Serializable {
    * Constructor that copies data from the parameter.
    * 
    * @param original
-   *          original object from which data will bbe copied
+   *          original object from which data will be copied
    */
   public UploadedFileEntry(UploadedFileEntry original) {
     super(original);