diff --git a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
index 16b20ac193f2bea3da1b4f57056a16acf18dc0b3..a005e352ffe37d56c615184889f307efa1659180 100644
--- a/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
+++ b/src/data/java/de/tudresden/inf/st/pnml/base/constants/PnmlConstants.java
@@ -81,6 +81,7 @@ public final class PnmlConstants {
 
     // page properties
     public static final String PAGE_TYPE_SERVER = "serverPrototype";
+    public static final String PAGE_TYPE_NODE = "nodePage";
     public static final String PAGE_SERVER_INSTANCE_SUFFIX = "INSTANCE";
     public static final String PAGE_SERVER_CONTAINER_SUFFIX = "CONTAINER";
 
diff --git a/src/main/jastadd/base/Navigation.jrag b/src/main/jastadd/base/Navigation.jrag
index e0f7bf38b55394dd3a1ca8a281d698f37ccde2f6..0af771b0159a071fb2f627a03f850234cd238af0 100644
--- a/src/main/jastadd/base/Navigation.jrag
+++ b/src/main/jastadd/base/Navigation.jrag
@@ -57,6 +57,18 @@ aspect Navigation {
   eq Page.getObject().ContainingPage() = this;
   eq PetriNet.getPage().ContainingPage() = null;
 
+  inh Set<Page> PnObject.ContainingPageTree();
+  eq Page.getObject().ContainingPageTree() {
+        Set<Page> res = this.ContainingPageTree();
+        res.add(this);
+        return res;
+  }
+  eq PetriNet.getPage().ContainingPageTree() {
+        Set<Page> res = new HashSet<Page>();
+        res.add(this.getPage(0));
+        return res;
+  }
+
   syn boolean PnObject.isPageNode() = false;
   eq Page.isPageNode() = true;
 
diff --git a/src/main/jastadd/base/export/PnmlExporter.jadd b/src/main/jastadd/base/export/PnmlExporter.jadd
index 6828eb7ad0009a86b620f9ce66568810a43f57e2..a6a5bdcc4adc4990df9850806fb8fd6c6630e6ad 100644
--- a/src/main/jastadd/base/export/PnmlExporter.jadd
+++ b/src/main/jastadd/base/export/PnmlExporter.jadd
@@ -161,7 +161,7 @@ aspect PnmlExporter{
                                 assert rootPlace != null;
                                 if (p_one.getRef().getId().equals(rootPlace.getId())) {
                                     if(!convertedRefPlaceIDs.contains(p_one.getId())) {
-                                        System.out.println("Exporting Ref-Place (l1): " + p_one.getId());
+                                        //System.out.println("Exporting Ref-Place (l1): " + p_one.getId());
                                         RefPlaceHLAPI rph = PrimitiveElementsConverter.convertRefPlaceToPnmlObject(p_one, rootPlace, null);
                                         for (PageHLAPI pageHLAPI : convertedPages) {
                                             if (pageHLAPI.getId().equals(p_one.ContainingPage().getId())) {
@@ -181,7 +181,7 @@ aspect PnmlExporter{
                                 for (RefPlaceHLAPI convRef : convertedRefPlaces) {
                                     if (convRef.getId().equals(p_tree.getRef().getId())) {
                                         if(!convertedRefPlaceIDs.contains(p_tree.getId())) {
-                                            System.out.println("Exporting Ref-Place (ln): " + p_tree.getId());
+                                            //System.out.println("Exporting Ref-Place (ln): " + p_tree.getId());
                                             RefPlaceHLAPI rph = PrimitiveElementsConverter.convertRefPlaceToPnmlObject(p_tree, null, convRef);
                                             for (PageHLAPI pageHLAPI : convertedPages) {
                                                 if (pageHLAPI.getId().equals(p_tree.ContainingPage().getId())) {
@@ -208,14 +208,19 @@ aspect PnmlExporter{
             Set<PlaceHLAPI> convertedPlaces = new HashSet<>();
 
             for (Place p : petriNet.allPlaces()) {
+                //System.out.println("Place - " + p.getId() + "(" + p.ContainingPage().getId() + ")");
                 PlaceHLAPI convertedPlace = PrimitiveElementsConverter.convertPlaceToPnmlObject(p.asDinerosPlace());
                 for (PageHLAPI pageHLAPI : convertedPages) {
+                    //System.out.println("   >> " + pageHLAPI.getId());
                     if (pageHLAPI.getId().equals(p.ContainingPage().getId())) {
                         assert convertedPlace != null;
+                        //System.out.println("Exporting Place - FOUND PAGE: " + p.getId());
                         convertedPlace.setContainerPageHLAPI(pageHLAPI);
                         break;
                     }
                 }
+
+                // System.out.println("Exporting Place - ADDING: " + p.getId());
                 convertedPlaces.add(convertedPlace);
             }
             return convertedPlaces;
@@ -230,6 +235,7 @@ aspect PnmlExporter{
                 for (PageHLAPI pageHLAPI : convertedPages) {
                     if (pageHLAPI.getId().equals(t.ContainingPage().getId())) {
                         assert convertedTransition != null;
+                        //System.out.println("Exporting Transition - FOUND PAGE: " + t.getId());
                         convertedTransition.setContainerPageHLAPI(pageHLAPI);
                         break;
                     }
@@ -362,33 +368,39 @@ aspect PnmlExporter{
             return convertedArcs;
         }
 
+        private static void buildPageSubTree(Page page, Set<PageHLAPI> convertedPages){
+
+            System.out.println("" + page.getId());
+            for(PnObject po : page.getObjects()){
+                if(po.isPageNode()){
+                //    System.out.println(">> Check Page: " + po.getId() + " in page " + po.asPage().ContainingPage().getId());
+                    for(PageHLAPI apiPage : convertedPages){
+                        if(apiPage.getId().equals(po.asPage().ContainingPage().getId())){
+                         //   System.out.println("Exporting Page: " + po.getId());
+                            convertedPages.add(ComplexElementsConverter.
+                                    convertNonTopLevelPageContainerToPnmlObject(po.asPage(), apiPage));
+                            break;
+                        }
+                    }
+                }
+            }
+
+            for(PnObject po : page.getObjects()){
+                if(po.isPageNode()){
+                    buildPageSubTree(po.asPage(), convertedPages);
+                }
+            }
+        }
+
         private static Set<PageHLAPI> buildPageTrees(PetriNet petriNet, PetriNetHLAPI net) {
 
             Set<PageHLAPI> convertedPages = new HashSet<>();
-            //   Set<String> processedPageIds = new HashSet<>();
 
             List<Page> topLevelPages = getTopLevelPages(petriNet);
-            List<Page> nonTopLevelPages = getNonTopLevelPages(petriNet);
 
             for (Page page : topLevelPages) {
                 convertedPages.add(ComplexElementsConverter.convertTopLevelPageContainerToPnmlObject(page, net));
-                //    processedPageIds.add(page.getId());
-            }
-
-            for (Page nonTopLevelPage : nonTopLevelPages) {
-                Page parent = nonTopLevelPage.ContainingPage();
-
-                for (PageHLAPI convertedPage : convertedPages) {
-                    if (parent.getId().equals(convertedPage.getId())) {//&& !processedPageIds.contains(convertedPage.getId())) {
-                        //       processedPageIds.add(convertedPage.getId());
-                        convertedPages.add(ComplexElementsConverter.convertNonTopLevelPageContainerToPnmlObject(nonTopLevelPage, convertedPage));
-                        break;
-                    }
-                }
-
-                //      if ((processedPageIds.size() != nonTopLevelPages.size()) && (i == (nonTopLevelPages.size() - 1))) {
-                //         i = -1;
-                //     }
+                buildPageSubTree(page, convertedPages);
             }
 
             return convertedPages;