diff --git a/dumpAst/src/main/jastadd/GenerationCommon.jrag b/dumpAst/src/main/jastadd/GenerationCommon.jrag
new file mode 100644
index 0000000000000000000000000000000000000000..a05412d3eba8dbf7732e1f364c3664304db7d23a
--- /dev/null
+++ b/dumpAst/src/main/jastadd/GenerationCommon.jrag
@@ -0,0 +1,19 @@
+aspect GenerationCommon {
+  // --- find{In,Ex}cludePatternCollection ---
+  syn PatternCollection BuildConfig.findIncludePatternCollection(String typeRegex) {
+    for (TypePatternCollectionMapping mapping : getIncludeTypePatternList()) {
+      if (mapping.getTypeRegex().equals(typeRegex)) {
+        return mapping.getPatternCollection();
+      }
+    }
+    return null;
+  }
+  syn PatternCollection BuildConfig.findExcludePatternCollection(String typeRegex) {
+    for (TypePatternCollectionMapping mapping : getExcludeTypePatternList()) {
+      if (mapping.getTypeRegex().equals(typeRegex)) {
+        return mapping.getPatternCollection();
+      }
+    }
+    return null;
+  }
+}
diff --git a/dumpAst/src/main/jastadd/GenerationFrontend.jadd b/dumpAst/src/main/jastadd/GenerationFrontend.jadd
index b6815cef840deb549085fdb2ce28f94f5f2758f6..26466b1cd9ae3b1aa6cb9dec45acccd8437a2dfc 100644
--- a/dumpAst/src/main/jastadd/GenerationFrontend.jadd
+++ b/dumpAst/src/main/jastadd/GenerationFrontend.jadd
@@ -94,10 +94,10 @@ public class DumpBuilder {
      * @return this
      * @see java.util.regex.Pattern#compile(java.lang.String)
      */
-    public DumpBuilder disableTypes(String... regexes) {
+    public DumpBuilder disableTypes(String regex, String... moreRegexes) {
       updateRegexes(() -> buildConfig.getTypeIgnorePattern(),
                     s -> buildConfig.setTypeIgnorePattern(s),
-                    regexes);
+                    regex, moreRegexes);
       return this;
     }
 
@@ -109,60 +109,100 @@ public class DumpBuilder {
      * @return this
      * @see java.util.regex.Pattern#compile(java.lang.String)
      */
-    public DumpBuilder excludeTokens(String... regexes) {
+    public DumpBuilder excludeTokens(String regex, String... moreRegexes) {
       updateRegexes(() -> buildConfig.getGlobalPatternCollection().getTokenPattern(),
                     s -> buildConfig.getGlobalPatternCollection().setTokenPattern(s),
-                    regexes);
+                    regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder excludeTokensFor(String typeRegex, String... regexes) {
+    public DumpBuilder excludeTokensFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getTokenPattern(),
+          s -> collection.setTokenPattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder excludeChildrenFor(String typeRegex, String... regexes) {
+    public DumpBuilder excludeChildrenFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getChildPattern(),
+          s -> collection.setChildPattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder excludeRelationsFor(String typeRegex, String... regexes) {
+    public DumpBuilder excludeRelationsFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getRelationPattern(),
+          s -> collection.setRelationPattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder excludeAttributesFor(String typeRegex, String... regexes) {
+    public DumpBuilder excludeAttributesFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getAttributePattern(),
+          s -> collection.setAttributePattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder excludeNonterminalAttributesFor(String typeRegex, String... regexes) {
+    public DumpBuilder excludeNonterminalAttributesFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateExcludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getNonterminalAttributePattern(),
+          s -> collection.setNonterminalAttributePattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder includeTokensFor(String typeRegex, String... regexes) {
+    public DumpBuilder includeTokensFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getTokenPattern(),
+          s -> collection.setTokenPattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder includeChildrenFor(String typeRegex, String... regexes) {
+    public DumpBuilder includeChildrenFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getChildPattern(),
+          s -> collection.setChildPattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder includeRelationsFor(String typeRegex, String... regexes) {
+    public DumpBuilder includeRelationsFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getRelationPattern(),
+          s -> collection.setRelationPattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder includeAttributesFor(String typeRegex, String... regexes) {
+    public DumpBuilder includeAttributesFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getAttributePattern(),
+          s -> collection.setAttributePattern(s),
+          regex, moreRegexes);
       return this;
     }
 
     /** TODO: document, implement, sort */
-    public DumpBuilder includeNonterminalAttributesFor(String typeRegex, String... regexes) {
+    public DumpBuilder includeNonterminalAttributesFor(String typeRegex, String regex, String... moreRegexes) {
+      PatternCollection collection = findOrCreateIncludePatternCollection(typeRegex);
+      updateRegexes(() -> collection.getNonterminalAttributePattern(),
+          s -> collection.setNonterminalAttributePattern(s),
+          regex, moreRegexes);
       return this;
     }
 
@@ -174,10 +214,10 @@ public class DumpBuilder {
      * @return this
      * @see java.util.regex.Pattern#compile(java.lang.String)
      */
-    public DumpBuilder includeAttributes(String... regexes) {
+    public DumpBuilder includeAttributes(String regex, String... moreRegexes) {
       updateRegexes(() -> buildConfig.getGlobalPatternCollection().getAttributePattern(),
                     s -> buildConfig.getGlobalPatternCollection().setAttributePattern(s),
-                    regexes);
+                    regex, moreRegexes);
       return this;
     }
 
@@ -193,10 +233,10 @@ public class DumpBuilder {
      * @return this
      * @see java.util.regex.Pattern#compile(java.lang.String)
      */
-    public DumpBuilder includeNonterminalAttributes(String... regexes) {
+    public DumpBuilder includeNonterminalAttributes(String regex, String... moreRegexes) {
       updateRegexes(() -> buildConfig.getGlobalPatternCollection().getNonterminalAttributePattern(),
                     s -> buildConfig.getGlobalPatternCollection().setNonterminalAttributePattern(s),
-                    regexes);
+                    regex, moreRegexes);
       return this;
     }
 
@@ -209,10 +249,10 @@ public class DumpBuilder {
      * @return this
      * @see java.util.regex.Pattern#compile(java.lang.String)
      */
-    public DumpBuilder excludeChildren(String... regexes) {
+    public DumpBuilder excludeChildren(String regex, String... moreRegexes) {
       updateRegexes(() -> buildConfig.getGlobalPatternCollection().getChildPattern(),
                     s -> buildConfig.getGlobalPatternCollection().setChildPattern(s),
-                    regexes);
+                    regex, moreRegexes);
       return this;
     }
     /**
@@ -225,20 +265,45 @@ public class DumpBuilder {
      * @return this
      * @see java.util.regex.Pattern#compile(java.lang.String)
      */
-    public DumpBuilder excludeRelations(String... regexes) {
+    public DumpBuilder excludeRelations(String regex, String... moreRegexes) {
       updateRegexes(() -> buildConfig.getGlobalPatternCollection().getRelationPattern(),
                     s -> buildConfig.getGlobalPatternCollection().setRelationPattern(s),
-                    regexes);
+                    regex, moreRegexes);
       return this;
     }
 
-    private void updateRegexes(java.util.function.Supplier<String> getter, java.util.function.Consumer<String> setter, String... values) {
-      for (String value : values) {
-        if (getter.get().isEmpty()) {
-          setter.accept(value);
-        } else {
-          setter.accept(getter.get() + "|" + value);
-        }
+    private PatternCollection findOrCreateIncludePatternCollection(String typeRegex) {
+      PatternCollection result = buildConfig.findIncludePatternCollection(typeRegex);
+      if (result == null) {
+        TypePatternCollectionMapping mapping = new TypePatternCollectionMapping();
+        mapping.setTypeRegex(typeRegex);
+        result = new PatternCollection();
+        mapping.setPatternCollection(result);
+        buildConfig.addIncludeTypePattern(mapping);
+      }
+      return result;
+    }
+
+    private PatternCollection findOrCreateExcludePatternCollection(String typeRegex) {
+      PatternCollection result = buildConfig.findExcludePatternCollection(typeRegex);
+      if (result == null) {
+        TypePatternCollectionMapping mapping = new TypePatternCollectionMapping();
+        mapping.setTypeRegex(typeRegex);
+        result = new PatternCollection();
+        mapping.setPatternCollection(result);
+        buildConfig.addExcludeTypePattern(mapping);
+      }
+      return result;
+    }
+
+    private void updateRegexes(java.util.function.Supplier<String> getter, java.util.function.Consumer<String> setter, String regex, String... moreRegexes) {
+      if (getter.get().isEmpty()) {
+        setter.accept(regex);
+      } else {
+        setter.accept(getter.get() + "|" + regex);
+      }
+      for (String value : moreRegexes) {
+        setter.accept(getter.get() + "|" + value);
       }
     }