diff --git a/src/main/jastadd/gen/Package.relast b/src/main/jastadd/gen/Package.relast
index 824b85cf43ef192b6d9986bf86a71010cf7bc387..ea32545781a9288dca92f444503c39c64dcd01c7 100644
--- a/src/main/jastadd/gen/Package.relast
+++ b/src/main/jastadd/gen/Package.relast
@@ -4,7 +4,7 @@ abstract PackageElement;
 
 abstract PackageFile:PackageElement ::= <Name:String> <FileID:String> ;
 StaticFile:PackageFile ;
-PnmlFile:StaticFile;
+PnmlFile:StaticFile ::= <SourceName:String> <SourcePath:String>;
 
 abstract TemplateFile:PackageFile ::= <FileContent:String> ;
 GradleFile:TemplateFile ;
diff --git a/src/main/jastadd/gen/PackageNav.jadd b/src/main/jastadd/gen/PackageNav.jadd
index 7df5ef1b52b75237474e8e6fb2ba5aa414d0b30d..9400423ebc9cb16ce747c35d00cf89a64345e754 100644
--- a/src/main/jastadd/gen/PackageNav.jadd
+++ b/src/main/jastadd/gen/PackageNav.jadd
@@ -14,6 +14,9 @@ aspect PackageNav {
         syn boolean PackageFile.isPnmlFile() = false;
         eq PnmlFile.isPnmlFile() = true;
 
+        syn boolean PackageFile.isJavaFile() = false;
+        eq JavaFile.isJavaFile() = true;
+
         syn boolean PackageFile.isTemplateFile() = false;
         eq TemplateFile.isTemplateFile() = true;
 
@@ -26,6 +29,8 @@ aspect PackageNav {
         syn NodeFile PackageFile.asNodeFile() = null;
         eq NodeFile.asNodeFile() = this;
 
+        syn PnmlFile PackageFile.asPnmlFile() = null;
+        eq PnmlFile.asPnmlFile() = this;
 
         syn boolean PackageFile.isSubscriberFile() = false;
         eq SubscriberFile.isSubscriberFile() = true;
diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java b/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java
index 5e656bf78745dafcdf23de92ad7073922fdc0ba9..9b2b613a03e446c006db77a892f2ff9789959433 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/gen/Main.java
@@ -38,8 +38,8 @@ public class Main {
         // ObjectMapper gcObjectMapper = new ObjectMapper();
         // GeneratorConfig config = gcObjectMapper.readValue(Files.readString(Paths.get(args[1])), new TypeReference<List<NetInfo>>(){});
 
-        GeneratorConfig gc = new GeneratorConfig("sample", "sample-pkg","/home/sebastian/Desktop/Token.java",
-                "sample","0.1","/home/sebastian/Desktop/EngineConfig.json","localhost",
+        GeneratorConfig gc = new GeneratorConfig("sample", "sample-pkg","/home/sebastian/git/dineros/pnml-relast-tools/pnml-relast-pkg-gen/src/test/java/Token.java",
+                "sample","0.1","/home/sebastian/git/dineros/pnml-relast-tools/pnml-relast-pkg-gen/src/test/resources/EngineConfig.json","localhost",
                 "http://localhost:11311","localhost","/home/sebastian/Desktop");
 
         DinerosPackage dp = new DinerosPackage();
diff --git a/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java b/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java
index db32ef467bd5020770e82eec4aefbe080181786c..f531a68a68b1fed0fd8b93d5d69eaed4547eecf9 100644
--- a/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java
+++ b/src/main/java/de/tudresden/inf/st/pnml/gen/builders/PackageStructureBuilder.java
@@ -19,7 +19,7 @@ public class PackageStructureBuilder {
     public static boolean build(String targetPath, DinerosPackage dinerosPackage, List<NetInfo> petriNetFilePaths, String engineVersion
                                , String rosHost, String rosMasterUri, String mqttHost) {
 
-        String packagePath = targetPath + "/" + dinerosPackage.getRootName();
+        String packagePath = targetPath; // + "/" + dinerosPackage.getRootName();
 
         List<PetriNet> nets = new ArrayList<>();
 
@@ -37,19 +37,21 @@ public class PackageStructureBuilder {
             Files.createDirectories(Paths.get(packagePath));
 
             buildDinerosPackageStructure(dinerosPackage.getRootName(), dinerosPackage.getNamespace(), dinerosPackage);
-            buildDinerosGeneratedFilesStructure(dinerosPackage, nets);
+            buildDinerosGeneratedFilesStructure(dinerosPackage, nets, petriNetFilePaths);
             buildStaticFilesIntoDinerosPackage(dinerosPackage, engineVersion);
 
             includeDirectoriesRecursive(dinerosPackage.getDir(0), packagePath);
             includeTemplateFiles(dinerosPackage, nets, engineVersion, stringNetPaths, rosHost, rosMasterUri, mqttHost);
             includeFilesInPackageRecursive(dinerosPackage.getDir(0), packagePath);
-            includePnmlFiles(dinerosPackage, petriNetFilePaths, packagePath);
-            includeTokenClass(dinerosPackage, packagePath);
+       //     includePnmlFiles(dinerosPackage, petriNetFilePaths, packagePath);
+            includeTokenClass(dinerosPackage, packagePath); // TODO fix
 
             insertStringsAsFilesRecursive(dinerosPackage.getDir(0), packagePath);
 
         } catch (IOException e) {
-            System.out.println(e.getMessage() + " caused by: " + e.getCause());
+            System.err.println(e.getLocalizedMessage() + " caused by: " + e.getCause());
+            e.printStackTrace();
+
             return false;
         }
 
@@ -64,7 +66,13 @@ public class PackageStructureBuilder {
 
         for (PackageFile pf : packageDirectory.getFileList()){
             if(pf.isTemplateFile()) {
-                writeToFile(packagePath + "/" + pf.getName(), pf.asTemplateFile().getFileContent());
+                System.out.println("Writing file " + pf.getName() +  " to: " + packagePath + "/" + packageDirectory.getName() + "/" + pf.getName());
+
+                if(pf.isJavaFile()){
+                    writeToFile(packagePath + "/" + packageDirectory.getName() + "/" + pf.getName() + ".java", pf.asTemplateFile().getFileContent());
+                }else {
+                    writeToFile(packagePath + "/" + packageDirectory.getName() + "/" + pf.getName(), pf.asTemplateFile().getFileContent());
+                }
             }
         }
 
@@ -79,7 +87,8 @@ public class PackageStructureBuilder {
             writer.write(content);
         }
         catch (IOException ex) {
-            System.out.println("ERROR: " + ex.getMessage());
+            System.err.println("ERROR: " + ex.getMessage());
+            ex.printStackTrace();
         }
     }
 
@@ -87,7 +96,7 @@ public class PackageStructureBuilder {
     // TREE GEN /////////////////////////
     /////////////////////////////////////
 
-    private static void buildDinerosGeneratedFilesStructure(DinerosPackage dinerosPackage, List<PetriNet> nets) {
+    private static void buildDinerosGeneratedFilesStructure(DinerosPackage dinerosPackage, List<PetriNet> nets, List<NetInfo> petriNetFilePaths) {
 
         GradleFile buildGradle = new GradleFile();
         buildGradle.setName("build.gradle");
@@ -111,7 +120,7 @@ public class PackageStructureBuilder {
                 for (int i = 0; i < nets.size(); i++) {
                     NodeFile nodeFile = new NodeFile();
                     nodeFile.setName("Node" + i);
-                    nodeFile.setFileID(UUID.randomUUID().toString());
+                    nodeFile.setFileID("Node-" + String.valueOf(i));
                     pd.addFile(nodeFile);
                 }
             }
@@ -147,14 +156,14 @@ public class PackageStructureBuilder {
 
             if (pd.getName().equals("callback")) {
                 MapperFile callbackMapper = new MapperFile();
-                callbackMapper.setName("CallbackMapper.java");
+                callbackMapper.setName("CallbackMapper");
                 callbackMapper.setFileID(UUID.randomUUID().toString());
                 pd.addFile(callbackMapper);
             }
 
             if (pd.getName().equals("balloon")) {
                 TokenFile tokenFile = new TokenFile();
-                tokenFile.setName("Token.java");
+                tokenFile.setName("Token");
                 tokenFile.setFileID(UUID.randomUUID().toString());
                 pd.addFile(tokenFile);
             }
@@ -164,6 +173,9 @@ public class PackageStructureBuilder {
                     PnmlFile pnmlFile = new PnmlFile();
                     pnmlFile.setName("PetriNet-" + i + ".pnml");
                     pnmlFile.setFileID(UUID.randomUUID().toString());
+                    pnmlFile.setSourcePath(petriNetFilePaths.get(i).net);
+                    String[] splitSourcePath = petriNetFilePaths.get(i).net.split("/");
+                    pnmlFile.setSourceName(splitSourcePath[splitSourcePath.length - 1]);
                     pd.addFile(pnmlFile);
                 }
             }
@@ -310,14 +322,15 @@ public class PackageStructureBuilder {
             if(pf.isTokenFile()){
                 String tokenClass = dinerosPackage.generateTokenClass();
 
-                try (Writer writer = new BufferedWriter(new OutputStreamWriter(
-                        new FileOutputStream(packagePath + "/src/main/java/tudresden/inf/st/pnml/" +
-                                dinerosPackage.getNamespace()), StandardCharsets.UTF_8))) {
+            /*    try (Writer writer = new BufferedWriter(new OutputStreamWriter(
+                        new FileOutputStream(packagePath + "/" +  dinerosPackage.getRootName() +  "/src/main/java/tudresden/inf/st/" +
+                                dinerosPackage.getNamespace() + "/Token.java"), StandardCharsets.UTF_8))) {
                     writer.write(tokenClass);
                 }
                 catch (IOException ex) {
-                    System.out.println("ERROR: " + ex.getMessage());
-                }
+                    System.err.println("ERROR: " + ex.getMessage());
+                    ex.printStackTrace();
+                }*/
             }
         }
     }
@@ -333,6 +346,7 @@ public class PackageStructureBuilder {
                     pf.setName("PetriNet-" + i + ".pnml");
                     Path copied = Paths.get(packagePath + "/src/main/resources/nets/" + pf.getName());
                     Path originalPath = Paths.get(netPaths.get(i).net);
+                    System.out.println("Before Copy PNML:" + originalPath + " --> " + copied);
                     Files.copy(originalPath, copied, StandardCopyOption.REPLACE_EXISTING);
                     System.out.println("Copy PNML:" + originalPath + " --> " + copied);
                 }
@@ -360,14 +374,18 @@ public class PackageStructureBuilder {
         for (int i = 0; i < nets.size(); i++) {
             for (PackageFile pf : dinerosPackage.allPackageFiles()) {
 
-                if (!visitedPackageFileIDs.contains(pf.getFileID())) {
-                    visitedPackageFileIDs.add(pf.getFileID());
+                String[] splitNodeFileId = pf.getFileID().split("-");
+                if (pf.isNodeFile() && i == Integer.valueOf(splitNodeFileId[1])) {
+                    pf.setName("Node" + splitNodeFileId[1]);
+                    pf.asNodeFile().generate();
+                    break;
+                }
+            }
 
-                    if (pf.isNodeFile()) {
-                        pf.setName("Node" + i);
-                        pf.asNodeFile().generate();
-                    }
+            for (PackageFile pf : dinerosPackage.allPackageFiles()) {
 
+                if (!visitedPackageFileIDs.contains(pf.getFileID())) {
+                    visitedPackageFileIDs.add(pf.getFileID());
                     if (pf.isSubscriberFile()) {
 
                         for (Transition t : nets.get(i).allTransitions()) {
@@ -464,13 +482,22 @@ public class PackageStructureBuilder {
 
         if (packageDirectory.getNumFile() > 0) {
             for (PackageFile pf : packageDirectory.getFileList()) {
-                if (pf.isStaticFile()) {
+                if (pf.isStaticFile() && !pf.isTokenFile()) {
+
+                    Path copied;
+
+                    if(pf.isPnmlFile()){
+                        copied = Paths.get(packagePath + "/" + packageDirectory.getName() + "/" + pf.asPnmlFile().getSourceName());
+                    }else {
+                        copied = Paths.get(packagePath + "/" + packageDirectory.getName() + "/" + pf.getName());
+                    }
 
-                    Path copied = Paths.get(packagePath + "/" + packageDirectory.getName() + "/" + pf.getName());
                     Path originalPath;
 
                     if (pf.getName().contains(".java")) {
                         originalPath = Paths.get(FILE_PATH + "/" + pf.getName().split("\\.")[0]);
+                    } else if (pf.isPnmlFile()) {
+                        originalPath = Paths.get(pf.asPnmlFile().getSourcePath());
                     } else {
                         originalPath = Paths.get(FILE_PATH + "/" + pf.getName());
                     }