diff --git a/src/main/jastadd/Navigation.jrag b/src/main/jastadd/Navigation.jrag
index 37078ae3adc49d4f7560748daca2f01a608fc0fc..5a9e43ffeb17a301c61a53fbbc1f30622a61193a 100644
--- a/src/main/jastadd/Navigation.jrag
+++ b/src/main/jastadd/Navigation.jrag
@@ -16,14 +16,25 @@ aspect Navigation {
     to Program.relations()
     for program();
 
+  // --- allTokenComponents ---
+  coll java.util.Set<TokenComponent> Program.allTokenComponents() [new java.util.HashSet<>()] root Program;
+  TokenComponent contributes this
+    to Program.allTokenComponents()
+    for program();
+
   // --- containingTypeDecl ---
   inh TypeDecl Component.containingTypeDecl();
   eq TypeDecl.getChild().containingTypeDecl() = this;
 
   // --- containedFile ---
   inh GrammarFile ASTNode.containedFile();
+  eq Program.getChild().containedFile() = null;
   eq GrammarFile.getChild().containedFile() = this;
 
+  // --- containedFileName ---
+  inh String ASTNode.containedFileName();
+  eq GrammarFile.getChild().containedFileName() = getFileName();
+
   // --- isTokenComponent ---
   syn boolean Component.isTokenComponent() = false;
   eq TokenComponent.isTokenComponent() = true;
@@ -31,4 +42,52 @@ aspect Navigation {
   // --- asTokenComponent ---
   syn TokenComponent Component.asTokenComponent() = null;
   eq TokenComponent.asTokenComponent() = this;
+
+  // --- isTypeDecl (should be in preprocessor) ---
+  syn boolean Declaration.isTypeDecl() = false;
+  eq TypeDecl.isTypeDecl() = true;
+
+  // --- asTypeDecl (should be in preprocessor) ---
+  syn TypeDecl Declaration.asTypeDecl() = null;
+  eq TypeDecl.asTypeDecl() = this;
+
+  // --- isTypeComponent (should be in preprocessor) ---
+  syn boolean Component.isTypeComponent() = false;
+  eq TypeComponent.isTypeComponent() = true;
+
+  // --- asTypeComponent (should be in preprocessor) ---
+  syn TypeComponent Component.asTypeComponent() = null;
+  eq TypeComponent.asTypeComponent() = this;
+
+  // --- isNormalComponent (should be in preprocessor) ---
+  syn boolean Component.isNormalComponent() = false;
+  eq NormalComponent.isNormalComponent() = true;
+
+  // --- asNormalComponent (should be in preprocessor) ---
+  syn NormalComponent Component.asNormalComponent() = null;
+  eq NormalComponent.asNormalComponent() = this;
+
+  // --- isListComponent (should be in preprocessor) ---
+  syn boolean Component.isListComponent() = false;
+  eq ListComponent.isListComponent() = true;
+
+  // --- asListComponent (should be in preprocessor) ---
+  syn ListComponent Component.asListComponent() = null;
+  eq ListComponent.asListComponent() = this;
+
+  // --- isDirectedRelation (should be in preprocessor) ---
+  syn boolean Relation.isDirectedRelation() = false;
+  eq DirectedRelation.isDirectedRelation() = true;
+
+  // --- asDirectedRelation (should be in preprocessor) ---
+  syn DirectedRelation Relation.asDirectedRelation() = null;
+  eq DirectedRelation.asDirectedRelation() = this;
+
+  // --- asBidirectionalRelation (should be in preprocessor) ---
+  syn BidirectionalRelation Relation.asBidirectionalRelation() = null;
+  eq BidirectionalRelation.asBidirectionalRelation() = this;
+
+  // --- isListRole (should be in preprocessor) ---
+  syn boolean Role.isListRole() = false;
+  eq ListRole.isListRole() = true;
 }
diff --git a/src/main/java/org/jastadd/relast/compiler/AbstractCompiler.java b/src/main/java/org/jastadd/relast/compiler/AbstractCompiler.java
index 1330ebe284b62a90480959eb35eb23dbda831540..adc9bde23565b83df6fe6885d6a5d92d3bbad8b3 100644
--- a/src/main/java/org/jastadd/relast/compiler/AbstractCompiler.java
+++ b/src/main/java/org/jastadd/relast/compiler/AbstractCompiler.java
@@ -1,7 +1,6 @@
 package org.jastadd.relast.compiler;
 
 import org.jastadd.JastAddConfiguration;
-import org.jastadd.option.ArgumentParser;
 import org.jastadd.option.Option;
 
 import java.util.ArrayList;
@@ -10,8 +9,7 @@ public abstract class AbstractCompiler {
 
   private final boolean jastAddCompliant;
   protected ArrayList<Option<?>> options;
-  private String name;
-  private ArgumentParser commandLine;
+  private final String name;
 
   private JastAddConfiguration configuration;
 
@@ -36,7 +34,7 @@ public abstract class AbstractCompiler {
     return compile();
   }
 
-  abstract int compile() throws CompilerException;
+  protected abstract int compile() throws CompilerException;
 
   protected void initOptions() {
     // there are no options by default
@@ -52,7 +50,7 @@ public abstract class AbstractCompiler {
     System.err.println();
     System.err.println("Usage: java -jar " + name + ".jar [--option1] [--option2=value] ...  <filename1> <filename2> ... ");
     System.err.println("Options:");
-    commandLine.printHelp(System.err);
+    configuration.printHelp(System.err);
     return 1;
   }