diff --git a/dumpAst.base/src/main/jastadd/DumpAst.relast b/dumpAst.base/src/main/jastadd/DumpAst.relast
index fcfd923c0e47bc6648f3e397ecaa99b5ff1007a7..bca6fd7a7f153906a5d551f25f9b5e696b4991e1 100644
--- a/dumpAst.base/src/main/jastadd/DumpAst.relast
+++ b/dumpAst.base/src/main/jastadd/DumpAst.relast
@@ -5,9 +5,9 @@ DumpNode ::=  DumpChildNode* DumpToken* DumpRelation*
  <Name> <Label> <BackgroundColor> <TextColor> <Object:Object> <Invisible:boolean> <Computed:boolean> <ManualStereotypes>
  /InvisiblePath/ ;
 
-InnerDumpNode ;
+InnerDumpNode ::= <OriginalIndex:int>;
 rel InnerDumpNode.DumpNode <-> DumpNode.ContainerOfInner ;
-InnerRelationDumpNode;
+InnerRelationDumpNode ::= <OriginalIndex:int>;
 rel InnerRelationDumpNode.DumpNode -> DumpNode ; // .ContainerOfInner*
 
 abstract DumpChildNode ::= <Name> <Computed:boolean> ;
diff --git a/dumpAst.base/src/main/jastadd/Printing.jrag b/dumpAst.base/src/main/jastadd/Printing.jrag
index f42e6fabd2035376057f4655ce36674261d27376..2d64f5f5604f6cb16c78ab0d317aed2033349df3 100644
--- a/dumpAst.base/src/main/jastadd/Printing.jrag
+++ b/dumpAst.base/src/main/jastadd/Printing.jrag
@@ -25,10 +25,15 @@ aspect Printing {
   syn String DumpNode.label() = getLabel();
   inh String InnerDumpNode.label();
   inh String InnerRelationDumpNode.label();
-  eq DumpListChildNode.getInnerDumpNode(int index).label() = label() + "[" + index + "]";
-  eq DumpListRelation.getInnerRelationDumpNode(int index).label() = label() + "[" + index + "]";
+  eq DumpListChildNode.getInnerDumpNode(int index).label() = label() + "[" +
+      chooseIndex(getInnerDumpNode(index).getOriginalIndex(), index) + "]";
+  eq DumpListRelation.getInnerRelationDumpNode(int index).label() = label() + "[" +
+      chooseIndex(getInnerRelationDumpNode(index).getOriginalIndex(), index) + "]";
   eq DumpReferenceListToken.getInnerRelationDumpNode(int index).label() = label() + "[" + index + "]";
   eq InvisiblePath.getInnerRelationDumpNode(int index).label() = null;
+  protected int ASTNode.chooseIndex(int originalIndex, int inheritedIndex) {
+    return originalIndex != 0 ? originalIndex : inheritedIndex;
+  }
 
   // --- bothVisible ---
   boolean ASTNode.bothVisible(DumpNode one, DumpNode two) {
diff --git a/dumpAst.base/src/main/jastadd/TemplateContext.jrag b/dumpAst.base/src/main/jastadd/TemplateContext.jrag
index e8d5549ccd5722276c53c6063ee381610e9f57c3..a1d09c4ecac06f97159af0265dd46ced245f4843 100644
--- a/dumpAst.base/src/main/jastadd/TemplateContext.jrag
+++ b/dumpAst.base/src/main/jastadd/TemplateContext.jrag
@@ -26,7 +26,7 @@ aspect TemplateContext {
   syn InvisiblePath DumpNode.getInvisiblePath() {
     InvisiblePath result = new InvisiblePath();
     for (DumpNode successor : reachableThroughInvisible()) {
-      result.addInnerRelationDumpNode(new InnerRelationDumpNode(successor));
+      result.addInnerRelationDumpNode(new InnerRelationDumpNode().setDumpNode(successor));
     }
     return result;
   }
diff --git a/dumpAst.base/src/main/jastadd/Transform.jadd b/dumpAst.base/src/main/jastadd/Transform.jadd
index 747a59b1a71a04a008a36c8f5a5b8b054b8a8e65..bc8cfbaa552963df4422d901369a58438b0a8ac1 100644
--- a/dumpAst.base/src/main/jastadd/Transform.jadd
+++ b/dumpAst.base/src/main/jastadd/Transform.jadd
@@ -155,13 +155,15 @@ aspect Transform {
         listChild.setComputed(false);
         String childName = containmentMethod.getName();
         listChild.setName(childName);
+        int index = -1;
         for (Object target : targetList) {
+          index++;
           if (!getBuildConfig().getIncludeChildMethod().shouldInclude(obj, target, childName)) {
             continue;
           }
           DumpNode targetNode = transform(tti, target, options.asNormal(false));
           if (target != null && targetNode != null) {
-            listChild.addInnerDumpNode(new InnerDumpNode().setDumpNode(targetNode));
+            listChild.addInnerDumpNode(new InnerDumpNode().setDumpNode(targetNode).setOriginalIndex(index));
           }
         }
         if (listChild.getNumInnerDumpNode() > 0) {
@@ -229,13 +231,16 @@ aspect Transform {
         Iterable<?> targetList = (Iterable<?>) otherMethod.getMethod().invoke(obj);
         DumpListRelation listRelation = new DumpListRelation();
         listRelation.setName(otherMethod.getName());
+        int index = -1;
         for (Object target : targetList) {
+          index++;
           if (!getBuildConfig().getIncludeRelationMethod().shouldInclude(obj, target, otherMethod.getName())) {
             continue;
           }
           DumpNode targetNode = transform(tti, target, options.asRelation());
           if (target != null && targetNode != null) {
-            listRelation.addInnerRelationDumpNode(new InnerRelationDumpNode(targetNode));
+            listRelation.addInnerRelationDumpNode(new InnerRelationDumpNode().setDumpNode(targetNode)
+                .setOriginalIndex(index));
           }
         }
         if (listRelation.getNumInnerRelationDumpNode() > 0) {
diff --git a/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java b/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java
index 5e758f933eedc650948ffca0992da3df19f9332b..dc47a4a4b759f58b510771014860aee9bc01d593 100644
--- a/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java
+++ b/dumpAst.prototyping/src/main/java/de/tudresden/inf/st/jastadd/featureTest/FeatureTestMain.java
@@ -23,18 +23,18 @@ public class FeatureTestMain {
     A a = new A().setName("A2");
     a.setB(new B().setName("B2.1"));
 //    a.setMyC(new C().setName("C2.1"));
-//    B b1 = new B().setName("B3").setOtherValue("some long text");
+    B b1 = new B().setName("B3").setOtherValue("some long text");
 //    C c = new C().setName("C4");
 //    c.setA(new A().setName("A4.1").setB(new B().setName("B4.1.1")));
 //    c.setRawReference(a);
 //    b1.setOneA(a);
-//    B b2 = new B().setName("B5").setOtherValue("#ff00ff");
+    B b2 = new B().setName("B5").setOtherValue("#ff00ff");
 //    C myC = new C().setName("C6");
 //    c.setA(new A().setName("A6.1").setB(new B().setName("B6.1.1")));
 //    a.setMyC(myC);
     root.setA(a);
-//    root.addB(b1);
-//    root.addB(b2);
+    root.addB(b1);
+    root.addB(b2);
 //    root.setC(c);
 
     Path pathToYaml = Paths.get("featureTest.yml");
@@ -51,6 +51,9 @@ public class FeatureTestMain {
           if (parentNode instanceof A && ((A) parentNode).getName().equals("A2")) {
             return false;
           }
+          if (parentNode instanceof Root && childNode instanceof B) {
+            return !"B3".equals(((B) childNode).getName());
+          }
           return !contextName.equals("MyC");
         })
         .includeRelationsWhen((sourceNode, targetNode, roleName) ->