diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java
index ade36b3c2f271768bfa1c29c42848417126fb0f9..d827598b6f85a65ce3d7db04ea2a943a5a388f99 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipArchive.java
@@ -12,7 +12,6 @@ import java.util.ArrayList;
 import java.util.List;
 
 import java.util.zip.ZipEntry;
-import java.util.zip.ZipException;
 import java.util.zip.ZipFile;
 import java.util.zip.ZipInputStream;
 
@@ -25,36 +24,14 @@ public class CityGmlZipArchive implements Serializable {
 
     private List<CityGmlZipEntry> entries;
     private final Path archivePath;
+    private final String archiveNameRE;
     private ZipFile zipFile;
 
     public static CityGmlZipArchive fromZipFile(String zipFile, ParserConfiguration config) {
-        ArrayList<CityGmlZipEntry> archiveEntries = new ArrayList<>();
-        ZipFile zip = null;
-        try (ZipInputStream zis = new ZipInputStream(new FileInputStream(zipFile))) {
-            zip = new ZipFile(zipFile);
-            ZipEntry ze;
-            while ((ze = zis.getNextEntry()) != null )
-            {
-                if (ze.isDirectory()) {
-                    continue;
-                }
-                if (ze.getName().endsWith(".gml")) {
-                    archiveEntries.add(CityGmlZipEntry.of(ze, config));
-                }
-            }
-        } catch (IOException e) {
-            logger.error(e);
-        } finally {
-            if(zip != null){
-                try {
-                    zip.close();
-                } catch (IOException e) {
-                    logger.error(e);
-                }
-            }
-        }
-        logger.info("Zip-archive successfully uncompressed, {} CityGml files detected", archiveEntries.size());
-        return new CityGmlZipArchive(archiveEntries, Path.of(zipFile));
+        CityGmlZipArchive archive = CityGmlZipArchive.register(zipFile);
+        archive.mountArchive(config);
+        logger.info("Zip-archive successfully uncompressed, {} CityGml files detected", archive.getEntries().size());
+        return archive;
     }
 
     public static CityGmlZipArchive register(String zipFile) {
@@ -68,7 +45,7 @@ public class CityGmlZipArchive implements Serializable {
                     continue;
                 }
                 if (ze.getName().endsWith(".gml")) {
-                    archiveEntries.add(CityGmlZipEntry.register(ze));
+                    archiveEntries.add(CityGmlZipEntry.register(ze, cgmlArchive));
                 }
             }
             cgmlArchive.setEntries(archiveEntries);
@@ -93,11 +70,7 @@ public class CityGmlZipArchive implements Serializable {
 
     private CityGmlZipArchive(Path archivePath){
         this.archivePath = archivePath;
-    }
-
-    private CityGmlZipArchive(List<CityGmlZipEntry> entries, Path archivePath) {
-        setEntries(entries);
-        this.archivePath = archivePath;
+        this.archiveNameRE = archivePath.getFileName().toString().replace(".zip","") + File.separator;
     }
 
     private void setEntries(List<CityGmlZipEntry> entries) {
@@ -111,14 +84,20 @@ public class CityGmlZipArchive implements Serializable {
 
 
     public CityGmlZipEntry getEntry(String fileName) {
+        fileName = stripArchivePath(fileName);
         for(CityGmlZipEntry entry : entries){
-            if(entry.getFileName().equals(fileName)){
+            String entryName = stripArchivePath(entry.getFileName());
+            if(entryName.equals(fileName)){
                 return entry;
             }
         }
         return null;
     }
 
+    private String stripArchivePath(String path) {
+        Path systemPath = Path.of(path);
+        return systemPath.toString().replace(archiveNameRE, "");
+    }
 
     public Path getArchivePath() {
         return archivePath;
diff --git a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java
index 78ea6ee7fc764e44b0fa2e5fe56654608effd968..487064e1a9cbf1175fa873266f2f93c97e93a488 100644
--- a/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java
+++ b/CityDoctorParent/CityDoctorModel/src/main/java/de/hft/stuttgart/citydoctor2/zip/CityGmlZipEntry.java
@@ -27,8 +27,8 @@ public class CityGmlZipEntry {
     private static final long MB = 1024 * 1024L;
     private ZipEntryErrorType errorType = null;
 
-    public static CityGmlZipEntry of(ZipEntry entry, ParserConfiguration config){
-        CityGmlZipEntry ze = CityGmlZipEntry.register(entry);
+    public static CityGmlZipEntry of(ZipEntry entry,CityGmlZipArchive parentArchive, ParserConfiguration config){
+        CityGmlZipEntry ze = CityGmlZipEntry.register(entry, parentArchive);
         ze.loadEntry(config);
         return ze;
     }
@@ -53,8 +53,8 @@ public class CityGmlZipEntry {
         }
     }
 
-    public static CityGmlZipEntry register(ZipEntry entry){
-        CityGmlZipEntry cgzEntry = new CityGmlZipEntry(entry, false);
+    public static CityGmlZipEntry register(ZipEntry entry, CityGmlZipArchive parentArchive){
+        CityGmlZipEntry cgzEntry = new CityGmlZipEntry(entry, parentArchive,false);
         try{
             if (!cgzEntry.entrySizeWithinMemoryLimits()) {
                 cgzEntry.errorType = ZipEntryErrorType.EXCESSIVE_FILESIZE;
@@ -85,10 +85,11 @@ public class CityGmlZipEntry {
 
     }
 
-    protected CityGmlZipEntry(ZipEntry entry, boolean decompressed) {
+    protected CityGmlZipEntry(ZipEntry entry,CityGmlZipArchive parentArchive, boolean decompressed) {
         this.fileName = entry.getName();
         this.model = null;
         this.decompressed = decompressed;
+        this.parentArchive = parentArchive;
     }
 
     protected CityGmlZipEntry(String fileName, boolean decompressed) {