diff --git a/build.gradle b/build.gradle
index 2592345920de6fe207c172efaf8aa9569b1212ab..950173187dc1a7f0f6a8fcc9094fbd1d750afa95 100644
--- a/build.gradle
+++ b/build.gradle
@@ -7,7 +7,7 @@ buildscript {
 }
 
 group 'de.tudresden.inf.st'
-version '0.3'
+version '0.4'
 
 apply plugin: 'java'
 apply plugin: 'java-library'
@@ -44,9 +44,6 @@ configurations {
 }
 
 dependencies {
-
-//    implementation project(':pnml-relast-base')
-
     implementation group: 'com.fasterxml.jackson.core', name: 'jackson-databind', version: "${jackson_version}"
     implementation group: 'net.sf.beaver', name: 'beaver-rt', version: '0.9.11'
     implementation group: 'org.slf4j', name: 'slf4j-api', version: '1.7.30'
@@ -67,7 +64,7 @@ dependencies {
     // https://mvnrepository.com/artifact/xalan/xalan
     implementation group: 'xalan', name: 'xalan', version: '2.7.2'
 
-    compile group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
+    implementation group: 'org.apache.commons', name: 'commons-lang3', version: '3.0'
     implementation group: 'org.apache.commons', name: 'commons-collections4', version: '4.4'
 
     jastadd2 "org.jastadd:jastadd:2.3.4"
@@ -96,8 +93,31 @@ jar {
 
     duplicatesStrategy = DuplicatesStrategy.EXCLUDE
 
-    archiveBaseName = 'pnml-splitter'
+    archiveBaseName = 'pnml-relast-splitter'
+
+}
+
+task fatJar(type: Jar) {
+    group = "build"
+    archiveAppendix = "fatjar"
+
+    // Include the compiled output and runtime dependencies
+    from sourceSets.main.output
+    from sourceSets.main.allSource
+    from {
+        configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) }
+    }
+
+    // Ensure the correct Main-Class is specified
+    manifest {
+        attributes "Main-Class": "de.tudresden.inf.st.pnml.splitter.Main"
+    }
+
+    // Exclude unnecessary files
+    exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
+    duplicatesStrategy = DuplicatesStrategy.EXCLUDE
 
+    archiveBaseName = 'pnml-relast-splitter'
 }
 
 // Generated files
diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java
index 04014571dc6c0d0cf4bbc4eb9812f2b43fdacf8d..e63c6afb1a829630afd9ffd36fc2ffecc4005957 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/Main.java
@@ -8,24 +8,48 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 public class Main {
 
     private static final Logger logger = LoggerFactory.getLogger(Main.class);
 
-    public static void main(String[] args) {
+    // Utility to extract argument value by flag
+    private static String getArgumentValue(String[] args, String flag, String defaultValue) {
+        for (int i = 0; i < args.length; i++) {
+            if (args[i].equals(flag) && i + 1 < args.length) {
+                return args[i + 1];
+            }
+        }
+        return defaultValue;
+    }
+
+    // Print help/usage instructions
+    private static void printUsage() {
+        System.out.println("Options:");
+        System.out.println("  --pnml <path>                     Path to the PNML file (required)");
+        System.out.println("  --help                            Show this help message and exit");
+    }
 
-        String inputPath = (args.length > 0) ? args[0] : null;
-        //String inputPath = "/home/sebastian/git/dineros-public/dineros/" +
-        //        "journal-paper-evaluation/full/model-v4/sorting-wf-synced-safe-sensor-grpn-sig.pnml";
+    public static void main(String[] args) {
 
-        if (inputPath == null) {
-            logger.error("No model found on given input path.");
+        if (args.length == 0 || Arrays.asList(args).contains("--help")) {
+            printUsage();
             return;
         }
 
-        List<PetriNet> petriNets = PnmlParser.parsePnml(inputPath, false);
+        // String configPath = getArgumentValue(args, "--config", null);
+        String pnmlPath = getArgumentValue(args, "--pnml", null);
+
+        // Validate required arguments
+        if (pnmlPath == null) {
+            System.err.println("Error: --pnml <path> is required.");
+            printUsage();
+            System.exit(1);
+        }
+
+        List<PetriNet> petriNets = PnmlParser.parsePnml(pnmlPath, true);
         JastAddList<ToolInfo> ti = petriNets.get(0).getToolspecificList().treeCopy();
 
         List<List<PetriNet>> disconnectedPetriNets = new ArrayList<>();
diff --git a/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java b/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java
index a9241f8105cb91e653896add9dcbac851b1f0dfb..e587c7cff69aa524be2447700df6d180c89bb6c0 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/splitter/postprocessing/GlobalToLocalNetsPostProcessor.java
@@ -60,7 +60,8 @@ public class GlobalToLocalNetsPostProcessor implements PostProcessor<PetriNet> {
             for (String location : locations) {
 
                 System.out.println("Creating deep copy for: " + location);
-                List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath, false);
+                List<PetriNet> reParsedPetriNets = PnmlParser.parsePnml(serializedNetPath, true);
+
                 for (PetriNet pn : reParsedPetriNets) {
                     PetriNet separatedNet = createdSeparatedNetByNode(pn, location);
                     separatedNet.setId(separatedNet.getType() + "-" + netSuffix);