diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/util/FileUtils.java b/src/data/java/de/tudresden/inf/st/pnml/base/util/FileUtils.java
new file mode 100644
index 0000000000000000000000000000000000000000..3c066b9449d4b8f552e5964d275f1ac765c49c1a
--- /dev/null
+++ b/src/data/java/de/tudresden/inf/st/pnml/base/util/FileUtils.java
@@ -0,0 +1,49 @@
+package de.tudresden.inf.st.pnml.base.util;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.URL;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+public class FileUtils {
+
+    public static File resolveTemplate(String path) {
+        // Get the ClassLoader
+        ClassLoader classLoader = FileUtils.class.getClassLoader();
+
+        // Get the URL to the resource
+        URL resourceURL = classLoader.getResource(path);
+
+        if (resourceURL != null) {
+            try {
+                // If the resource is inside the JAR (URL starts with "jar:file:")
+                if (resourceURL.getProtocol().equals("jar")) {
+                    // If the resource is inside the JAR, copy it to a temporary file
+                    InputStream inputStream = resourceURL.openStream();
+                    Path tempFile = Files.createTempFile("template_", ".pnml");
+                    try (OutputStream outputStream = Files.newOutputStream(tempFile)) {
+                        byte[] buffer = new byte[1024];
+                        int length;
+                        while ((length = inputStream.read(buffer)) > 0) {
+                            outputStream.write(buffer, 0, length);
+                        }
+                    }
+                    return tempFile.toFile(); // Return the temporary File
+
+                } else {
+                    // If the resource is not inside a JAR, it is a regular file on the filesystem
+                    return new File(resourceURL.getFile()); // Return File for IDE usage
+                }
+            } catch (IOException e) {
+                System.out.println("Error reading resource: " + e.getMessage());
+                return null;
+            }
+        } else {
+            System.out.println("Resource not found");
+            return null;
+        }
+    }
+}
diff --git a/src/main/jastadd/base/parsing/PnmlParser.jadd b/src/main/jastadd/base/parsing/PnmlParser.jadd
index affd86fc44ca8e7d311f7600dbdabfaac9a6138e..b122f7f9f88f805564dac705a372933fbee44573 100644
--- a/src/main/jastadd/base/parsing/PnmlParser.jadd
+++ b/src/main/jastadd/base/parsing/PnmlParser.jadd
@@ -1,4 +1,5 @@
 import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
+import de.tudresden.inf.st.pnml.base.util.FileUtils;
 import fr.lip6.move.pnml.framework.hlapi.HLAPIRootClass;
 import fr.lip6.move.pnml.framework.utils.ModelRepository;
 import fr.lip6.move.pnml.framework.utils.PNMLUtils;
@@ -32,20 +33,21 @@ aspect PnmlParser {
             return tempFile;
         }
 
-        public static List<PetriNet> parsePnml(String path, boolean useTemp) {
 
-            Path file = null;
+       public static List<PetriNet> parsePnml(String path, boolean isExternal) {
 
-            if(useTemp){
-                file = toTempPath(path);
-            } else {
-                file = Paths.get(path);
-            }
+           File file = null;
+
+                   if(isExternal){
+                       file = Paths.get(path).toFile();
+                   } else {
+                       file = FileUtils.resolveTemplate(path);
+                   }
 
             HLAPIRootClass document = null;
 
             try {
-                document = PNMLUtils.importPnmlDocument(file.toFile(), false);
+                document = PNMLUtils.importPnmlDocument(file, false);
 
                 //logger.info(document.toPNML());
             } catch (ImportException | InvalidIDException e) {