From 38cc16d8c33b299309f1a634aaa2cf3587a2262c Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Wed, 9 Jun 2021 20:51:27 +0200
Subject: [PATCH] align with aspect branch

---
 build.gradle.kts                              |  22 +--
 .../{RelAstGrammar.bnf => Grammar.bnf}        |  26 +--
 src/main/grammar/Grammar.flex                 |  66 +++++++
 src/main/grammar/RelAstGrammar.flex           |  66 -------
 .../org/jastadd/tooling/RelAstGrammar.java    |  13 --
 .../RelAstGrammarCodeStyleSettings.java       |  12 --
 .../RelAstGrammarFormattingModelBuilder.java  |  58 ------
 .../org/jastadd/tooling/grammar/Grammar.java  |  13 ++
 .../GrammarAnnotator.java}                    |  20 +--
 .../GrammarBlock.java}                        |  10 +-
 .../GrammarChooseByNameContributor.java}      |  12 +-
 .../grammar/GrammarCodeStyleSettings.java     |  12 ++
 .../GrammarCodeStyleSettingsProvider.java}    |  24 +--
 .../GrammarColorSettingsPage.java}            |  41 ++---
 .../GrammarCommenter.java}                    |   6 +-
 .../GrammarCompletionContributor.java}        |  47 ++---
 .../GrammarFileType.java}                     |  12 +-
 .../GrammarFindUsageProvider.java}            |  26 +--
 .../GrammarFormattingModelBuilder.java        |  58 ++++++
 .../GrammarJavaAnnotator.java}                |   7 +-
 ...marLanguageCodeStyleSettingsProvider.java} |   6 +-
 .../GrammarLineMarkerProvider.java}           |  11 +-
 .../GrammarRefactoringSupportProvider.java}   |  10 +-
 .../GrammarReference.java}                    |  17 +-
 .../GrammarReferenceContributor.java}         |  12 +-
 ...ammarRemoveRedundantComponentNameFix.java} |  14 +-
 .../GrammarStructureViewElement.java}         |  20 +--
 .../GrammarStructureViewFactory.java}         |   6 +-
 .../GrammarStructureViewModel.java}           |  12 +-
 .../GrammarSyntaxHighlighter.java}            |  52 +++---
 .../GrammarSyntaxHighlighterFactory.java}     |   6 +-
 .../GrammarUtil.java}                         |  32 ++--
 .../grammar/lexer/GrammarLexerAdapter.java    |  11 ++
 .../parser/GrammarParserDefinition.java}      |  22 +--
 .../grammar/psi/GrammarElementFactory.java    |  31 ++++
 .../grammar/psi/GrammarElementType.java       |  14 ++
 .../tooling/grammar/psi/GrammarFile.java      |  27 +++
 .../grammar/psi/GrammarNamedElement.java      |   7 +
 .../tooling/grammar/psi/GrammarTokenType.java |  19 ++
 .../grammar/psi/GrammarTypeDeclExtension.java |   4 +
 .../psi/GrammarTypeReferenceExtension.java    |   4 +
 .../psi/GrammarTypeReferenceManipulator.java} |   8 +-
 .../psi/impl/GrammarNamedElementImpl.java}    |  10 +-
 .../impl/GrammarTypeDeclImplExtension.java    |  47 +++++
 .../GrammarTypeReferenceImplExtension.java}   |  14 +-
 .../lexer/RelAstGrammarFlexAdapter.java       |  11 --
 .../parser/RelAstGrammarElementType.java      |  14 --
 .../parser/RelAstGrammarTokenType.java        |  19 --
 .../psi/RelAstGrammarElementFactory.java      |  31 ----
 .../tooling/psi/RelAstGrammarFile.java        |  27 ---
 .../psi/RelAstGrammarNamedElement.java        |   7 -
 .../psi/RelAstGrammarTypeDeclExtension.java   |   4 -
 .../RelAstGrammarTypeReferenceExtension.java  |   4 -
 .../RelAstGrammarTypeDeclImplExtension.java   |  47 -----
 .../tooling/{ => util}/JastAddIcons.java      |   2 +-
 src/main/resources/META-INF/plugin.xml        |  38 ++--
 src/main/resources/icons/jastadd.svg          | 169 +++++++++---------
 57 files changed, 671 insertions(+), 669 deletions(-)
 rename src/main/grammar/{RelAstGrammar.bnf => Grammar.bnf} (57%)
 create mode 100644 src/main/grammar/Grammar.flex
 delete mode 100644 src/main/grammar/RelAstGrammar.flex
 delete mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammar.java
 delete mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java
 delete mode 100644 src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/Grammar.java
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarAnnotator.java => grammar/GrammarAnnotator.java} (68%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarBlock.java => grammar/GrammarBlock.java} (75%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarChooseByNameContributor.java => grammar/GrammarChooseByNameContributor.java} (67%)
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarCodeStyleSettingsProvider.java => grammar/GrammarCodeStyleSettingsProvider.java} (56%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarColorSettingsPage.java => grammar/GrammarColorSettingsPage.java} (50%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarCommenter.java => grammar/GrammarCommenter.java} (78%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarCompletionContributor.java => grammar/GrammarCompletionContributor.java} (77%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarFileType.java => grammar/GrammarFileType.java} (66%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarFindUsageProvider.java => grammar/GrammarFindUsageProvider.java} (59%)
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarJavaAnnotator.java => grammar/GrammarJavaAnnotator.java} (89%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarLanguageCodeStyleSettingsProvider.java => grammar/GrammarLanguageCodeStyleSettingsProvider.java} (93%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarLineMarkerProvider.java => grammar/GrammarLineMarkerProvider.java} (74%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarRefactoringSupportProvider.java => grammar/GrammarRefactoringSupportProvider.java} (60%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarReference.java => grammar/GrammarReference.java} (72%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarReferenceContributor.java => grammar/GrammarReferenceContributor.java} (69%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarRemoveRedundantComponentNameFix.java => grammar/GrammarRemoveRedundantComponentNameFix.java} (72%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarStructureViewElement.java => grammar/GrammarStructureViewElement.java} (68%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarStructureViewFactory.java => grammar/GrammarStructureViewFactory.java} (80%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarStructureViewModel.java => grammar/GrammarStructureViewModel.java} (65%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarSyntaxHighlighter.java => grammar/GrammarSyntaxHighlighter.java} (77%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarSyntaxHighlighterFactory.java => grammar/GrammarSyntaxHighlighterFactory.java} (69%)
 rename src/main/java/org/jastadd/tooling/{RelAstGrammarUtil.java => grammar/GrammarUtil.java} (72%)
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java
 rename src/main/java/org/jastadd/tooling/{parser/RelAstGrammarParserDefinition.java => grammar/parser/GrammarParserDefinition.java} (69%)
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java
 rename src/main/java/org/jastadd/tooling/{psi/RelAstGrammarTypeReferenceManipulator.java => grammar/psi/GrammarTypeReferenceManipulator.java} (61%)
 rename src/main/java/org/jastadd/tooling/{psi/impl/RelAstGrammarNamedElementImpl.java => grammar/psi/impl/GrammarNamedElementImpl.java} (77%)
 create mode 100644 src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java
 rename src/main/java/org/jastadd/tooling/{psi/impl/RelAstGrammarTypeReferenceImplExtension.java => grammar/psi/impl/GrammarTypeReferenceImplExtension.java} (57%)
 delete mode 100644 src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java
 delete mode 100644 src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java
 delete mode 100644 src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java
 delete mode 100644 src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java
 delete mode 100644 src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java
 delete mode 100644 src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java
 delete mode 100644 src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java
 delete mode 100644 src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java
 delete mode 100644 src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java
 rename src/main/java/org/jastadd/tooling/{ => util}/JastAddIcons.java (89%)

diff --git a/build.gradle.kts b/build.gradle.kts
index 200a911..a856f0f 100644
--- a/build.gradle.kts
+++ b/build.gradle.kts
@@ -1,8 +1,8 @@
 import io.gitlab.arturbosch.detekt.Detekt
 import org.jetbrains.changelog.markdownToHTML
-import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 import org.jetbrains.grammarkit.tasks.GenerateLexer
 import org.jetbrains.grammarkit.tasks.GenerateParser
+import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 fun properties(key: String) = project.findProperty(key).toString()
 
@@ -87,25 +87,25 @@ detekt {
 
 tasks {
 
-    val generateRelAstGrammarLexer = task<GenerateLexer>("generateRelAstGrammarLexer") {
-        source = "src/main/grammar/RelAstGrammar.flex"
-        targetDir = "src/gen/java/org/jastadd/tooling/lexer/"
-        targetClass = "RelAstGrammarLexer"
+    val generateGrammarLexer = task<GenerateLexer>("generateGrammarLexer") {
+        source = "src/main/grammar/Grammar.flex"
+        targetDir = "src/gen/java/org/jastadd/tooling/grammar/lexer/"
+        targetClass = "GrammarLexer"
         purgeOldFiles = true
     }
 
     // not fully working because of https://github.com/JetBrains/gradle-grammar-kit-plugin/issues/3
-    val generateRelAstGrammarParser = task<GenerateParser>("generateRelAstGrammarParser") {
-        source = "src/main/grammar/RelAstGrammar.bnf"
+    val generateGrammarParser = task<GenerateParser>("generateGrammarParser") {
+        source = "src/main/grammar/Grammar.bnf"
         targetRoot = "src/gen/java"
-        pathToParser = "/org/jastadd/tooling/RelAstGrammarParser.java"
-        pathToPsiRoot = "/org/jastadd/tooling/psi"
+        pathToParser = "/org/jastadd/tooling/grammar/GrammarParser.java"
+        pathToPsiRoot = "/org/jastadd/tooling/grammar/psi"
         purgeOldFiles = true
     }
 
     compileJava {
-        dependsOn(generateRelAstGrammarLexer)
-        dependsOn(generateRelAstGrammarParser)
+        dependsOn(generateGrammarLexer)
+        dependsOn(generateGrammarParser)
     }
 
     // Set the compatibility versions to 1.8
diff --git a/src/main/grammar/RelAstGrammar.bnf b/src/main/grammar/Grammar.bnf
similarity index 57%
rename from src/main/grammar/RelAstGrammar.bnf
rename to src/main/grammar/Grammar.bnf
index 081d3f4..5de3061 100644
--- a/src/main/grammar/RelAstGrammar.bnf
+++ b/src/main/grammar/Grammar.bnf
@@ -1,28 +1,28 @@
 {
-  parserClass="org.jastadd.tooling.parser.RelAstGrammarParser"
+  parserClass="org.jastadd.tooling.grammar.parser.GrammarParser"
 
   extends="com.intellij.extapi.psi.ASTWrapperPsiElement"
 
-  psiClassPrefix="RelAstGrammar"
+  psiClassPrefix="Grammar"
   psiImplClassSuffix="Impl"
-  psiPackage="org.jastadd.tooling.psi"
-  psiImplPackage="org.jastadd.tooling.psi.impl"
+  psiPackage="org.jastadd.tooling.grammar.psi"
+  psiImplPackage="org.jastadd.tooling.grammar.psi.impl"
 
-  elementTypeHolderClass="org.jastadd.tooling.parser.RelAstGrammarTypes"
-  elementTypeClass="org.jastadd.tooling.parser.RelAstGrammarElementType"
-  tokenTypeClass="org.jastadd.tooling.parser.RelAstGrammarTokenType"
+  elementTypeHolderClass="org.jastadd.tooling.grammar.parser.GrammarTypes"
+  elementTypeClass="org.jastadd.tooling.grammar.psi.GrammarElementType"
+  tokenTypeClass="org.jastadd.tooling.grammar.psi.GrammarTokenType"
 
-  psiImplUtilClass="org.jastadd.tooling.psi.impl.RelAstGrammarPsiImplUtil"
+  psiImplUtilClass="org.jastadd.tooling.grammar.psi.impl.GrammarPsiImplUtil"
 }
 
-relAstGrammarFile ::= comment* ((type_decl | relation) comment*)*
+GrammarFile ::= comment* ((type_decl | relation) comment*)*
 
 comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
 
 type_decl ::= ABSTRACT? declared_name (COL type_reference)? (ASSIGN (component | nta_component)*)? SCOL
 {
-  extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImplExtension"
-  implements="org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension"
+  extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeDeclImplExtension"
+  implements="org.jastadd.tooling.grammar.psi.GrammarTypeDeclExtension"
 }
 
 nta_component ::= SLASH component SLASH
@@ -45,8 +45,8 @@ navigable_role ::= type_reference DOT declared_name (STAR | QUESTION_MARK)?
 declared_name ::= ID
 type_reference ::= ID
 {
-  extends="org.jastadd.tooling.psi.impl.RelAstGrammarTypeReferenceImplExtension"
-  implements="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension"
+  extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeReferenceImplExtension"
+  implements="org.jastadd.tooling.grammar.psi.GrammarTypeReferenceExtension"
 }
 
 java_name ::= ID
diff --git a/src/main/grammar/Grammar.flex b/src/main/grammar/Grammar.flex
new file mode 100644
index 0000000..3f8006a
--- /dev/null
+++ b/src/main/grammar/Grammar.flex
@@ -0,0 +1,66 @@
+// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
+package org.jastadd.tooling.grammar.lexer;
+
+import com.intellij.lexer.FlexLexer;
+import com.intellij.psi.tree.IElementType;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+import com.intellij.psi.TokenType;
+
+%%
+
+%class GrammarLexer
+%implements FlexLexer
+%unicode
+%function advance
+%type IElementType
+%eof{  return;
+%eof}
+
+
+WhiteSpace        = [ ] | \t | \f | \n | \r | \r\n
+ID                = [a-zA-Z$_][a-zA-Z0-9$_]*
+MultiLineComment  = [/][*][^*]+[*]+([^*/][^*]*[*]+)*[/]
+DocComment        = [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/]
+SingleLineComment = [/][/] [^\n\r]* (\n | \r | \r\n)
+
+
+%xstate COMMENT
+%state DECLARATION
+
+%%
+
+<DECLARATION> {
+  {WhiteSpace}          { return TokenType.WHITE_SPACE; } // maybe ignore this
+  {MultiLineComment}    { return GrammarTypes.MULTILINECOMMENT; } // maybe ignore this
+  {DocComment}          { return GrammarTypes.DOCCOMMENT; } // maybe ignore this
+  {SingleLineComment}   { return GrammarTypes.SINGLELINECOMMENT; } // maybe ignore this
+}
+
+<YYINITIAL,COMMENT> {
+  {WhiteSpace}+         { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
+  {MultiLineComment}    { yybegin(YYINITIAL); return GrammarTypes.MULTILINECOMMENT; }
+  {DocComment}          { yybegin(YYINITIAL); return GrammarTypes.DOCCOMMENT; }
+  {SingleLineComment}   { yybegin(YYINITIAL); return GrammarTypes.SINGLELINECOMMENT; }
+}
+
+<YYINITIAL,DECLARATION> {
+  "abstract"            { yybegin(DECLARATION); return GrammarTypes.ABSTRACT; }
+  "rel"                 { yybegin(DECLARATION); return GrammarTypes.REL; }
+  ";"                   { yybegin(COMMENT);     return GrammarTypes.SCOL; }
+  ":"                   { yybegin(DECLARATION); return GrammarTypes.COL; }
+  "::="                 { yybegin(DECLARATION); return GrammarTypes.ASSIGN; }
+  "*"                   { yybegin(DECLARATION); return GrammarTypes.STAR; }
+  "."                   { yybegin(DECLARATION); return GrammarTypes.DOT; }
+  ","                   { yybegin(DECLARATION); return GrammarTypes.COMMA; }
+  "<"                   { yybegin(DECLARATION); return GrammarTypes.LT; }
+  ">"                   { yybegin(DECLARATION); return GrammarTypes.GT; }
+  "["                   { yybegin(DECLARATION); return GrammarTypes.LBRACKET; }
+  "]"                   { yybegin(DECLARATION); return GrammarTypes.RBRACKET; }
+  "/"                   { yybegin(DECLARATION); return GrammarTypes.SLASH; }
+  "?"                   { yybegin(DECLARATION); return GrammarTypes.QUESTION_MARK; }
+  "->"                  { yybegin(DECLARATION); return GrammarTypes.RIGHT; }
+  "<-"                  { yybegin(DECLARATION); return GrammarTypes.LEFT; }
+  "<->"                 { yybegin(DECLARATION); return GrammarTypes.BIDIRECTIONAL; }
+  {ID}                  { yybegin(DECLARATION); return GrammarTypes.ID; }
+  [^]                   { return TokenType.BAD_CHARACTER; }
+}
diff --git a/src/main/grammar/RelAstGrammar.flex b/src/main/grammar/RelAstGrammar.flex
deleted file mode 100644
index 27f0f94..0000000
--- a/src/main/grammar/RelAstGrammar.flex
+++ /dev/null
@@ -1,66 +0,0 @@
-// Copyright 2000-2020 JetBrains s.r.o. and other contributors. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
-package org.jastadd.tooling.lexer;
-
-import com.intellij.lexer.FlexLexer;
-import com.intellij.psi.tree.IElementType;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-import com.intellij.psi.TokenType;
-
-%%
-
-%class RelAstGrammarLexer
-%implements FlexLexer
-%unicode
-%function advance
-%type IElementType
-%eof{  return;
-%eof}
-
-
-WhiteSpace        = [ ] | \t | \f | \n | \r | \r\n
-ID                = [a-zA-Z$_][a-zA-Z0-9$_]*
-MultiLineComment  = [/][*][^*]+[*]+([^*/][^*]*[*]+)*[/]
-DocComment        = [/][*][*][^*]*[*]+([^*/][^*]*[*]+)*[/]
-SingleLineComment = [/][/] [^\n\r]* (\n | \r | \r\n)
-
-
-%xstate COMMENT
-%state DECLARATION
-
-%%
-
-<DECLARATION> {
-  {WhiteSpace}          { return TokenType.WHITE_SPACE; } // maybe ignore this
-  {MultiLineComment}    { return RelAstGrammarTypes.MULTILINECOMMENT; } // maybe ignore this
-  {DocComment}          { return RelAstGrammarTypes.DOCCOMMENT; } // maybe ignore this
-  {SingleLineComment}   { return RelAstGrammarTypes.SINGLELINECOMMENT; } // maybe ignore this
-}
-
-<YYINITIAL,COMMENT> {
-  {WhiteSpace}+         { yybegin(YYINITIAL); return TokenType.WHITE_SPACE; }
-  {MultiLineComment}    { yybegin(YYINITIAL); return RelAstGrammarTypes.MULTILINECOMMENT; }
-  {DocComment}          { yybegin(YYINITIAL); return RelAstGrammarTypes.DOCCOMMENT; }
-  {SingleLineComment}   { yybegin(YYINITIAL); return RelAstGrammarTypes.SINGLELINECOMMENT; }
-}
-
-<YYINITIAL,DECLARATION> {
-  "abstract"            { yybegin(DECLARATION); return RelAstGrammarTypes.ABSTRACT; }
-  "rel"                 { yybegin(DECLARATION); return RelAstGrammarTypes.REL; }
-  ";"                   { yybegin(COMMENT);     return RelAstGrammarTypes.SCOL; }
-  ":"                   { yybegin(DECLARATION); return RelAstGrammarTypes.COL; }
-  "::="                 { yybegin(DECLARATION); return RelAstGrammarTypes.ASSIGN; }
-  "*"                   { yybegin(DECLARATION); return RelAstGrammarTypes.STAR; }
-  "."                   { yybegin(DECLARATION); return RelAstGrammarTypes.DOT; }
-  ","                   { yybegin(DECLARATION); return RelAstGrammarTypes.COMMA; }
-  "<"                   { yybegin(DECLARATION); return RelAstGrammarTypes.LT; }
-  ">"                   { yybegin(DECLARATION); return RelAstGrammarTypes.GT; }
-  "["                   { yybegin(DECLARATION); return RelAstGrammarTypes.LBRACKET; }
-  "]"                   { yybegin(DECLARATION); return RelAstGrammarTypes.RBRACKET; }
-  "/"                   { yybegin(DECLARATION); return RelAstGrammarTypes.SLASH; }
-  "?"                   { yybegin(DECLARATION); return RelAstGrammarTypes.QUESTION_MARK; }
-  "->"                  { yybegin(DECLARATION); return RelAstGrammarTypes.RIGHT; }
-  "<-"                  { yybegin(DECLARATION); return RelAstGrammarTypes.LEFT; }
-  "<->"                 { yybegin(DECLARATION); return RelAstGrammarTypes.BIDIRECTIONAL; }
-  {ID}                  { yybegin(DECLARATION); return RelAstGrammarTypes.ID; }
-  [^]                   { return TokenType.BAD_CHARACTER; }
-}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammar.java b/src/main/java/org/jastadd/tooling/RelAstGrammar.java
deleted file mode 100644
index 2b6f58f..0000000
--- a/src/main/java/org/jastadd/tooling/RelAstGrammar.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package org.jastadd.tooling;
-
-import com.intellij.lang.Language;
-
-public class RelAstGrammar extends Language {
-
-  public static final RelAstGrammar INSTANCE = new RelAstGrammar();
-
-  private RelAstGrammar() {
-    super("JastAddGrammar");
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java b/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java
deleted file mode 100644
index c531ee6..0000000
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettings.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.jastadd.tooling;
-
-import com.intellij.psi.codeStyle.CodeStyleSettings;
-  import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
-
-public class RelAstGrammarCodeStyleSettings extends CustomCodeStyleSettings {
-
-  public RelAstGrammarCodeStyleSettings(CodeStyleSettings settings) {
-    super("RelAstGrammarCodeStyleSettings", settings);
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java b/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java
deleted file mode 100644
index 2f88f73..0000000
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarFormattingModelBuilder.java
+++ /dev/null
@@ -1,58 +0,0 @@
-package org.jastadd.tooling;
-
-import com.intellij.formatting.*;
-import com.intellij.lang.ASTNode;
-import com.intellij.openapi.util.TextRange;
-import com.intellij.psi.PsiElement;
-import com.intellij.psi.PsiFile;
-import com.intellij.psi.codeStyle.CodeStyleSettings;
-import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
-import com.intellij.psi.tree.TokenSet;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
-
-public class RelAstGrammarFormattingModelBuilder implements FormattingModelBuilder {
-
-  private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) {
-    final CommonCodeStyleSettings commonSettings = settings.getCommonSettings(RelAstGrammar.INSTANCE.getID());
-
-    final TokenSet roleMultiplicityTokens = TokenSet.create(RelAstGrammarTypes.STAR, RelAstGrammarTypes.QUESTION_MARK);
-    final TokenSet relationDirectionTokens = TokenSet.create(RelAstGrammarTypes.LEFT, RelAstGrammarTypes.RIGHT, RelAstGrammarTypes.BIDIRECTIONAL);
-    final TokenSet declarationTokens = TokenSet.create(RelAstGrammarTypes.TYPE_DECL, RelAstGrammarTypes.RELATION);
-
-    return new SpacingBuilder(settings, RelAstGrammar.INSTANCE)
-      .around(RelAstGrammarTypes.ASSIGN).spaceIf(commonSettings.SPACE_AROUND_ASSIGNMENT_OPERATORS)
-      .before(declarationTokens).none()
-      .before(RelAstGrammarTypes.SCOL).spaceIf(commonSettings.SPACE_BEFORE_SEMICOLON)
-      .around(relationDirectionTokens).spaceIf(commonSettings.SPACE_AROUND_RELATIONAL_OPERATORS)
-      .between(RelAstGrammarTypes.COMPONENT, RelAstGrammarTypes.COMPONENT).spaces(1)
-      .around(RelAstGrammarTypes.DOT).none()
-      .before(roleMultiplicityTokens).spaceIf(commonSettings.SPACE_AROUND_UNARY_OPERATOR)
-      .aroundInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_AROUND_ADDITIVE_OPERATORS)
-      .aroundInside(RelAstGrammarTypes.COL, RelAstGrammarTypes.COMPONENT).none()
-      .withinPair(RelAstGrammarTypes.LT, RelAstGrammarTypes.GT).spaceIf(commonSettings.SPACE_WITHIN_CAST_PARENTHESES)
-      .withinPair(RelAstGrammarTypes.LBRACKET, RelAstGrammarTypes.RBRACKET).spaceIf(commonSettings.SPACE_WITHIN_BRACKETS)
-      .between(declarationTokens, RelAstGrammarTypes.COMMENT).spaces(1)
-      .afterInside(RelAstGrammarTypes.SLASH, RelAstGrammarTypes.NTA_COMPONENT).none()
-      .beforeInside(RelAstGrammarTypes.SLASH, RelAstGrammarTypes.NTA_COMPONENT).none();
-  }
-
-  @Override
-  public @NotNull FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {
-    return FormattingModelProvider
-      .createFormattingModelForPsiFile(element.getContainingFile(),
-        new RelAstGrammarBlock(element.getNode(),
-          Wrap.createWrap(WrapType.NONE, false),
-          Alignment.createAlignment(),
-          createSpaceBuilder(settings)),
-        settings);
-  }
-
-  @Nullable
-  @Override
-  public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) {
-    return null;
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/grammar/Grammar.java b/src/main/java/org/jastadd/tooling/grammar/Grammar.java
new file mode 100644
index 0000000..aa4a627
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/Grammar.java
@@ -0,0 +1,13 @@
+package org.jastadd.tooling.grammar;
+
+import com.intellij.lang.Language;
+
+public class Grammar extends Language {
+
+  public static final Grammar INSTANCE = new Grammar();
+
+  private Grammar() {
+    super("JastAddGrammar");
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java b/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java
similarity index 68%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java
index 91f4e0c..6797345 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarAnnotator.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.codeInspection.ProblemHighlightType;
@@ -7,17 +7,17 @@ import com.intellij.lang.annotation.Annotator;
 import com.intellij.lang.annotation.HighlightSeverity;
 import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
 import com.intellij.psi.PsiElement;
-import org.jastadd.tooling.psi.RelAstGrammarComponent;
-import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarComponent;
+import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarAnnotator implements Annotator {
+public class GrammarAnnotator implements Annotator {
 
   @Override
   public void annotate(@NotNull final PsiElement element, @NotNull AnnotationHolder holder) {
 
-    if (element instanceof RelAstGrammarComponent) {
-      RelAstGrammarComponent component = (RelAstGrammarComponent) element;
+    if (element instanceof GrammarComponent) {
+      GrammarComponent component = (GrammarComponent) element;
       if (component.getTypeReference() != null && component.getDeclaredName() != null) {
         String name = component.getDeclaredName().getText();
         if (name != null && !name.equals("") && name.equals(component.getTypeReference().getName())) {
@@ -26,13 +26,13 @@ public class RelAstGrammarAnnotator implements Annotator {
             .highlightType(ProblemHighlightType.WEAK_WARNING)
             .textAttributes(DefaultLanguageHighlighterColors.HIGHLIGHTED_REFERENCE)
             .tooltip("When the name of a component is the same as its type, it can be omitted.")
-            .withFix(new RelAstGrammarRemoveRedundantComponentNameFix(component))
+            .withFix(new GrammarRemoveRedundantComponentNameFix(component))
             .create();
         }
       }
-    } else if (element instanceof RelAstGrammarTypeReference) {
-      RelAstGrammarTypeReference reference = (RelAstGrammarTypeReference) element;
-      if (RelAstGrammarUtil.findTypeDecl(element.getProject(), reference.getName()).isEmpty()) {
+    } else if (element instanceof GrammarTypeReference) {
+      GrammarTypeReference reference = (GrammarTypeReference) element;
+      if (GrammarUtil.findTypeDecl(element.getProject(), reference.getName()).isEmpty()) {
         holder.newAnnotation(HighlightSeverity.ERROR, "Undefined reference")
           .range(element.getTextRange())
           .highlightType(ProblemHighlightType.ERROR)
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarBlock.java b/src/main/java/org/jastadd/tooling/grammar/GrammarBlock.java
similarity index 75%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarBlock.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarBlock.java
index 7aca9c6..8dffa81 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarBlock.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarBlock.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.formatting.*;
@@ -11,12 +11,12 @@ import org.jetbrains.annotations.Nullable;
 import java.util.ArrayList;
 import java.util.List;
 
-public class RelAstGrammarBlock extends AbstractBlock {
+public class GrammarBlock extends AbstractBlock {
 
   private final SpacingBuilder spacingBuilder;
 
-  protected RelAstGrammarBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment,
-                               SpacingBuilder spacingBuilder) {
+  protected GrammarBlock(@NotNull ASTNode node, @Nullable Wrap wrap, @Nullable Alignment alignment,
+                         SpacingBuilder spacingBuilder) {
     super(node, wrap, alignment);
     this.spacingBuilder = spacingBuilder;
   }
@@ -27,7 +27,7 @@ public class RelAstGrammarBlock extends AbstractBlock {
     ASTNode child = myNode.getFirstChildNode();
     while (child != null) {
       if (child.getElementType() != TokenType.WHITE_SPACE) {
-        Block block = new RelAstGrammarBlock(child, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(),
+        Block block = new GrammarBlock(child, Wrap.createWrap(WrapType.NONE, false), Alignment.createAlignment(),
           spacingBuilder);
         blocks.add(block);
       }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarChooseByNameContributor.java
similarity index 67%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarChooseByNameContributor.java
index 51ad305..972038e 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarChooseByNameContributor.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarChooseByNameContributor.java
@@ -1,22 +1,22 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.navigation.ChooseByNameContributor;
 import com.intellij.navigation.NavigationItem;
 import com.intellij.openapi.project.Project;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class RelAstGrammarChooseByNameContributor implements ChooseByNameContributor {
+public class GrammarChooseByNameContributor implements ChooseByNameContributor {
 
   @NotNull
   @Override
   public String @NotNull [] getNames(Project project, boolean includeNonProjectItems) {
-    List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project);
+    List<GrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project);
     List<String> names = new ArrayList<>(typeDecls.size());
-    for (RelAstGrammarTypeDecl typeDecl : typeDecls) {
+    for (GrammarTypeDecl typeDecl : typeDecls) {
       if (typeDecl.getName() != null && typeDecl.getName().length() > 0) {
         names.add(typeDecl.getName());
       }
@@ -28,7 +28,7 @@ public class RelAstGrammarChooseByNameContributor implements ChooseByNameContrib
   @Override
   public NavigationItem @NotNull [] getItemsByName(String name, String pattern, Project project, boolean includeNonProjectItems) {
     // TODO: include non project items
-    List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, name);
+    List<GrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project, name);
     return typeDecls.toArray(new NavigationItem[0]);
   }
 
diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java
new file mode 100644
index 0000000..1d1e1fb
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettings.java
@@ -0,0 +1,12 @@
+package org.jastadd.tooling.grammar;
+
+import com.intellij.psi.codeStyle.CodeStyleSettings;
+import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
+
+public class GrammarCodeStyleSettings extends CustomCodeStyleSettings {
+
+  public GrammarCodeStyleSettings(CodeStyleSettings settings) {
+    super("GrammarCodeStyleSettings", settings);
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettingsProvider.java
similarity index 56%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettingsProvider.java
index ed57139..b41b930 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarCodeStyleSettingsProvider.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCodeStyleSettingsProvider.java
@@ -1,20 +1,20 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.application.options.CodeStyleAbstractConfigurable;
-  import com.intellij.application.options.CodeStyleAbstractPanel;
-  import com.intellij.application.options.TabbedLanguageCodeStylePanel;
-  import com.intellij.psi.codeStyle.CodeStyleConfigurable;
-  import com.intellij.psi.codeStyle.CodeStyleSettings;
-  import com.intellij.psi.codeStyle.CodeStyleSettingsProvider;
-  import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
-  import org.jetbrains.annotations.NotNull;
-  import org.jetbrains.annotations.Nullable;
+import com.intellij.application.options.CodeStyleAbstractPanel;
+import com.intellij.application.options.TabbedLanguageCodeStylePanel;
+import com.intellij.psi.codeStyle.CodeStyleConfigurable;
+import com.intellij.psi.codeStyle.CodeStyleSettings;
+import com.intellij.psi.codeStyle.CodeStyleSettingsProvider;
+import com.intellij.psi.codeStyle.CustomCodeStyleSettings;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
 
-public class RelAstGrammarCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
+public class GrammarCodeStyleSettingsProvider extends CodeStyleSettingsProvider {
 
   @Override
   public CustomCodeStyleSettings createCustomSettings(CodeStyleSettings settings) {
-    return new RelAstGrammarCodeStyleSettings(settings);
+    return new GrammarCodeStyleSettings(settings);
   }
 
   @Nullable
@@ -36,7 +36,7 @@ public class RelAstGrammarCodeStyleSettingsProvider extends CodeStyleSettingsPro
   private static class SimpleCodeStyleMainPanel extends TabbedLanguageCodeStylePanel {
 
     public SimpleCodeStyleMainPanel(CodeStyleSettings currentSettings, CodeStyleSettings settings) {
-      super(RelAstGrammar.INSTANCE, currentSettings, settings);
+      super(Grammar.INSTANCE, currentSettings, settings);
     }
 
   }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarColorSettingsPage.java b/src/main/java/org/jastadd/tooling/grammar/GrammarColorSettingsPage.java
similarity index 50%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarColorSettingsPage.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarColorSettingsPage.java
index 3300b1e..dd5ee32 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarColorSettingsPage.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarColorSettingsPage.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.openapi.editor.colors.TextAttributesKey;
@@ -6,33 +6,34 @@ import com.intellij.openapi.fileTypes.SyntaxHighlighter;
 import com.intellij.openapi.options.colors.AttributesDescriptor;
 import com.intellij.openapi.options.colors.ColorDescriptor;
 import com.intellij.openapi.options.colors.ColorSettingsPage;
+import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 import java.util.Map;
 
-public class RelAstGrammarColorSettingsPage implements ColorSettingsPage {
+public class GrammarColorSettingsPage implements ColorSettingsPage {
 
   private static final AttributesDescriptor[] DESCRIPTORS = new AttributesDescriptor[]{
 
-    new AttributesDescriptor("Keyword", RelAstGrammarSyntaxHighlighter.KEYWORD),
-    new AttributesDescriptor("Production Rule Symbol", RelAstGrammarSyntaxHighlighter.ASSIGN),
-    new AttributesDescriptor("Relation Direction", RelAstGrammarSyntaxHighlighter.RELATON_DIR),
-    new AttributesDescriptor("Superclass/Component Name", RelAstGrammarSyntaxHighlighter.COL),
-    new AttributesDescriptor("Comma", RelAstGrammarSyntaxHighlighter.COMMA),
-    new AttributesDescriptor("Documentation Comment", RelAstGrammarSyntaxHighlighter.DOCCOMMENT),
-    new AttributesDescriptor("Namespace Qualifier Dot", RelAstGrammarSyntaxHighlighter.DOT),
-    new AttributesDescriptor("Identifier", RelAstGrammarSyntaxHighlighter.ID),
-    new AttributesDescriptor("Terminal Symbol Bracket", RelAstGrammarSyntaxHighlighter.ANGLE_BRACKET),
-    new AttributesDescriptor("Block Comment", RelAstGrammarSyntaxHighlighter.MULTILINECOMMENT),
-    new AttributesDescriptor("0..1 Multiplicity", RelAstGrammarSyntaxHighlighter.QUESTION_MARK),
-    new AttributesDescriptor("Optional Bracket", RelAstGrammarSyntaxHighlighter.BRACKET),
-    new AttributesDescriptor("Semicolon", RelAstGrammarSyntaxHighlighter.SCOL),
-    new AttributesDescriptor("Line Comment", RelAstGrammarSyntaxHighlighter.SINGLELINECOMMENT),
-    new AttributesDescriptor("NTA Bracket", RelAstGrammarSyntaxHighlighter.SLASH),
-    new AttributesDescriptor("Star Multiplicity", RelAstGrammarSyntaxHighlighter.STAR),
-    new AttributesDescriptor("Bad Value", RelAstGrammarSyntaxHighlighter.BAD_CHARACTER)
+    new AttributesDescriptor("Keyword", GrammarSyntaxHighlighter.KEYWORD),
+    new AttributesDescriptor("Production Rule Symbol", GrammarSyntaxHighlighter.ASSIGN),
+    new AttributesDescriptor("Relation Direction", GrammarSyntaxHighlighter.RELATON_DIR),
+    new AttributesDescriptor("Superclass/Component Name", GrammarSyntaxHighlighter.COL),
+    new AttributesDescriptor("Comma", GrammarSyntaxHighlighter.COMMA),
+    new AttributesDescriptor("Documentation Comment", GrammarSyntaxHighlighter.DOCCOMMENT),
+    new AttributesDescriptor("Namespace Qualifier Dot", GrammarSyntaxHighlighter.DOT),
+    new AttributesDescriptor("Identifier", GrammarSyntaxHighlighter.ID),
+    new AttributesDescriptor("Terminal Symbol Bracket", GrammarSyntaxHighlighter.ANGLE_BRACKET),
+    new AttributesDescriptor("Block Comment", GrammarSyntaxHighlighter.MULTILINECOMMENT),
+    new AttributesDescriptor("0..1 Multiplicity", GrammarSyntaxHighlighter.QUESTION_MARK),
+    new AttributesDescriptor("Optional Bracket", GrammarSyntaxHighlighter.BRACKET),
+    new AttributesDescriptor("Semicolon", GrammarSyntaxHighlighter.SCOL),
+    new AttributesDescriptor("Line Comment", GrammarSyntaxHighlighter.SINGLELINECOMMENT),
+    new AttributesDescriptor("NTA Bracket", GrammarSyntaxHighlighter.SLASH),
+    new AttributesDescriptor("Star Multiplicity", GrammarSyntaxHighlighter.STAR),
+    new AttributesDescriptor("Bad Value", GrammarSyntaxHighlighter.BAD_CHARACTER)
   };
 
   @Nullable
@@ -44,7 +45,7 @@ public class RelAstGrammarColorSettingsPage implements ColorSettingsPage {
   @NotNull
   @Override
   public SyntaxHighlighter getHighlighter() {
-    return new RelAstGrammarSyntaxHighlighter();
+    return new GrammarSyntaxHighlighter();
   }
 
   @NotNull
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCommenter.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCommenter.java
similarity index 78%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarCommenter.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarCommenter.java
index 7196de8..6d414e9 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarCommenter.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCommenter.java
@@ -1,10 +1,10 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.lang.Commenter;
-  import org.jetbrains.annotations.Nullable;
+import org.jetbrains.annotations.Nullable;
 
-public class RelAstGrammarCommenter implements Commenter {
+public class GrammarCommenter implements Commenter {
 
   @Nullable
   @Override
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java
similarity index 77%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java
index 0a9d799..ee35690 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarCompletionContributor.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java
@@ -1,29 +1,30 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.codeInsight.completion.*;
 import com.intellij.codeInsight.lookup.LookupElementBuilder;
 import com.intellij.patterns.PlatformPatterns;
 import com.intellij.util.ProcessingContext;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-import org.jastadd.tooling.psi.RelAstGrammarElementFactory;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
-import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
+import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
+import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarCompletionContributor extends CompletionContributor {
+public class GrammarCompletionContributor extends CompletionContributor {
 
   public static final String COMPLETION_ELEMENT_SUFFIX = "IntellijIdeaRulezzz";
 
-  public RelAstGrammarCompletionContributor() {
+  public GrammarCompletionContributor() {
 
     // add completion in definition of relations
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID).afterLeaf("rel", "<->", "->", "<-"),
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID).afterLeaf("rel", "<->", "->", "<-"),
       new CompletionProvider<CompletionParameters>() {
         public void addCompletions(@NotNull CompletionParameters parameters,
                                    @NotNull ProcessingContext context,
                                    @NotNull CompletionResultSet resultSet) {
-          for (RelAstGrammarTypeDecl decl : RelAstGrammarUtil.findTypeDecl(parameters.getPosition().getProject())) {
-            RelAstGrammarTypeReference ref = RelAstGrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName());
+          for (GrammarTypeDecl decl : GrammarUtil.findTypeDecl(parameters.getPosition().getProject())) {
+            GrammarTypeReference ref = GrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName());
             resultSet.addElement(LookupElementBuilder.create(ref).withIcon(JastAddIcons.FILE).withTypeText(decl.getContainingFile().getName()));
           }
         }
@@ -31,10 +32,10 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
     );
 
     // add "* ", "? " after REL ID DOT ID
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID)
         .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string
         .afterLeaf(".")
-        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
+        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))),
       new CompletionProvider<CompletionParameters>() {
         public void addCompletions(@NotNull CompletionParameters parameters,
@@ -48,10 +49,10 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
     );
     // add "*", "?" after <-  ID DOT ID
     // add "*", "?" after <-> ID DOT ID
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID)
         .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string
         .afterLeaf(".")
-        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
+        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("<-", "<->"))),
       new CompletionProvider<CompletionParameters>() {
         public void addCompletions(@NotNull CompletionParameters parameters,
@@ -64,10 +65,10 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
       }
     );
     // add " -> ", " <-> " after REL ID DOT ID <SPACE>
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
-        .afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID)
+        .afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf("."))
-        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))))
+        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel")))),
       new CompletionProvider<CompletionParameters>() {
         public void addCompletions(@NotNull CompletionParameters parameters,
@@ -80,11 +81,11 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
     );
     // add " -> ", " <-> " after REL ID DOT ID * <SPACE>
     // add " -> ", " <-> " after REL ID DOT ID ? <SPACE>
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID)
         .afterLeaf("?", "*")
-        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))
+        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(".")))
-        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID)))))
+        .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID)))))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel"))))),
       new CompletionProvider<CompletionParameters>() {
         public void addCompletions(@NotNull CompletionParameters parameters,
@@ -98,7 +99,7 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
     // add "." after REL ID
     // add "." after <-> ID
     // add "." after <- ID
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID)
         .withTextLengthLongerThan(COMPLETION_ELEMENT_SUFFIX.length()) // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/206752355-The-dreaded-IntellijIdeaRulezzz-string
         .afterLeaf("rel", "<->", "<-"),
       new CompletionProvider<CompletionParameters>() {
@@ -111,8 +112,8 @@ public class RelAstGrammarCompletionContributor extends CompletionContributor {
       }
     );
     // add " <- " after REL ID <SPACE>
-    extend(CompletionType.BASIC, PlatformPatterns.psiElement(RelAstGrammarTypes.ID)
-        .afterLeaf(PlatformPatterns.psiElement(RelAstGrammarTypes.ID))
+    extend(CompletionType.BASIC, PlatformPatterns.psiElement(GrammarTypes.ID)
+        .afterLeaf(PlatformPatterns.psiElement(GrammarTypes.ID))
         .afterLeaf(PlatformPatterns.psiElement().afterLeaf("rel")),
       new CompletionProvider<CompletionParameters>() {
         public void addCompletions(@NotNull CompletionParameters parameters,
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFileType.java b/src/main/java/org/jastadd/tooling/grammar/GrammarFileType.java
similarity index 66%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarFileType.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarFileType.java
index 0b34211..f73d87b 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarFileType.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarFileType.java
@@ -1,17 +1,18 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.openapi.fileTypes.LanguageFileType;
+import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 
-public class RelAstGrammarFileType extends LanguageFileType {
+public class GrammarFileType extends LanguageFileType {
 
-  public static final RelAstGrammarFileType INSTANCE = new RelAstGrammarFileType();
+  public static final GrammarFileType INSTANCE = new GrammarFileType();
 
-  private RelAstGrammarFileType() {
-    super(RelAstGrammar.INSTANCE);
+  private GrammarFileType() {
+    super(Grammar.INSTANCE);
   }
 
   @NotNull
@@ -32,7 +33,6 @@ public class RelAstGrammarFileType extends LanguageFileType {
     return "relast";
   }
 
-
   @Nullable
   @Override
   public Icon getIcon() {
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarFindUsageProvider.java
similarity index 59%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarFindUsageProvider.java
index 4133679..a7c2543 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarFindUsageProvider.java
@@ -1,31 +1,31 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.lang.cacheBuilder.DefaultWordsScanner;
 import com.intellij.lang.cacheBuilder.WordsScanner;
 import com.intellij.lang.findUsages.FindUsagesProvider;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.tree.TokenSet;
-import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
+import org.jastadd.tooling.grammar.lexer.GrammarLexerAdapter;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-public class RelAstGrammarFindUsageProvider implements FindUsagesProvider {
+public class GrammarFindUsageProvider implements FindUsagesProvider {
 
   @Nullable
   @Override
   public WordsScanner getWordsScanner() {
     // TODO comments are not working
-    return new DefaultWordsScanner(new RelAstGrammarFlexAdapter(),
-      TokenSet.create(RelAstGrammarTypes.ID),
-      TokenSet.create(RelAstGrammarTypes.MULTILINECOMMENT, RelAstGrammarTypes.DOCCOMMENT, RelAstGrammarTypes.SINGLELINECOMMENT),
+    return new DefaultWordsScanner(new GrammarLexerAdapter(),
+      TokenSet.create(GrammarTypes.ID),
+      TokenSet.create(GrammarTypes.MULTILINECOMMENT, GrammarTypes.DOCCOMMENT, GrammarTypes.SINGLELINECOMMENT),
       TokenSet.EMPTY);
   }
 
   @Override
   public boolean canFindUsagesFor(@NotNull PsiElement psiElement) {
-    return psiElement instanceof RelAstGrammarTypeDecl; // was: PsiNamedElement
+    return psiElement instanceof GrammarTypeDecl; // was: PsiNamedElement
   }
 
   @Nullable
@@ -37,7 +37,7 @@ public class RelAstGrammarFindUsageProvider implements FindUsagesProvider {
   @NotNull
   @Override
   public String getType(@NotNull PsiElement element) {
-    if (element instanceof RelAstGrammarTypeDecl) {
+    if (element instanceof GrammarTypeDecl) {
       return "JastAdd Nonterminal Type";
     } else {
       return "";
@@ -47,8 +47,8 @@ public class RelAstGrammarFindUsageProvider implements FindUsagesProvider {
   @NotNull
   @Override
   public String getDescriptiveName(@NotNull PsiElement element) {
-    if (element instanceof RelAstGrammarTypeDecl) {
-      RelAstGrammarTypeDecl decl = (RelAstGrammarTypeDecl) element;
+    if (element instanceof GrammarTypeDecl) {
+      GrammarTypeDecl decl = (GrammarTypeDecl) element;
       if (decl.getName() != null) {
         return decl.getName();
       }
@@ -59,7 +59,7 @@ public class RelAstGrammarFindUsageProvider implements FindUsagesProvider {
   @NotNull
   @Override
   public String getNodeText(@NotNull PsiElement element, boolean useFullName) {
-    if (element instanceof RelAstGrammarTypeDecl) {
+    if (element instanceof GrammarTypeDecl) {
       return element.getText();
     } else {
       return "";
diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java b/src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java
new file mode 100644
index 0000000..1b5ec38
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarFormattingModelBuilder.java
@@ -0,0 +1,58 @@
+package org.jastadd.tooling.grammar;
+
+import com.intellij.formatting.*;
+import com.intellij.lang.ASTNode;
+import com.intellij.openapi.util.TextRange;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.intellij.psi.codeStyle.CodeStyleSettings;
+import com.intellij.psi.codeStyle.CommonCodeStyleSettings;
+import com.intellij.psi.tree.TokenSet;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class GrammarFormattingModelBuilder implements FormattingModelBuilder {
+
+  private static SpacingBuilder createSpaceBuilder(CodeStyleSettings settings) {
+    final CommonCodeStyleSettings commonSettings = settings.getCommonSettings(Grammar.INSTANCE.getID());
+
+    final TokenSet roleMultiplicityTokens = TokenSet.create(GrammarTypes.STAR, GrammarTypes.QUESTION_MARK);
+    final TokenSet relationDirectionTokens = TokenSet.create(GrammarTypes.LEFT, GrammarTypes.RIGHT, GrammarTypes.BIDIRECTIONAL);
+    final TokenSet declarationTokens = TokenSet.create(GrammarTypes.TYPE_DECL, GrammarTypes.RELATION);
+
+    return new SpacingBuilder(settings, Grammar.INSTANCE)
+      .around(GrammarTypes.ASSIGN).spaceIf(commonSettings.SPACE_AROUND_ASSIGNMENT_OPERATORS)
+      .before(declarationTokens).none()
+      .before(GrammarTypes.SCOL).spaceIf(commonSettings.SPACE_BEFORE_SEMICOLON)
+      .around(relationDirectionTokens).spaceIf(commonSettings.SPACE_AROUND_RELATIONAL_OPERATORS)
+      .between(GrammarTypes.COMPONENT, GrammarTypes.COMPONENT).spaces(1)
+      .around(GrammarTypes.DOT).none()
+      .before(roleMultiplicityTokens).spaceIf(commonSettings.SPACE_AROUND_UNARY_OPERATOR)
+      .aroundInside(GrammarTypes.COL, GrammarTypes.TYPE_DECL).spaceIf(commonSettings.SPACE_AROUND_ADDITIVE_OPERATORS)
+      .aroundInside(GrammarTypes.COL, GrammarTypes.COMPONENT).none()
+      .withinPair(GrammarTypes.LT, GrammarTypes.GT).spaceIf(commonSettings.SPACE_WITHIN_CAST_PARENTHESES)
+      .withinPair(GrammarTypes.LBRACKET, GrammarTypes.RBRACKET).spaceIf(commonSettings.SPACE_WITHIN_BRACKETS)
+      .between(declarationTokens, GrammarTypes.COMMENT).spaces(1)
+      .afterInside(GrammarTypes.SLASH, GrammarTypes.NTA_COMPONENT).none()
+      .beforeInside(GrammarTypes.SLASH, GrammarTypes.NTA_COMPONENT).none();
+  }
+
+  @Override
+  public @NotNull FormattingModel createModel(PsiElement element, CodeStyleSettings settings) {
+    return FormattingModelProvider
+      .createFormattingModelForPsiFile(element.getContainingFile(),
+        new GrammarBlock(element.getNode(),
+          Wrap.createWrap(WrapType.NONE, false),
+          Alignment.createAlignment(),
+          createSpaceBuilder(settings)),
+        settings);
+  }
+
+  @Nullable
+  @Override
+  public TextRange getRangeAffectingIndent(PsiFile file, int offset, ASTNode elementAtOffset) {
+    return null;
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarJavaAnnotator.java b/src/main/java/org/jastadd/tooling/grammar/GrammarJavaAnnotator.java
similarity index 89%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarJavaAnnotator.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarJavaAnnotator.java
index 5beaeff..3b409aa 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarJavaAnnotator.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarJavaAnnotator.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.codeInspection.ProblemHighlightType;
@@ -10,16 +10,15 @@ import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.javadoc.PsiDocComment;
 import com.intellij.psi.javadoc.PsiDocTag;
-import org.jastadd.tooling.psi.RelAstGrammarComponent;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Arrays;
 import java.util.Optional;
 import java.util.stream.Collectors;
 
-import static org.jastadd.tooling.RelAstGrammarUtil.asReferenceToTypeDecl;
+import static org.jastadd.tooling.grammar.GrammarUtil.asReferenceToTypeDecl;
 
-public class RelAstGrammarJavaAnnotator implements Annotator {
+public class GrammarJavaAnnotator implements Annotator {
 
   @Override
   public void annotate(@NotNull final PsiElement element, @NotNull AnnotationHolder holder) {
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarLanguageCodeStyleSettingsProvider.java
similarity index 93%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarLanguageCodeStyleSettingsProvider.java
index 51e717e..06f77cb 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarLanguageCodeStyleSettingsProvider.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarLanguageCodeStyleSettingsProvider.java
@@ -1,16 +1,16 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.lang.Language;
 import com.intellij.psi.codeStyle.CodeStyleSettingsCustomizable;
 import com.intellij.psi.codeStyle.LanguageCodeStyleSettingsProvider;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {
+public class GrammarLanguageCodeStyleSettingsProvider extends LanguageCodeStyleSettingsProvider {
 
   @NotNull
   @Override
   public Language getLanguage() {
-    return RelAstGrammar.INSTANCE;
+    return Grammar.INSTANCE;
   }
 
   @Override
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarLineMarkerProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarLineMarkerProvider.java
similarity index 74%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarLineMarkerProvider.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarLineMarkerProvider.java
index 1e87008..169e729 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarLineMarkerProvider.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarLineMarkerProvider.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.codeInsight.daemon.RelatedItemLineMarkerInfo;
 import com.intellij.codeInsight.daemon.RelatedItemLineMarkerProvider;
@@ -6,16 +6,17 @@ import com.intellij.codeInsight.navigation.NavigationGutterIconBuilder;
 import com.intellij.psi.PsiClass;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiIdentifier;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
+import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Optional;
 
-import static org.jastadd.tooling.RelAstGrammarUtil.asReferenceToTypeDecl;
+import static org.jastadd.tooling.grammar.GrammarUtil.asReferenceToTypeDecl;
 
-public class RelAstGrammarLineMarkerProvider extends RelatedItemLineMarkerProvider {
+public class GrammarLineMarkerProvider extends RelatedItemLineMarkerProvider {
 
   @Override
   protected void collectNavigationMarkers(@NotNull PsiElement element,
@@ -32,7 +33,7 @@ public class RelAstGrammarLineMarkerProvider extends RelatedItemLineMarkerProvid
     }
 
     // Get the list of typeDecls for given key
-    List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(element.getProject(), classOptional.get().getName());
+    List<GrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(element.getProject(), classOptional.get().getName());
     if (!typeDecls.isEmpty()) {
       NavigationGutterIconBuilder<PsiElement> builder =
         NavigationGutterIconBuilder.create(JastAddIcons.FILE)
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarRefactoringSupportProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java
similarity index 60%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarRefactoringSupportProvider.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java
index ae38c46..1e70ce5 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarRefactoringSupportProvider.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java
@@ -1,20 +1,20 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.lang.refactoring.RefactoringSupportProvider;
 import com.intellij.psi.PsiElement;
-import org.jastadd.tooling.psi.RelAstGrammarDeclaredName;
-import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarDeclaredName;
+import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-public class RelAstGrammarRefactoringSupportProvider extends RefactoringSupportProvider {
+public class GrammarRefactoringSupportProvider extends RefactoringSupportProvider {
 
   @Override
   public boolean isMemberInplaceRenameAvailable(@NotNull PsiElement elementToRename, @Nullable PsiElement context) {
     // in-place rename is still not available since not all requirements are met
     // see https://intellij-support.jetbrains.com/hc/en-us/community/posts/360006918740-How-do-I-enable-in-place-rename-Renaming-via-dialog-works-fine-
-    return (elementToRename instanceof RelAstGrammarDeclaredName) || (elementToRename instanceof RelAstGrammarTypeReference);
+    return (elementToRename instanceof GrammarDeclaredName) || (elementToRename instanceof GrammarTypeReference);
   }
 
 }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java b/src/main/java/org/jastadd/tooling/grammar/GrammarReference.java
similarity index 72%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarReference.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarReference.java
index ae8f873..3c6fc4b 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarReference.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarReference.java
@@ -1,22 +1,23 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.codeInsight.lookup.LookupElement;
 import com.intellij.codeInsight.lookup.LookupElementBuilder;
 import com.intellij.openapi.project.Project;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.psi.*;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
+import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference {
+public class GrammarReference extends PsiReferenceBase<PsiElement> implements PsiPolyVariantReference {
 
   private final String key;
 
-  public RelAstGrammarReference(@NotNull PsiElement element, TextRange textRange) {
+  public GrammarReference(@NotNull PsiElement element, TextRange textRange) {
     super(element, textRange);
     key = element.getText().substring(textRange.getStartOffset(), textRange.getEndOffset());
   }
@@ -25,9 +26,9 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme
   @Override
   public ResolveResult @NotNull [] multiResolve(boolean incompleteCode) {
     Project project = myElement.getProject();
-    final List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project, key);
+    final List<GrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project, key);
     List<ResolveResult> results = new ArrayList<>();
-    for (RelAstGrammarTypeDecl typeDecl : typeDecls) {
+    for (GrammarTypeDecl typeDecl : typeDecls) {
       results.add(new PsiElementResolveResult(typeDecl));
     }
     return results.toArray(new ResolveResult[0]);
@@ -44,9 +45,9 @@ public class RelAstGrammarReference extends PsiReferenceBase<PsiElement> impleme
   @Override
   public Object @NotNull [] getVariants() {
     Project project = myElement.getProject();
-    List<RelAstGrammarTypeDecl> typeDecls = RelAstGrammarUtil.findTypeDecl(project);
+    List<GrammarTypeDecl> typeDecls = GrammarUtil.findTypeDecl(project);
     List<LookupElement> variants = new ArrayList<>();
-    for (final RelAstGrammarTypeDecl typeDecl : typeDecls) {
+    for (final GrammarTypeDecl typeDecl : typeDecls) {
       if (typeDecl.getName() != null && typeDecl.getName().length() > 0) {
         variants.add(LookupElementBuilder
           .create(typeDecl).withIcon(JastAddIcons.FILE)
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarReferenceContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java
similarity index 69%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarReferenceContributor.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java
index 326b075..728058c 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarReferenceContributor.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java
@@ -1,28 +1,28 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.openapi.util.TextRange;
 import com.intellij.patterns.PlatformPatterns;
 import com.intellij.psi.*;
 import com.intellij.util.ProcessingContext;
-import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarReferenceContributor extends PsiReferenceContributor {
+public class GrammarReferenceContributor extends PsiReferenceContributor {
 
   @Override
   public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
-    registrar.registerReferenceProvider(PlatformPatterns.psiElement(RelAstGrammarTypeReference.class),
+    registrar.registerReferenceProvider(PlatformPatterns.psiElement(GrammarTypeReference.class),
       new PsiReferenceProvider() {
         @NotNull
         @Override
         public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element,
                                                                @NotNull ProcessingContext context) {
 
-          RelAstGrammarTypeReference typeReference = (RelAstGrammarTypeReference) element;
+          GrammarTypeReference typeReference = (GrammarTypeReference) element;
           String value = typeReference.getText();
           if (value != null) {
             TextRange range = new TextRange(0, value.length());
-            return new PsiReference[]{new RelAstGrammarReference(element, range)};
+            return new PsiReference[]{new GrammarReference(element, range)};
           }
           return PsiReference.EMPTY_ARRAY;
         }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarRemoveRedundantComponentNameFix.java b/src/main/java/org/jastadd/tooling/grammar/GrammarRemoveRedundantComponentNameFix.java
similarity index 72%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarRemoveRedundantComponentNameFix.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarRemoveRedundantComponentNameFix.java
index 01a095d..b906a76 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarRemoveRedundantComponentNameFix.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarRemoveRedundantComponentNameFix.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.codeInsight.intention.impl.BaseIntentionAction;
 import com.intellij.openapi.editor.Editor;
@@ -6,15 +6,15 @@ import com.intellij.openapi.project.Project;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.PsiFile;
 import com.intellij.util.IncorrectOperationException;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-import org.jastadd.tooling.psi.RelAstGrammarComponent;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+import org.jastadd.tooling.grammar.psi.GrammarComponent;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarRemoveRedundantComponentNameFix extends BaseIntentionAction {
+public class GrammarRemoveRedundantComponentNameFix extends BaseIntentionAction {
 
-  private final RelAstGrammarComponent component;
+  private final GrammarComponent component;
 
-  public RelAstGrammarRemoveRedundantComponentNameFix(RelAstGrammarComponent component) {
+  public GrammarRemoveRedundantComponentNameFix(GrammarComponent component) {
     this.component = component;
   }
 
@@ -40,7 +40,7 @@ public class RelAstGrammarRemoveRedundantComponentNameFix extends BaseIntentionA
     IncorrectOperationException {
     PsiElement first = component.getDeclaredName();
     PsiElement last = component.getDeclaredName();
-    while (last != null && last.getNode().getElementType() != RelAstGrammarTypes.COL) {
+    while (last != null && last.getNode().getElementType() != GrammarTypes.COL) {
       last = last.getNextSibling();
     }
     if (last == null) {
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewElement.java
similarity index 68%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewElement.java
index dd6e74d..013f450 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewElement.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.ide.projectView.PresentationData;
 import com.intellij.ide.structureView.StructureViewTreeElement;
@@ -7,19 +7,19 @@ import com.intellij.ide.util.treeView.smartTree.TreeElement;
 import com.intellij.navigation.ItemPresentation;
 import com.intellij.psi.NavigatablePsiElement;
 import com.intellij.psi.util.PsiTreeUtil;
-import org.jastadd.tooling.psi.RelAstGrammarFile;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
-import org.jastadd.tooling.psi.impl.RelAstGrammarTypeDeclImpl;
+import org.jastadd.tooling.grammar.psi.GrammarFile;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
+import org.jastadd.tooling.grammar.psi.impl.GrammarTypeDeclImpl;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.ArrayList;
 import java.util.List;
 
-public class RelAstGrammarStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
+public class GrammarStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
 
   private final NavigatablePsiElement myElement;
 
-  public RelAstGrammarStructureViewElement(NavigatablePsiElement element) {
+  public GrammarStructureViewElement(NavigatablePsiElement element) {
     this.myElement = element;
   }
 
@@ -60,11 +60,11 @@ public class RelAstGrammarStructureViewElement implements StructureViewTreeEleme
   @NotNull
   @Override
   public TreeElement @NotNull [] getChildren() {
-    if (myElement instanceof RelAstGrammarFile) {
-      List<RelAstGrammarTypeDecl> properties = PsiTreeUtil.getChildrenOfTypeAsList(myElement, RelAstGrammarTypeDecl.class);
+    if (myElement instanceof GrammarFile) {
+      List<GrammarTypeDecl> properties = PsiTreeUtil.getChildrenOfTypeAsList(myElement, GrammarTypeDecl.class);
       List<TreeElement> treeElements = new ArrayList<>(properties.size());
-      for (RelAstGrammarTypeDecl property : properties) {
-        treeElements.add(new RelAstGrammarStructureViewElement((RelAstGrammarTypeDeclImpl) property));
+      for (GrammarTypeDecl property : properties) {
+        treeElements.add(new GrammarStructureViewElement((GrammarTypeDeclImpl) property));
       }
       return treeElements.toArray(new TreeElement[0]);
     }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewFactory.java
similarity index 80%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewFactory.java
index 23b14e4..1262848 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewFactory.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.ide.structureView.StructureViewBuilder;
 import com.intellij.ide.structureView.StructureViewModel;
@@ -9,7 +9,7 @@ import com.intellij.psi.PsiFile;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-public class RelAstGrammarStructureViewFactory implements PsiStructureViewFactory {
+public class GrammarStructureViewFactory implements PsiStructureViewFactory {
 
   @Nullable
   @Override
@@ -18,7 +18,7 @@ public class RelAstGrammarStructureViewFactory implements PsiStructureViewFactor
       @NotNull
       @Override
       public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
-        return new RelAstGrammarStructureViewModel(psiFile);
+        return new GrammarStructureViewModel(psiFile);
       }
     };
   }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewModel.java
similarity index 65%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewModel.java
index 9f164f0..98994e4 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarStructureViewModel.java
@@ -1,18 +1,18 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.ide.structureView.StructureViewModel;
 import com.intellij.ide.structureView.StructureViewModelBase;
 import com.intellij.ide.structureView.StructureViewTreeElement;
 import com.intellij.ide.util.treeView.smartTree.Sorter;
 import com.intellij.psi.PsiFile;
-import org.jastadd.tooling.psi.RelAstGrammarFile;
+import org.jastadd.tooling.grammar.psi.GrammarFile;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarStructureViewModel extends StructureViewModelBase implements
+public class GrammarStructureViewModel extends StructureViewModelBase implements
   StructureViewModel.ElementInfoProvider {
 
-  public RelAstGrammarStructureViewModel(PsiFile psiFile) {
-    super(psiFile, new RelAstGrammarStructureViewElement(psiFile));
+  public GrammarStructureViewModel(PsiFile psiFile) {
+    super(psiFile, new GrammarStructureViewElement(psiFile));
   }
 
   @NotNull
@@ -28,7 +28,7 @@ public class RelAstGrammarStructureViewModel extends StructureViewModelBase impl
 
   @Override
   public boolean isAlwaysLeaf(StructureViewTreeElement element) {
-    return element instanceof RelAstGrammarFile;
+    return element instanceof GrammarFile;
   }
 
 }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighter.java b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighter.java
similarity index 77%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighter.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighter.java
index 23bc610..31dda53 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighter.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighter.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.lexer.Lexer;
@@ -8,13 +8,13 @@ import com.intellij.openapi.editor.colors.TextAttributesKey;
 import com.intellij.openapi.fileTypes.SyntaxHighlighterBase;
 import com.intellij.psi.TokenType;
 import com.intellij.psi.tree.IElementType;
-import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
+import org.jastadd.tooling.grammar.lexer.GrammarLexerAdapter;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
 import org.jetbrains.annotations.NotNull;
 
 import static com.intellij.openapi.editor.colors.TextAttributesKey.createTextAttributesKey;
 
-public class RelAstGrammarSyntaxHighlighter extends SyntaxHighlighterBase {
+public class GrammarSyntaxHighlighter extends SyntaxHighlighterBase {
 
   public static final TextAttributesKey KEYWORD = createTextAttributesKey("RELAST_KEYWORD", DefaultLanguageHighlighterColors.KEYWORD);
   public static final TextAttributesKey ASSIGN = createTextAttributesKey("RELAST_ASSIGN", DefaultLanguageHighlighterColors.OPERATION_SIGN);
@@ -57,54 +57,54 @@ public class RelAstGrammarSyntaxHighlighter extends SyntaxHighlighterBase {
   @NotNull
   @Override
   public Lexer getHighlightingLexer() {
-    return new RelAstGrammarFlexAdapter();
+    return new GrammarLexerAdapter();
   }
 
   @NotNull
   @Override
   public TextAttributesKey @NotNull [] getTokenHighlights(IElementType tokenType) {
 
-    if (tokenType.equals(RelAstGrammarTypes.ABSTRACT)) {
+    if (tokenType.equals(GrammarTypes.ABSTRACT)) {
       return KEYWORD_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.ASSIGN)) {
+    } else if (tokenType.equals(GrammarTypes.ASSIGN)) {
       return ASSIGN_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.BIDIRECTIONAL)) {
+    } else if (tokenType.equals(GrammarTypes.BIDIRECTIONAL)) {
       return RELATION_DIR_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.COL)) {
+    } else if (tokenType.equals(GrammarTypes.COL)) {
       return COL_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.COMMA)) {
+    } else if (tokenType.equals(GrammarTypes.COMMA)) {
       return COMMA_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.DOCCOMMENT)) {
+    } else if (tokenType.equals(GrammarTypes.DOCCOMMENT)) {
       return DOCCOMMENT_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.DOT)) {
+    } else if (tokenType.equals(GrammarTypes.DOT)) {
       return DOT_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.GT)) {
+    } else if (tokenType.equals(GrammarTypes.GT)) {
       return ANGLE_BRACKET_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.ID)) {
+    } else if (tokenType.equals(GrammarTypes.ID)) {
       return ID_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.LBRACKET)) {
+    } else if (tokenType.equals(GrammarTypes.LBRACKET)) {
       return BRACKET_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.LEFT)) {
+    } else if (tokenType.equals(GrammarTypes.LEFT)) {
       return RELATION_DIR_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.LT)) {
+    } else if (tokenType.equals(GrammarTypes.LT)) {
       return ANGLE_BRACKET_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.MULTILINECOMMENT)) {
+    } else if (tokenType.equals(GrammarTypes.MULTILINECOMMENT)) {
       return MULTILINECOMMENT_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.QUESTION_MARK)) {
+    } else if (tokenType.equals(GrammarTypes.QUESTION_MARK)) {
       return QUESTION_MARK_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.RBRACKET)) {
+    } else if (tokenType.equals(GrammarTypes.RBRACKET)) {
       return BRACKET_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.REL)) {
+    } else if (tokenType.equals(GrammarTypes.REL)) {
       return KEYWORD_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.RIGHT)) {
+    } else if (tokenType.equals(GrammarTypes.RIGHT)) {
       return RELATION_DIR_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.SCOL)) {
+    } else if (tokenType.equals(GrammarTypes.SCOL)) {
       return SCOL_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.SINGLELINECOMMENT)) {
+    } else if (tokenType.equals(GrammarTypes.SINGLELINECOMMENT)) {
       return SINGLELINECOMMENT_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.SLASH)) {
+    } else if (tokenType.equals(GrammarTypes.SLASH)) {
       return SLASH_KEYS;
-    } else if (tokenType.equals(RelAstGrammarTypes.STAR)) {
+    } else if (tokenType.equals(GrammarTypes.STAR)) {
       return STAR_KEYS;
     } else if (tokenType.equals(TokenType.BAD_CHARACTER)) {
       return BAD_CHAR_KEYS;
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighterFactory.java b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighterFactory.java
similarity index 69%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighterFactory.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighterFactory.java
index 2860248..0fb350f 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarSyntaxHighlighterFactory.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarSyntaxHighlighterFactory.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 import com.intellij.openapi.fileTypes.SyntaxHighlighter;
 import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory;
@@ -6,12 +6,12 @@ import com.intellij.openapi.project.Project;
 import com.intellij.openapi.vfs.VirtualFile;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
+public class GrammarSyntaxHighlighterFactory extends SyntaxHighlighterFactory {
 
   @NotNull
   @Override
   public SyntaxHighlighter getSyntaxHighlighter(Project project, VirtualFile virtualFile) {
-    return new RelAstGrammarSyntaxHighlighter();
+    return new GrammarSyntaxHighlighter();
   }
 
 }
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java b/src/main/java/org/jastadd/tooling/grammar/GrammarUtil.java
similarity index 72%
rename from src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java
rename to src/main/java/org/jastadd/tooling/grammar/GrammarUtil.java
index 8a480a0..9c4f0cf 100644
--- a/src/main/java/org/jastadd/tooling/RelAstGrammarUtil.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarUtil.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.grammar;
 
 
 import com.intellij.openapi.project.Project;
@@ -9,16 +9,16 @@ import com.intellij.psi.javadoc.PsiDocTag;
 import com.intellij.psi.search.FileTypeIndex;
 import com.intellij.psi.search.GlobalSearchScope;
 import com.intellij.psi.util.PsiTreeUtil;
-import org.jastadd.tooling.psi.RelAstGrammarFile;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDecl;
+import org.jastadd.tooling.grammar.psi.GrammarFile;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDecl;
 import org.jetbrains.annotations.NotNull;
 
 import java.util.*;
 
 
-public class RelAstGrammarUtil {
+public class GrammarUtil {
 
-  private RelAstGrammarUtil() {
+  private GrammarUtil() {
     // appease SonarLint java:S1118
     throw new IllegalStateException("Utility class");
   }
@@ -30,17 +30,17 @@ public class RelAstGrammarUtil {
    * @param name    to check
    * @return matching TypeDecls
    */
-  public static List<RelAstGrammarTypeDecl> findTypeDecl(Project project, String name) {
-    List<RelAstGrammarTypeDecl> result = new ArrayList<>();
+  public static List<GrammarTypeDecl> findTypeDecl(Project project, String name) {
+    List<GrammarTypeDecl> result = new ArrayList<>();
     Collection<VirtualFile> virtualFiles =
-      FileTypeIndex.getFiles(RelAstGrammarFileType.INSTANCE, GlobalSearchScope.allScope(project));
+      FileTypeIndex.getFiles(GrammarFileType.INSTANCE, GlobalSearchScope.allScope(project));
     for (VirtualFile virtualFile : virtualFiles) {
-      RelAstGrammarFile simpleFile = (RelAstGrammarFile) PsiManager.getInstance(project).findFile(virtualFile);
+      GrammarFile simpleFile = (GrammarFile) PsiManager.getInstance(project).findFile(virtualFile);
       if (simpleFile != null) {
         // TODO check if file is ignored or generated!
-        RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class);
+        GrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, GrammarTypeDecl.class);
         if (typeDecls != null) {
-          for (RelAstGrammarTypeDecl typeDecl : typeDecls) {
+          for (GrammarTypeDecl typeDecl : typeDecls) {
             if (name.equals(typeDecl.getName())) {
               result.add(typeDecl);
             }
@@ -57,15 +57,15 @@ public class RelAstGrammarUtil {
    * @param project current project
    * @return all TypeDecls
    */
-  public static List<RelAstGrammarTypeDecl> findTypeDecl(Project project) {
-    List<RelAstGrammarTypeDecl> result = new ArrayList<>();
+  public static List<GrammarTypeDecl> findTypeDecl(Project project) {
+    List<GrammarTypeDecl> result = new ArrayList<>();
     Collection<VirtualFile> virtualFiles =
-      FileTypeIndex.getFiles(RelAstGrammarFileType.INSTANCE, GlobalSearchScope.allScope(project));
+      FileTypeIndex.getFiles(GrammarFileType.INSTANCE, GlobalSearchScope.allScope(project));
     for (VirtualFile virtualFile : virtualFiles) {
-      RelAstGrammarFile simpleFile = (RelAstGrammarFile) PsiManager.getInstance(project).findFile(virtualFile);
+      GrammarFile simpleFile = (GrammarFile) PsiManager.getInstance(project).findFile(virtualFile);
       if (simpleFile != null) {
         // TODO check if file is ignored or generated!
-        RelAstGrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, RelAstGrammarTypeDecl.class);
+        GrammarTypeDecl[] typeDecls = PsiTreeUtil.getChildrenOfType(simpleFile, GrammarTypeDecl.class);
         if (typeDecls != null) {
           result.addAll(Arrays.asList(typeDecls));
         }
diff --git a/src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java b/src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java
new file mode 100644
index 0000000..1087854
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/lexer/GrammarLexerAdapter.java
@@ -0,0 +1,11 @@
+package org.jastadd.tooling.grammar.lexer;
+
+import com.intellij.lexer.FlexAdapter;
+
+public class GrammarLexerAdapter extends FlexAdapter {
+
+  public GrammarLexerAdapter() {
+    super(new GrammarLexer(null));
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarParserDefinition.java b/src/main/java/org/jastadd/tooling/grammar/parser/GrammarParserDefinition.java
similarity index 69%
rename from src/main/java/org/jastadd/tooling/parser/RelAstGrammarParserDefinition.java
rename to src/main/java/org/jastadd/tooling/grammar/parser/GrammarParserDefinition.java
index 2f47290..5f2ee17 100644
--- a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarParserDefinition.java
+++ b/src/main/java/org/jastadd/tooling/grammar/parser/GrammarParserDefinition.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling.parser;
+package org.jastadd.tooling.grammar.parser;
 
 import com.intellij.lang.ASTNode;
 import com.intellij.lang.ParserDefinition;
@@ -11,23 +11,23 @@ import com.intellij.psi.PsiFile;
 import com.intellij.psi.TokenType;
 import com.intellij.psi.tree.IFileElementType;
 import com.intellij.psi.tree.TokenSet;
-import org.jastadd.tooling.RelAstGrammar;
-import org.jastadd.tooling.lexer.RelAstGrammarFlexAdapter;
-import org.jastadd.tooling.psi.RelAstGrammarFile;
+import org.jastadd.tooling.grammar.Grammar;
+import org.jastadd.tooling.grammar.lexer.GrammarLexerAdapter;
+import org.jastadd.tooling.grammar.psi.GrammarFile;
 import org.jetbrains.annotations.NotNull;
 
 
-public class RelAstGrammarParserDefinition implements ParserDefinition {
+public class GrammarParserDefinition implements ParserDefinition {
 
   public static final TokenSet WHITE_SPACES = TokenSet.create(TokenType.WHITE_SPACE);
-  public static final TokenSet COMMENTS = TokenSet.create(RelAstGrammarTypes.SINGLELINECOMMENT, RelAstGrammarTypes.DOCCOMMENT, RelAstGrammarTypes.MULTILINECOMMENT);
+  public static final TokenSet COMMENTS = TokenSet.create(GrammarTypes.SINGLELINECOMMENT, GrammarTypes.DOCCOMMENT, GrammarTypes.MULTILINECOMMENT);
 
-  public static final IFileElementType FILE = new IFileElementType(RelAstGrammar.INSTANCE);
+  public static final IFileElementType FILE = new IFileElementType(Grammar.INSTANCE);
 
   @NotNull
   @Override
   public Lexer createLexer(Project project) {
-    return new RelAstGrammarFlexAdapter();
+    return new GrammarLexerAdapter();
   }
 
   @NotNull
@@ -51,7 +51,7 @@ public class RelAstGrammarParserDefinition implements ParserDefinition {
   @NotNull
   @Override
   public PsiParser createParser(final Project project) {
-    return new RelAstGrammarParser();
+    return new GrammarParser();
   }
 
   @Override
@@ -61,7 +61,7 @@ public class RelAstGrammarParserDefinition implements ParserDefinition {
 
   @Override
   public PsiFile createFile(FileViewProvider viewProvider) {
-    return new RelAstGrammarFile(viewProvider);
+    return new GrammarFile(viewProvider);
   }
 
   @Override
@@ -72,7 +72,7 @@ public class RelAstGrammarParserDefinition implements ParserDefinition {
   @NotNull
   @Override
   public PsiElement createElement(ASTNode node) {
-    return RelAstGrammarTypes.Factory.createElement(node);
+    return GrammarTypes.Factory.createElement(node);
   }
 
 }
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java
new file mode 100644
index 0000000..05a33fa
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java
@@ -0,0 +1,31 @@
+package org.jastadd.tooling.grammar.psi;
+
+import com.intellij.openapi.project.Project;
+import com.intellij.psi.PsiFileFactory;
+import org.jastadd.tooling.grammar.GrammarFileType;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+
+import java.util.Objects;
+
+public class GrammarElementFactory {
+
+  private GrammarElementFactory() {
+    throw new IllegalStateException("Utility class");
+  }
+
+  public static GrammarDeclaredName createDeclaredName(Project project, String name) {
+    final GrammarFile file = createFile(project, name + ";");
+    return (GrammarDeclaredName) file.getFirstChild().getFirstChild();
+  }
+
+  public static GrammarTypeReference createTypeReference(Project project, String name) {
+    final GrammarFile file = createFile(project, "X : " + name + ";");
+    return (GrammarTypeReference) (Objects.requireNonNull(file.getFirstChild().getNode().findChildByType(GrammarTypes.TYPE_REFERENCE)).getPsi());
+  }
+
+  public static GrammarFile createFile(Project project, String text) {
+    String name = "dummy.relast";
+    return (GrammarFile) PsiFileFactory.getInstance(project).
+      createFileFromText(name, GrammarFileType.INSTANCE, text);
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java
new file mode 100644
index 0000000..098154f
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementType.java
@@ -0,0 +1,14 @@
+package org.jastadd.tooling.grammar.psi;
+
+import com.intellij.psi.tree.IElementType;
+import org.jastadd.tooling.grammar.Grammar;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class GrammarElementType extends IElementType {
+
+  public GrammarElementType(@NotNull @NonNls String debugName) {
+    super(debugName, Grammar.INSTANCE);
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java
new file mode 100644
index 0000000..513555d
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarFile.java
@@ -0,0 +1,27 @@
+package org.jastadd.tooling.grammar.psi;
+
+import com.intellij.extapi.psi.PsiFileBase;
+import com.intellij.openapi.fileTypes.FileType;
+import com.intellij.psi.FileViewProvider;
+import org.jastadd.tooling.grammar.Grammar;
+import org.jastadd.tooling.grammar.GrammarFileType;
+import org.jetbrains.annotations.NotNull;
+
+public class GrammarFile extends PsiFileBase {
+
+  public GrammarFile(@NotNull FileViewProvider viewProvider) {
+    super(viewProvider, Grammar.INSTANCE);
+  }
+
+  @NotNull
+  @Override
+  public FileType getFileType() {
+    return GrammarFileType.INSTANCE;
+  }
+
+  @Override
+  public String toString() {
+    return "RelAst Grammar File";
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java
new file mode 100644
index 0000000..69b6fe7
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java
@@ -0,0 +1,7 @@
+package org.jastadd.tooling.grammar.psi;
+
+import com.intellij.psi.PsiNameIdentifierOwner;
+
+public interface GrammarNamedElement extends PsiNameIdentifierOwner {
+
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java
new file mode 100644
index 0000000..80b18d7
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTokenType.java
@@ -0,0 +1,19 @@
+package org.jastadd.tooling.grammar.psi;
+
+import com.intellij.psi.tree.IElementType;
+import org.jastadd.tooling.grammar.Grammar;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class GrammarTokenType extends IElementType {
+
+  public GrammarTokenType(@NotNull @NonNls String debugName) {
+    super(debugName, Grammar.INSTANCE);
+  }
+
+  @Override
+  public String toString() {
+    return "GrammarTokenType." + super.toString();
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java
new file mode 100644
index 0000000..3459b1a
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeDeclExtension.java
@@ -0,0 +1,4 @@
+package org.jastadd.tooling.grammar.psi;
+
+public interface GrammarTypeDeclExtension extends GrammarNamedElement {
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java
new file mode 100644
index 0000000..c9cbb3c
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceExtension.java
@@ -0,0 +1,4 @@
+package org.jastadd.tooling.grammar.psi;
+
+public interface GrammarTypeReferenceExtension extends GrammarNamedElement {
+}
diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceManipulator.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java
similarity index 61%
rename from src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceManipulator.java
rename to src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java
index 3811262..7ab2f70 100644
--- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceManipulator.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling.psi;
+package org.jastadd.tooling.grammar.psi;
 
 import com.intellij.openapi.util.TextRange;
 import com.intellij.psi.AbstractElementManipulator;
@@ -7,7 +7,7 @@ import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-public class RelAstGrammarTypeReferenceManipulator extends AbstractElementManipulator<RelAstGrammarTypeReference> implements ElementManipulator<RelAstGrammarTypeReference> {
+public class GrammarTypeReferenceManipulator extends AbstractElementManipulator<GrammarTypeReference> implements ElementManipulator<GrammarTypeReference> {
   /**
    * Changes the element's text to the given new text.
    *
@@ -19,9 +19,9 @@ public class RelAstGrammarTypeReferenceManipulator extends AbstractElementManipu
    */
   @Nullable
   @Override
-  public RelAstGrammarTypeReference handleContentChange(@NotNull RelAstGrammarTypeReference element, @NotNull TextRange range, String newContent) {
+  public GrammarTypeReference handleContentChange(@NotNull GrammarTypeReference element, @NotNull TextRange range, String newContent) {
     try {
-      return (RelAstGrammarTypeReference) element.setName(range.replace(element.getText(), newContent));
+      return (GrammarTypeReference) element.setName(range.replace(element.getText(), newContent));
     } catch (Exception e) { // e.g., in case the range is wrong
       throw new IncorrectOperationException(e);
     }
diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java
similarity index 77%
rename from src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java
rename to src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java
index f684e42..377ff81 100644
--- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarNamedElementImpl.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java
@@ -1,20 +1,20 @@
-package org.jastadd.tooling.psi.impl;
+package org.jastadd.tooling.grammar.psi.impl;
 
 import com.intellij.extapi.psi.ASTWrapperPsiElement;
 import com.intellij.lang.ASTNode;
 import com.intellij.navigation.ItemPresentation;
 import com.intellij.psi.PsiReference;
 import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
-import org.jastadd.tooling.JastAddIcons;
-import org.jastadd.tooling.psi.RelAstGrammarNamedElement;
+import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
+import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 
-public abstract class RelAstGrammarNamedElementImpl extends ASTWrapperPsiElement implements RelAstGrammarNamedElement {
+public abstract class GrammarNamedElementImpl extends ASTWrapperPsiElement implements GrammarNamedElement {
 
-  protected RelAstGrammarNamedElementImpl(@NotNull ASTNode node) {
+  protected GrammarNamedElementImpl(@NotNull ASTNode node) {
     super(node);
   }
 
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java
new file mode 100644
index 0000000..8df00b4
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java
@@ -0,0 +1,47 @@
+package org.jastadd.tooling.grammar.psi.impl;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.psi.PsiElement;
+import org.jastadd.tooling.grammar.parser.GrammarTypes;
+import org.jastadd.tooling.grammar.psi.GrammarDeclaredName;
+import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
+import org.jastadd.tooling.grammar.psi.GrammarTypeDeclExtension;
+import org.jetbrains.annotations.NotNull;
+
+public class GrammarTypeDeclImplExtension extends GrammarNamedElementImpl implements GrammarTypeDeclExtension {
+
+  public GrammarTypeDeclImplExtension(@NotNull ASTNode node) {
+    super(node);
+  }
+
+  public String getName() {
+    // this finds the *first* ID, which is what we want
+    ASTNode keyNode = getNode().findChildByType(GrammarTypes.DECLARED_NAME);
+    if (keyNode != null) {
+      return keyNode.getText();
+    } else {
+      return null;
+    }
+  }
+
+  public PsiElement setName(@NotNull String newName) {
+    ASTNode keyNode = getNode().findChildByType(GrammarTypes.DECLARED_NAME);
+    if (keyNode != null) {
+      GrammarDeclaredName name = GrammarElementFactory.createDeclaredName(getProject(), newName);
+      ASTNode newKeyNode = name.getNode();
+      getNode().replaceChild(keyNode, newKeyNode);
+    }
+    return this;
+  }
+
+  public PsiElement getNameIdentifier() {
+    ASTNode keyNode = getNode().findChildByType(GrammarTypes.DECLARED_NAME);
+    if (keyNode != null) {
+      return keyNode.getPsi();
+    } else {
+      return null;
+    }
+  }
+
+
+}
diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java
similarity index 57%
rename from src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java
rename to src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java
index 3b44b50..495e20e 100644
--- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeReferenceImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java
@@ -1,15 +1,15 @@
-package org.jastadd.tooling.psi.impl;
+package org.jastadd.tooling.grammar.psi.impl;
 
 import com.intellij.lang.ASTNode;
 import com.intellij.psi.PsiElement;
-import org.jastadd.tooling.psi.RelAstGrammarElementFactory;
-import org.jastadd.tooling.psi.RelAstGrammarTypeReference;
-import org.jastadd.tooling.psi.RelAstGrammarTypeReferenceExtension;
+import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
+import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarTypeReferenceExtension;
 import org.jetbrains.annotations.NotNull;
 
-public class RelAstGrammarTypeReferenceImplExtension extends RelAstGrammarNamedElementImpl implements RelAstGrammarTypeReferenceExtension {
+public class GrammarTypeReferenceImplExtension extends GrammarNamedElementImpl implements GrammarTypeReferenceExtension {
 
-  public RelAstGrammarTypeReferenceImplExtension(@NotNull ASTNode node) {
+  public GrammarTypeReferenceImplExtension(@NotNull ASTNode node) {
     super(node);
   }
 
@@ -22,7 +22,7 @@ public class RelAstGrammarTypeReferenceImplExtension extends RelAstGrammarNamedE
     // FIXME this can break the grammar when the type is used in an unnamed component (and in many other cases probably)
     ASTNode keyNode = getNode().getFirstChildNode();
     if (keyNode != null) {
-      RelAstGrammarTypeReference name = RelAstGrammarElementFactory.createTypeReference(getProject(), newName);
+      GrammarTypeReference name = GrammarElementFactory.createTypeReference(getProject(), newName);
       ASTNode newKeyNode = name.getNode().getFirstChildNode();
       getNode().replaceChild(keyNode, newKeyNode);
     }
diff --git a/src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java b/src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java
deleted file mode 100644
index 305dd61..0000000
--- a/src/main/java/org/jastadd/tooling/lexer/RelAstGrammarFlexAdapter.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package org.jastadd.tooling.lexer;
-
-import com.intellij.lexer.FlexAdapter;
-
-public class RelAstGrammarFlexAdapter extends FlexAdapter {
-
-  public RelAstGrammarFlexAdapter() {
-    super(new RelAstGrammarLexer(null));
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java b/src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java
deleted file mode 100644
index f50d18d..0000000
--- a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarElementType.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package org.jastadd.tooling.parser;
-
-import com.intellij.psi.tree.IElementType;
-import org.jastadd.tooling.RelAstGrammar;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-
-public class RelAstGrammarElementType extends IElementType {
-
-  public RelAstGrammarElementType(@NotNull @NonNls String debugName) {
-    super(debugName, RelAstGrammar.INSTANCE);
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java b/src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java
deleted file mode 100644
index dd705f5..0000000
--- a/src/main/java/org/jastadd/tooling/parser/RelAstGrammarTokenType.java
+++ /dev/null
@@ -1,19 +0,0 @@
-package org.jastadd.tooling.parser;
-
-import com.intellij.psi.tree.IElementType;
-import org.jastadd.tooling.RelAstGrammar;
-import org.jetbrains.annotations.NonNls;
-import org.jetbrains.annotations.NotNull;
-
-public class RelAstGrammarTokenType extends IElementType {
-
-  public RelAstGrammarTokenType(@NotNull @NonNls String debugName) {
-    super(debugName, RelAstGrammar.INSTANCE);
-  }
-
-  @Override
-  public String toString() {
-    return "RelAstGrammarTokenType." + super.toString();
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java
deleted file mode 100644
index df3bef4..0000000
--- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarElementFactory.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package org.jastadd.tooling.psi;
-
-import com.intellij.openapi.project.Project;
-import com.intellij.psi.PsiFileFactory;
-import org.jastadd.tooling.RelAstGrammarFileType;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-
-import java.util.Objects;
-
-public class RelAstGrammarElementFactory {
-
-  private RelAstGrammarElementFactory() {
-    throw new IllegalStateException("Utility class");
-  }
-
-  public static RelAstGrammarDeclaredName createDeclaredName(Project project, String name) {
-    final RelAstGrammarFile file = createFile(project, name + ";");
-    return (RelAstGrammarDeclaredName) file.getFirstChild().getFirstChild();
-  }
-
-  public static RelAstGrammarTypeReference createTypeReference(Project project, String name) {
-    final RelAstGrammarFile file = createFile(project, "X : " + name + ";");
-    return (RelAstGrammarTypeReference) (Objects.requireNonNull(file.getFirstChild().getNode().findChildByType(RelAstGrammarTypes.TYPE_REFERENCE)).getPsi());
-  }
-
-  public static RelAstGrammarFile createFile(Project project, String text) {
-    String name = "dummy.relast";
-    return (RelAstGrammarFile) PsiFileFactory.getInstance(project).
-      createFileFromText(name, RelAstGrammarFileType.INSTANCE, text);
-  }
-}
diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java
deleted file mode 100644
index 4c1afae..0000000
--- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarFile.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package org.jastadd.tooling.psi;
-
-import com.intellij.extapi.psi.PsiFileBase;
-import com.intellij.openapi.fileTypes.FileType;
-import com.intellij.psi.FileViewProvider;
-import org.jastadd.tooling.RelAstGrammar;
-import org.jastadd.tooling.RelAstGrammarFileType;
-import org.jetbrains.annotations.NotNull;
-
-public class RelAstGrammarFile extends PsiFileBase {
-
-  public RelAstGrammarFile(@NotNull FileViewProvider viewProvider) {
-    super(viewProvider, RelAstGrammar.INSTANCE);
-  }
-
-  @NotNull
-  @Override
-  public FileType getFileType() {
-    return RelAstGrammarFileType.INSTANCE;
-  }
-
-  @Override
-  public String toString() {
-    return "RelAst Grammar File";
-  }
-
-}
diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java
deleted file mode 100644
index 6a7844c..0000000
--- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarNamedElement.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.jastadd.tooling.psi;
-
-import com.intellij.psi.PsiNameIdentifierOwner;
-
-public interface RelAstGrammarNamedElement extends PsiNameIdentifierOwner {
-
-}
diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java
deleted file mode 100644
index 79837b7..0000000
--- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeDeclExtension.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.jastadd.tooling.psi;
-
-public interface RelAstGrammarTypeDeclExtension extends RelAstGrammarNamedElement {
-}
diff --git a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java b/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java
deleted file mode 100644
index a6c95e7..0000000
--- a/src/main/java/org/jastadd/tooling/psi/RelAstGrammarTypeReferenceExtension.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package org.jastadd.tooling.psi;
-
-public interface RelAstGrammarTypeReferenceExtension extends RelAstGrammarNamedElement {
-}
diff --git a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java b/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java
deleted file mode 100644
index b51ed4f..0000000
--- a/src/main/java/org/jastadd/tooling/psi/impl/RelAstGrammarTypeDeclImplExtension.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package org.jastadd.tooling.psi.impl;
-
-import com.intellij.lang.ASTNode;
-import com.intellij.psi.PsiElement;
-import org.jastadd.tooling.parser.RelAstGrammarTypes;
-import org.jastadd.tooling.psi.RelAstGrammarDeclaredName;
-import org.jastadd.tooling.psi.RelAstGrammarElementFactory;
-import org.jastadd.tooling.psi.RelAstGrammarTypeDeclExtension;
-import org.jetbrains.annotations.NotNull;
-
-public class RelAstGrammarTypeDeclImplExtension extends RelAstGrammarNamedElementImpl implements RelAstGrammarTypeDeclExtension {
-
-  public RelAstGrammarTypeDeclImplExtension(@NotNull ASTNode node) {
-    super(node);
-  }
-
-  public String getName() {
-    // this finds the *first* ID, which is what we want
-    ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME);
-    if (keyNode != null) {
-      return keyNode.getText();
-    } else {
-      return null;
-    }
-  }
-
-  public PsiElement setName(@NotNull String newName) {
-    ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME);
-    if (keyNode != null) {
-      RelAstGrammarDeclaredName name = RelAstGrammarElementFactory.createDeclaredName(getProject(), newName);
-      ASTNode newKeyNode = name.getNode();
-      getNode().replaceChild(keyNode, newKeyNode);
-    }
-    return this;
-  }
-
-  public PsiElement getNameIdentifier() {
-    ASTNode keyNode = getNode().findChildByType(RelAstGrammarTypes.DECLARED_NAME);
-    if (keyNode != null) {
-      return keyNode.getPsi();
-    } else {
-      return null;
-    }
-  }
-
-
-}
diff --git a/src/main/java/org/jastadd/tooling/JastAddIcons.java b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java
similarity index 89%
rename from src/main/java/org/jastadd/tooling/JastAddIcons.java
rename to src/main/java/org/jastadd/tooling/util/JastAddIcons.java
index 011ca99..b75c0b6 100644
--- a/src/main/java/org/jastadd/tooling/JastAddIcons.java
+++ b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java
@@ -1,4 +1,4 @@
-package org.jastadd.tooling;
+package org.jastadd.tooling.util;
 
 import com.intellij.openapi.util.IconLoader;
 
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 2263a9a..3c5a664 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -11,52 +11,52 @@
 
     <extensions defaultExtensionNs="com.intellij">
         <!-- Add your extensions here -->
-        <fileType name="RelAst Grammar" implementationClass="org.jastadd.tooling.RelAstGrammarFileType"
+        <fileType name="RelAst Grammar" implementationClass="org.jastadd.tooling.grammar.GrammarFileType"
                   fieldName="INSTANCE" language="JastAddGrammar" extensions="relast"/>
         <lang.parserDefinition language="JastAddGrammar"
-                               implementationClass="org.jastadd.tooling.parser.RelAstGrammarParserDefinition"/>
+                               implementationClass="org.jastadd.tooling.grammar.parser.GrammarParserDefinition"/>
         <lang.syntaxHighlighterFactory language="JastAddGrammar"
-                                       implementationClass="org.jastadd.tooling.RelAstGrammarSyntaxHighlighterFactory"/>
+                                       implementationClass="org.jastadd.tooling.grammar.GrammarSyntaxHighlighterFactory"/>
 
-        <colorSettingsPage implementation="org.jastadd.tooling.RelAstGrammarColorSettingsPage"/>
+        <colorSettingsPage implementation="org.jastadd.tooling.grammar.GrammarColorSettingsPage"/>
 
-        <annotator language="JAVA" implementationClass="org.jastadd.tooling.RelAstGrammarJavaAnnotator"/>
+        <annotator language="JAVA" implementationClass="org.jastadd.tooling.grammar.GrammarJavaAnnotator"/>
 
-        <annotator language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarAnnotator"/>
+        <annotator language="JastAddGrammar" implementationClass="org.jastadd.tooling.grammar.GrammarAnnotator"/>
 
         <codeInsight.lineMarkerProvider language="JAVA"
-                                        implementationClass="org.jastadd.tooling.RelAstGrammarLineMarkerProvider"/>
+                                        implementationClass="org.jastadd.tooling.grammar.GrammarLineMarkerProvider"/>
 
         <completion.contributor language="JastAddGrammar"
-                                implementationClass="org.jastadd.tooling.RelAstGrammarCompletionContributor"/>
+                                implementationClass="org.jastadd.tooling.grammar.GrammarCompletionContributor"/>
 
-        <psi.referenceContributor implementation="org.jastadd.tooling.RelAstGrammarReferenceContributor"/>
+        <psi.referenceContributor implementation="org.jastadd.tooling.grammar.GrammarReferenceContributor"/>
 
 
         <lang.refactoringSupport language="JastAddGrammar"
-                                 implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/>
+                                 implementationClass="org.jastadd.tooling.grammar.GrammarRefactoringSupportProvider"/>
 
-        <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference"
-                                 implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/>
+        <lang.elementManipulator forClass="org.jastadd.tooling.grammar.psi.GrammarTypeReference"
+                                 implementationClass="org.jastadd.tooling.grammar.psi.GrammarTypeReferenceManipulator"/>
 
 
         <lang.findUsagesProvider language="JastAddGrammar"
-                                 implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/>
+                                 implementationClass="org.jastadd.tooling.grammar.GrammarFindUsageProvider"/>
 
-        <gotoSymbolContributor implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/>
+        <gotoSymbolContributor implementation="org.jastadd.tooling.grammar.GrammarChooseByNameContributor"/>
 
         <lang.psiStructureViewFactory language="JastAddGrammar"
-                                      implementationClass="org.jastadd.tooling.RelAstGrammarStructureViewFactory"/>
+                                      implementationClass="org.jastadd.tooling.grammar.GrammarStructureViewFactory"/>
 
         <lang.formatter language="JastAddGrammar"
-                        implementationClass="org.jastadd.tooling.RelAstGrammarFormattingModelBuilder"/>
+                        implementationClass="org.jastadd.tooling.grammar.GrammarFormattingModelBuilder"/>
 
-        <codeStyleSettingsProvider implementation="org.jastadd.tooling.RelAstGrammarCodeStyleSettingsProvider"/>
+        <codeStyleSettingsProvider implementation="org.jastadd.tooling.grammar.GrammarCodeStyleSettingsProvider"/>
 
         <langCodeStyleSettingsProvider
-            implementation="org.jastadd.tooling.RelAstGrammarLanguageCodeStyleSettingsProvider"/>
+            implementation="org.jastadd.tooling.grammar.GrammarLanguageCodeStyleSettingsProvider"/>
 
-        <lang.commenter language="JastAddGrammar" implementationClass="org.jastadd.tooling.RelAstGrammarCommenter"/>
+        <lang.commenter language="JastAddGrammar" implementationClass="org.jastadd.tooling.grammar.GrammarCommenter"/>
     </extensions>
 
     <actions>
diff --git a/src/main/resources/icons/jastadd.svg b/src/main/resources/icons/jastadd.svg
index 7dc548d..34937df 100644
--- a/src/main/resources/icons/jastadd.svg
+++ b/src/main/resources/icons/jastadd.svg
@@ -1,88 +1,87 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <svg
-   xmlns:dc="http://purl.org/dc/elements/1.1/"
-   xmlns:cc="http://creativecommons.org/ns#"
-   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
-   xmlns:svg="http://www.w3.org/2000/svg"
-   xmlns="http://www.w3.org/2000/svg"
-   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
-   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
-   width="16"
-   height="16"
-   id="svg4781"
-   version="1.1"
-   inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
-   sodipodi:docname="jastadd.svg"
-   inkscape:export-filename="/home/jesper/bzr/jastadd-research/logotype/jastadd_200px.png"
-   inkscape:export-xdpi="49.240002"
-   inkscape:export-ydpi="49.240002">
-  <defs
-     id="defs4783">
-    <inkscape:perspective
-       sodipodi:type="inkscape:persp3d"
-       inkscape:vp_x="0 : 454.65828 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_z="744.09448 : 454.65828 : 1"
-       inkscape:persp3d-origin="372.04724 : 279.26458 : 1"
-       id="perspective4789" />
-    <inkscape:perspective
-       id="perspective4768"
-       inkscape:persp3d-origin="0.5 : -71.189479 : 1"
-       inkscape:vp_z="1 : -71.022812 : 1"
-       inkscape:vp_y="0 : 1000 : 0"
-       inkscape:vp_x="0 : -71.022812 : 1"
-       sodipodi:type="inkscape:persp3d" />
-  </defs>
-  <sodipodi:namedview
-     id="base"
-     pagecolor="#ffffff"
-     bordercolor="#666666"
-     borderopacity="1.0"
-     inkscape:pageopacity="0.0"
-     inkscape:pageshadow="2"
-     inkscape:zoom="31.678384"
-     inkscape:cx="24.626583"
-     inkscape:cy="16.669221"
-     inkscape:document-units="px"
-     inkscape:current-layer="layer1"
-     showgrid="false"
-     inkscape:window-width="2560"
-     inkscape:window-height="1406"
-     inkscape:window-x="0"
-     inkscape:window-y="18"
-     inkscape:window-maximized="1"
-     inkscape:document-rotation="0" />
-  <metadata
-     id="metadata4786">
-    <rdf:RDF>
-      <cc:Work
-         rdf:about="">
-        <dc:format>image/svg+xml</dc:format>
-        <dc:type
-           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
-        <dc:title></dc:title>
-      </cc:Work>
-    </rdf:RDF>
-  </metadata>
-  <g
-     inkscape:label="Layer 1"
-     inkscape:groupmode="layer"
-     id="layer1"
-     transform="translate(-185.85624,-382.86389)">
-    <path
-       inkscape:tile-y0="331.74615"
-       inkscape:tile-x0="805.67645"
-       inkscape:tile-h="236.12934"
-       inkscape:tile-w="285.01443"
-       inkscape:tile-cy="449.81082"
-       inkscape:tile-cx="948.18366"
-       inkscape:export-ydpi="60.48"
-       inkscape:export-xdpi="60.48"
-       inkscape:export-filename="C:\Users\Jesper\Pictures\Inkscape\text4655.png"
-       id="path4837"
-       style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9830a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.413302;marker:none;enable-background:accumulate"
-       d="m 192.51835,398.49014 c 0.46797,0.0944 0.88748,0.12177 1.14886,-0.009 0.26139,-0.13045 0.31508,-0.16277 0.42235,-0.28982 0.10727,-0.12706 0.15312,-0.23676 0.19693,-0.40843 0.0439,-0.17165 0.0195,-0.81056 0.0139,-0.88117 -0.005,-0.0706 0.0467,-0.2021 0.0675,-0.25221 0.0389,-0.0938 0.11286,-0.19115 0.1589,-0.21643 0.0804,-0.0356 0.15378,-0.0646 0.37538,0.0176 0.27788,0.0832 1.36687,0.4716 1.9434,0.71318 0.45189,0.19675 0.81205,0.35613 0.94069,0.39718 0.20459,0.0701 0.25891,0.11011 0.36021,0.0816 0.10128,-0.0286 0.12277,-0.12742 0.16675,-0.26793 0.044,-0.14051 0.62773,-1.70104 0.82695,-2.19466 0.19933,-0.49357 0.2249,-0.57635 0.28714,-0.76598 0.0618,-0.1898 -0.005,-0.36353 -0.0924,-0.45392 -0.0872,-0.0904 -0.22949,-0.10291 -0.27145,-0.10222 -0.0419,5.5e-4 -0.32032,-0.0195 -0.46148,-0.0407 -0.19215,-0.029 -0.47053,-0.11965 -0.56311,-0.15549 -0.23628,-0.0916 -0.48103,-0.26386 -0.60199,-0.53086 -0.0885,-0.19537 -0.12683,-0.34898 -0.11868,-0.67429 0.007,-0.27537 0.0565,-0.55808 0.096,-0.71536 0.0397,-0.15722 0.10136,-0.33612 0.18569,-0.5012 0.15953,-0.31382 0.33088,-0.58298 0.52993,-0.80275 0.1086,-0.14475 0.40679,-0.28034 0.61085,-0.29391 0.31373,-0.0286 0.50335,0.0169 0.79219,0.1322 0.15039,0.0602 0.39876,0.16868 0.55566,0.21698 0.15688,0.0483 0.28055,0.0367 0.35503,-0.003 0.0824,-0.0434 0.14887,-0.1 0.17559,-0.29738 0.0266,-0.1974 0.0427,-0.60513 0.0687,-0.93064 0.0259,-0.3255 0.0191,-0.57846 0.0385,-0.8947 0.0196,-0.31622 0.008,-0.56894 0.0124,-0.80191 0.004,-0.23297 0.0101,-0.50723 0.008,-0.64199 -0.002,-0.15272 -0.0161,-0.30478 -0.0879,-0.38748 -0.0717,-0.0827 -0.21073,-0.0703 -0.30868,-0.0728 -0.11171,-0.003 -0.37232,0.002 -0.60538,-0.005 -0.23309,-0.006 -0.69532,0.012 -1.03465,-0.004 -0.33932,-0.0161 -0.71896,-0.005 -1.0049,-0.0326 -0.28595,-0.027 -0.53418,-0.0449 -0.70849,-0.0628 -0.1284,-0.0133 -0.23309,-0.0789 -0.29062,-0.16224 -0.0686,-0.0995 -0.0528,-0.21313 -0.0235,-0.37416 0.0294,-0.16098 0.19877,-0.53968 0.25515,-0.68962 0.0664,-0.17744 0.16054,-0.51914 0.1358,-0.68008 -0.0247,-0.16093 -0.10911,-0.29721 -0.23402,-0.43954 -0.11706,-0.13339 -0.27819,-0.24083 -0.40875,-0.33761 -0.1722,-0.12763 -0.32365,-0.22016 -0.48802,-0.29959 -0.15994,-0.0772 -0.38351,-0.14946 -0.51685,-0.18857 -0.13056,-0.0382 -0.34504,-0.0807 -0.50279,-0.0972 -0.18102,-0.0189 -0.4233,5.5e-4 -0.59699,0.0267 -0.11209,0.0173 -0.34618,0.12225 -0.44863,0.19939 -0.10244,0.0772 -0.21079,0.19464 -0.27207,0.3124 -0.0613,0.11775 -0.15703,0.32794 -0.19816,0.48437 -0.0411,0.15645 -0.0883,0.4522 -0.0919,0.58004 -0.004,0.12788 -0.0178,0.30359 -0.10785,0.39831 -0.0561,0.0589 -0.16481,0.0955 -0.23892,0.10375 -0.0818,3.8e-4 -0.16957,-0.0156 -0.37682,-0.0894 -0.33423,-0.11128 -0.71643,-0.26108 -1.1547,-0.43228 -0.43827,-0.17122 -0.73824,-0.29078 -1.11122,-0.42574 -0.18738,-0.0676 -0.46442,-0.17377 -0.56572,-0.19282 -0.10735,-0.0203 -0.19054,0.009 -0.24662,0.0453 -0.0319,0.0304 -0.0822,0.0835 -0.11888,0.13605 -0.035,0.0592 -0.0888,0.19917 -0.14981,0.39623 -0.0774,0.24375 -0.45072,1.39148 -0.63509,1.8572 -0.18436,0.4657 -0.27392,0.81491 -0.33223,1.0252 -0.0583,0.21034 0.16305,0.27254 0.25766,0.32297 0.11296,0.0478 0.25599,0.0959 0.5005,0.10429 0.24453,0.008 0.52438,0.037 0.70145,0.11073 0.17707,0.0737 0.32802,0.13816 0.44016,0.26725 0.0718,0.0904 0.1673,0.25085 0.19886,0.44079 0.0229,0.17635 0.0197,0.82329 -0.0823,1.16673 -0.0747,0.30981 -0.27178,0.672 -0.40762,0.85996 -0.19143,0.27412 -0.40386,0.50442 -0.61305,0.63269 -0.18515,0.12033 -0.49029,0.17659 -0.8327,0.0362 -0.22768,-0.0775 -0.55527,-0.21708 -0.79028,-0.28382 -0.17923,-0.0559 -0.41857,-0.0138 -0.48289,0.1178 -0.056,0.10822 -0.0706,0.21537 -0.084,0.37086 -0.0261,0.37764 -0.029,1.94008 -0.0717,2.86235 -0.0353,0.43468 0.006,0.57829 0.0353,0.64566 0.036,0.0847 0.36968,0.0758 0.46438,0.074 0.1882,1.1e-4 0.31618,-0.005 0.52893,-0.006 0.53643,0.004 2.55791,-0.0276 2.77317,0.0297 0.0722,0.0144 0.14731,0.04 0.19828,0.0704 0.052,0.0333 0.085,0.0738 0.10392,0.13597 0.0278,0.0889 -0.0396,0.27625 -0.0828,0.3957 -0.0431,0.11947 -0.14115,0.41501 -0.28904,0.73293 -0.14791,0.31794 -0.10517,0.6241 -0.0636,0.71801 0.0416,0.0939 0.15142,0.32628 0.37929,0.53048 0.22788,0.20419 0.44928,0.30636 0.73568,0.43164 0.2463,0.10774 0.68019,0.20311 0.72232,0.20817 z"
-       inkscape:connector-curvature="0"
-       sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc" />
-  </g>
+    xmlns:dc="http://purl.org/dc/elements/1.1/"
+    xmlns:cc="http://creativecommons.org/ns#"
+    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+    xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+    xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+    xmlns="http://www.w3.org/2000/svg"
+    width="16"
+    height="16"
+    id="svg4781"
+    version="1.1"
+    inkscape:version="1.0.1 (3bc2e813f5, 2020-09-07)"
+    sodipodi:docname="jastadd.svg"
+    inkscape:export-filename="/home/jesper/bzr/jastadd-research/logotype/jastadd_200px.png"
+    inkscape:export-xdpi="49.240002"
+    inkscape:export-ydpi="49.240002">
+    <defs
+        id="defs4783">
+        <inkscape:perspective
+            sodipodi:type="inkscape:persp3d"
+            inkscape:vp_x="0 : 454.65828 : 1"
+            inkscape:vp_y="0 : 1000 : 0"
+            inkscape:vp_z="744.09448 : 454.65828 : 1"
+            inkscape:persp3d-origin="372.04724 : 279.26458 : 1"
+            id="perspective4789"/>
+        <inkscape:perspective
+            id="perspective4768"
+            inkscape:persp3d-origin="0.5 : -71.189479 : 1"
+            inkscape:vp_z="1 : -71.022812 : 1"
+            inkscape:vp_y="0 : 1000 : 0"
+            inkscape:vp_x="0 : -71.022812 : 1"
+            sodipodi:type="inkscape:persp3d"/>
+    </defs>
+    <sodipodi:namedview
+        id="base"
+        pagecolor="#ffffff"
+        bordercolor="#666666"
+        borderopacity="1.0"
+        inkscape:pageopacity="0.0"
+        inkscape:pageshadow="2"
+        inkscape:zoom="31.678384"
+        inkscape:cx="24.626583"
+        inkscape:cy="16.669221"
+        inkscape:document-units="px"
+        inkscape:current-layer="layer1"
+        showgrid="false"
+        inkscape:window-width="2560"
+        inkscape:window-height="1406"
+        inkscape:window-x="0"
+        inkscape:window-y="18"
+        inkscape:window-maximized="1"
+        inkscape:document-rotation="0"/>
+    <metadata
+        id="metadata4786">
+        <rdf:RDF>
+            <cc:Work
+                rdf:about="">
+                <dc:format>image/svg+xml</dc:format>
+                <dc:type
+                    rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
+                <dc:title></dc:title>
+            </cc:Work>
+        </rdf:RDF>
+    </metadata>
+    <g
+        inkscape:label="Layer 1"
+        inkscape:groupmode="layer"
+        id="layer1"
+        transform="translate(-185.85624,-382.86389)">
+        <path
+            inkscape:tile-y0="331.74615"
+            inkscape:tile-x0="805.67645"
+            inkscape:tile-h="236.12934"
+            inkscape:tile-w="285.01443"
+            inkscape:tile-cy="449.81082"
+            inkscape:tile-cx="948.18366"
+            inkscape:export-ydpi="60.48"
+            inkscape:export-xdpi="60.48"
+            inkscape:export-filename="C:\Users\Jesper\Pictures\Inkscape\text4655.png"
+            id="path4837"
+            style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9830a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.413302;marker:none;enable-background:accumulate"
+            d="m 192.51835,398.49014 c 0.46797,0.0944 0.88748,0.12177 1.14886,-0.009 0.26139,-0.13045 0.31508,-0.16277 0.42235,-0.28982 0.10727,-0.12706 0.15312,-0.23676 0.19693,-0.40843 0.0439,-0.17165 0.0195,-0.81056 0.0139,-0.88117 -0.005,-0.0706 0.0467,-0.2021 0.0675,-0.25221 0.0389,-0.0938 0.11286,-0.19115 0.1589,-0.21643 0.0804,-0.0356 0.15378,-0.0646 0.37538,0.0176 0.27788,0.0832 1.36687,0.4716 1.9434,0.71318 0.45189,0.19675 0.81205,0.35613 0.94069,0.39718 0.20459,0.0701 0.25891,0.11011 0.36021,0.0816 0.10128,-0.0286 0.12277,-0.12742 0.16675,-0.26793 0.044,-0.14051 0.62773,-1.70104 0.82695,-2.19466 0.19933,-0.49357 0.2249,-0.57635 0.28714,-0.76598 0.0618,-0.1898 -0.005,-0.36353 -0.0924,-0.45392 -0.0872,-0.0904 -0.22949,-0.10291 -0.27145,-0.10222 -0.0419,5.5e-4 -0.32032,-0.0195 -0.46148,-0.0407 -0.19215,-0.029 -0.47053,-0.11965 -0.56311,-0.15549 -0.23628,-0.0916 -0.48103,-0.26386 -0.60199,-0.53086 -0.0885,-0.19537 -0.12683,-0.34898 -0.11868,-0.67429 0.007,-0.27537 0.0565,-0.55808 0.096,-0.71536 0.0397,-0.15722 0.10136,-0.33612 0.18569,-0.5012 0.15953,-0.31382 0.33088,-0.58298 0.52993,-0.80275 0.1086,-0.14475 0.40679,-0.28034 0.61085,-0.29391 0.31373,-0.0286 0.50335,0.0169 0.79219,0.1322 0.15039,0.0602 0.39876,0.16868 0.55566,0.21698 0.15688,0.0483 0.28055,0.0367 0.35503,-0.003 0.0824,-0.0434 0.14887,-0.1 0.17559,-0.29738 0.0266,-0.1974 0.0427,-0.60513 0.0687,-0.93064 0.0259,-0.3255 0.0191,-0.57846 0.0385,-0.8947 0.0196,-0.31622 0.008,-0.56894 0.0124,-0.80191 0.004,-0.23297 0.0101,-0.50723 0.008,-0.64199 -0.002,-0.15272 -0.0161,-0.30478 -0.0879,-0.38748 -0.0717,-0.0827 -0.21073,-0.0703 -0.30868,-0.0728 -0.11171,-0.003 -0.37232,0.002 -0.60538,-0.005 -0.23309,-0.006 -0.69532,0.012 -1.03465,-0.004 -0.33932,-0.0161 -0.71896,-0.005 -1.0049,-0.0326 -0.28595,-0.027 -0.53418,-0.0449 -0.70849,-0.0628 -0.1284,-0.0133 -0.23309,-0.0789 -0.29062,-0.16224 -0.0686,-0.0995 -0.0528,-0.21313 -0.0235,-0.37416 0.0294,-0.16098 0.19877,-0.53968 0.25515,-0.68962 0.0664,-0.17744 0.16054,-0.51914 0.1358,-0.68008 -0.0247,-0.16093 -0.10911,-0.29721 -0.23402,-0.43954 -0.11706,-0.13339 -0.27819,-0.24083 -0.40875,-0.33761 -0.1722,-0.12763 -0.32365,-0.22016 -0.48802,-0.29959 -0.15994,-0.0772 -0.38351,-0.14946 -0.51685,-0.18857 -0.13056,-0.0382 -0.34504,-0.0807 -0.50279,-0.0972 -0.18102,-0.0189 -0.4233,5.5e-4 -0.59699,0.0267 -0.11209,0.0173 -0.34618,0.12225 -0.44863,0.19939 -0.10244,0.0772 -0.21079,0.19464 -0.27207,0.3124 -0.0613,0.11775 -0.15703,0.32794 -0.19816,0.48437 -0.0411,0.15645 -0.0883,0.4522 -0.0919,0.58004 -0.004,0.12788 -0.0178,0.30359 -0.10785,0.39831 -0.0561,0.0589 -0.16481,0.0955 -0.23892,0.10375 -0.0818,3.8e-4 -0.16957,-0.0156 -0.37682,-0.0894 -0.33423,-0.11128 -0.71643,-0.26108 -1.1547,-0.43228 -0.43827,-0.17122 -0.73824,-0.29078 -1.11122,-0.42574 -0.18738,-0.0676 -0.46442,-0.17377 -0.56572,-0.19282 -0.10735,-0.0203 -0.19054,0.009 -0.24662,0.0453 -0.0319,0.0304 -0.0822,0.0835 -0.11888,0.13605 -0.035,0.0592 -0.0888,0.19917 -0.14981,0.39623 -0.0774,0.24375 -0.45072,1.39148 -0.63509,1.8572 -0.18436,0.4657 -0.27392,0.81491 -0.33223,1.0252 -0.0583,0.21034 0.16305,0.27254 0.25766,0.32297 0.11296,0.0478 0.25599,0.0959 0.5005,0.10429 0.24453,0.008 0.52438,0.037 0.70145,0.11073 0.17707,0.0737 0.32802,0.13816 0.44016,0.26725 0.0718,0.0904 0.1673,0.25085 0.19886,0.44079 0.0229,0.17635 0.0197,0.82329 -0.0823,1.16673 -0.0747,0.30981 -0.27178,0.672 -0.40762,0.85996 -0.19143,0.27412 -0.40386,0.50442 -0.61305,0.63269 -0.18515,0.12033 -0.49029,0.17659 -0.8327,0.0362 -0.22768,-0.0775 -0.55527,-0.21708 -0.79028,-0.28382 -0.17923,-0.0559 -0.41857,-0.0138 -0.48289,0.1178 -0.056,0.10822 -0.0706,0.21537 -0.084,0.37086 -0.0261,0.37764 -0.029,1.94008 -0.0717,2.86235 -0.0353,0.43468 0.006,0.57829 0.0353,0.64566 0.036,0.0847 0.36968,0.0758 0.46438,0.074 0.1882,1.1e-4 0.31618,-0.005 0.52893,-0.006 0.53643,0.004 2.55791,-0.0276 2.77317,0.0297 0.0722,0.0144 0.14731,0.04 0.19828,0.0704 0.052,0.0333 0.085,0.0738 0.10392,0.13597 0.0278,0.0889 -0.0396,0.27625 -0.0828,0.3957 -0.0431,0.11947 -0.14115,0.41501 -0.28904,0.73293 -0.14791,0.31794 -0.10517,0.6241 -0.0636,0.71801 0.0416,0.0939 0.15142,0.32628 0.37929,0.53048 0.22788,0.20419 0.44928,0.30636 0.73568,0.43164 0.2463,0.10774 0.68019,0.20311 0.72232,0.20817 z"
+            inkscape:connector-curvature="0"
+            sodipodi:nodetypes="ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc"/>
+    </g>
 </svg>
-- 
GitLab