diff --git a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
index 7cc62bc5e6125459e6d9c97f8e2b0f24bbe5f835..67875efd72691e9cb8a1afddf6cee1c52b8529be 100644
--- a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
+++ b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlArchive.java
@@ -42,13 +42,13 @@ public class CityGmlArchive {
                 }
                 if (entry.getName().endsWith(".gml")) {
                     InputStream is = zipFileObj.getInputStream(entry);
-                    Files.copy(is, Path.of( tmpDir.toString(),entry.getName()));
-                    archiveEntries.add(CityGmlZipEntry.of(entry, config, zipFile, tmpDir));
+                    archiveEntries.add(CityGmlZipEntry.of(entry, config, zipFile, tmpDir, is));
                 }
             }
         } catch (IOException e) {
             throw new RuntimeException(e);
         } catch (Exception e){
+            // Catch and rethrow Exception to ensure tmpDir deletion
             throw e;
         } finally {
             if (tmpDir != null) {
diff --git a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
index 2323ff0c730e7a8b592eac463d53f418ff9f0d68..fa8d7db2a5c9e5821b8906d5483b4d9e12d719f8 100644
--- a/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
+++ b/CityDoctorParent/Extensions/CityDoctorZipLoader/src/main/java/de/hft/stuttgart/citydoctor2/ziploader/CityGmlZipEntry.java
@@ -10,15 +10,20 @@ import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
 import java.io.IOException;
+import java.io.InputStream;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
+import java.util.Enumeration;
 import java.util.zip.ZipEntry;
 
 public class CityGmlZipEntry {
 
     private static final Logger logger = LogManager.getLogger(CityGmlZipEntry.class);
 
+    public enum ZipEntryErrorType {
+        INVALID_CITY_GML_FILE, EXCESSIVE_FILESIZE, IO_ERROR
+    }
 
     private String fileName;
     private String archivePath;
@@ -27,18 +32,29 @@ public class CityGmlZipEntry {
     private boolean erroneousEntry = false;
     private boolean isLibraryObject = false;
     private boolean validated = false;
+    private ZipEntryErrorType errorType = null;
 
-    public static CityGmlZipEntry of(ZipEntry entry, ParserConfiguration config, String archivePath, Path tempDir){
+    public static CityGmlZipEntry of(ZipEntry entry, ParserConfiguration config, String archivePath, Path tempDir, InputStream is){
         CityGmlZipEntry cgzEntry = new CityGmlZipEntry();
         cgzEntry.fileName = entry.getName();
         cgzEntry.archivePath = archivePath;
-        try {
-            CityGmlParser.gagLogger(true);
-            cgzEntry.model = CityGmlParser.parseCityGmlFile(tempDir.toString() +"\\" +entry.getName(), config);
-        }
-        catch (CityGmlParseException | InvalidGmlFileException e) {
-            logger.error(e);
+        if ((double) entry.getSize() /1024/1024 > 20) {
             cgzEntry.erroneousEntry = true;
+            cgzEntry.errorType = ZipEntryErrorType.EXCESSIVE_FILESIZE;
+        } else {
+            try {
+                Files.copy(is, Path.of(tempDir.toString(), entry.getName()));
+                CityGmlParser.gagLogger(true);
+                cgzEntry.model = CityGmlParser.parseCityGmlFile(tempDir.toString() + "\\" + entry.getName(), config);
+            } catch (CityGmlParseException | InvalidGmlFileException e) {
+                logger.error(e);
+                cgzEntry.erroneousEntry = true;
+                cgzEntry.errorType = ZipEntryErrorType.INVALID_CITY_GML_FILE;
+            } catch (IOException e){
+                logger.error(e);
+                cgzEntry.erroneousEntry = true;
+                cgzEntry.errorType = ZipEntryErrorType.IO_ERROR;
+            }
         }
         return cgzEntry;
     }
@@ -72,6 +88,10 @@ public class CityGmlZipEntry {
         return model;
     }
 
+    public ZipEntryErrorType getErrorType() {
+        return errorType;
+    }
+
     public boolean isLibraryObject() {
         return isLibraryObject;
     }