diff --git a/README.md b/README.md
index 7bc94a3e6cfbea1a4c68e031497d00706a55d27f..7cf427edf0186fcbf21b046f1d1fee9bf318cf2e 100644
--- a/README.md
+++ b/README.md
@@ -15,7 +15,7 @@ Usage:
 |---|---|---|---|
 | `repo_name` |  `"test_repo"` | Name used in the URL of the project | Initialize `project_url`, `repo_url`, Generated project directory, last part of the Java package, prefix of version file, name of the published artifact |
 | `project_name` |  `"My New Relational RAG Project"` | (Long) name of the project | Title in README, pages |
-| `project_short_name` |  `"NewRelAST"` | (Short) name of the project | Name of the grammar, partly name of the test |
+| `grammar_name` |  `"MyNewRelationalRAGProject"` | Name of the grammar (initialized from project name) | Name of the grammar, partly name of the test |
 | `namespace` |  `"jastadd"` | Namespace of the gitlab repository | Namespace used in the URL of the project |
 | `project_url` |  `"git@git-st.inf.tu-dresden.de:{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}.git"` | (pre-computed) URL to clone the project using SSH | Setting git `origin` remote |
 | `repo_url` |  `"https://git-st.inf.tu-dresden.de/{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}"` | (pre-computed) URL of the project | Back-link to repository in pages |
diff --git a/cookiecutter.json b/cookiecutter.json
index 0978cf1cd3a6d053330ae8b0add19aa8ab541448..fbb8138558370c83d28e01f6e0b709bd34e9d299 100644
--- a/cookiecutter.json
+++ b/cookiecutter.json
@@ -2,7 +2,7 @@
   "README of": "Cookiecutter template for relational RAG projects]\nPlease refer to <https://git-st.inf.tu-dresden.de/jastadd/project-templates/relast> for information on the parameters to follow\n[Continue with Enter",
   "repo_name": "test_repo",
   "project_name": "My New Relational RAG Project",
-  "project_short_name": "NewRelAST",
+  "grammar_name": "{{ cookiecutter.project_name.replace(' ', '') }}",
   "namespace": "jastadd",
   "project_url": "git@git-st.inf.tu-dresden.de:{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}.git",
   "repo_url": "https://git-st.inf.tu-dresden.de/{{cookiecutter.namespace}}/{{cookiecutter.repo_name}}",
diff --git a/hooks/pre_gen_project.py b/hooks/pre_gen_project.py
index faafdaf2b0f18bbaac06f6bb239257b4dc42076c..e17e66cdc573b9667a2a99e5a6242b31e5bbb57a 100644
--- a/hooks/pre_gen_project.py
+++ b/hooks/pre_gen_project.py
@@ -1,11 +1,19 @@
+import re
 import sys
 
-project_short_name = '{{cookiecutter.project_short_name}}'
+MODULE_REGEX = r'^[_a-zA-Z][_a-zA-Z0-9]+$'
+
+repo_name = '{{cookiecutter.repo_name}}'
+grammar_name = '{{cookiecutter.grammar_name}}'
 
 
 def main():
-    if not project_short_name.isalnum():
-        print('project_short_name "' + project_short_name + '" must be a single word. Exiting.')
+    if not re.match(MODULE_REGEX, repo_name):
+        print('Error: repo_name "%s" is not a valid URL and Java package name' % repo_name)
+        sys.exit(1)
+
+    if not grammar_name.isalnum():
+        print('Error: grammar_name "%s" must be a single word. Exiting.' % grammar_name)
         sys.exit(1)
 
 
diff --git a/{{cookiecutter.repo_name}}/.gitlab-ci.yml b/{{cookiecutter.repo_name}}/.gitlab-ci.yml
index 0290ed4790bfd5f67d04da3178f12f8e735a63a5..d23211f1714b371ab001f7e3d3599db165067701 100644
--- a/{{cookiecutter.repo_name}}/.gitlab-ci.yml
+++ b/{{cookiecutter.repo_name}}/.gitlab-ci.yml
@@ -37,7 +37,7 @@ diagram:
     - "./gradlew generateGrammarDiagrams"
   artifacts:
     paths:
-      - "src/gen/resources/{{cookiecutter.project_short_name}}Grammar.png"
+      - "src/gen/resources/{{cookiecutter.grammar_name}}Grammar.png"
 
 ragdoc_build:
   image: "git-st.inf.tu-dresden.de:4567/jastadd/ragdoc-builder"
@@ -80,7 +80,7 @@ pages:
     - pip install -r pages/requirements.txt
   script:
     - mkdir pages/docs/diagrams
-    - cp src/gen/resources/{{cookiecutter.project_short_name}}Grammar.png pages/docs/diagrams/
+    - cp src/gen/resources/{{cookiecutter.grammar_name}}Grammar.png pages/docs/diagrams/
     - cd pages && mkdocs build
   artifacts:
     paths:
diff --git a/{{cookiecutter.repo_name}}/build.gradle b/{{cookiecutter.repo_name}}/build.gradle
index 5be04cbb083f3028d3f1045abe2d6a27527d091e..a78380cddf43b7db8e46e57c2eea3331d189b70e 100644
--- a/{{cookiecutter.repo_name}}/build.gradle
+++ b/{{cookiecutter.repo_name}}/build.gradle
@@ -28,19 +28,22 @@ dependencies {
     // implementation group: 'de.tudresden.inf.st', name: 'dumpAst', version: "${dumpAst_version}"
     grammar2uml group: 'de.tudresden.inf.st', name: 'grammar2uml', version: "${grammar2uml_version}"
     relast group: 'org.jastadd', name: 'relast', version: "${relast_version}"
+    jastadd2 group: 'org.jastadd', name: 'jastadd2', version: "${jastadd_version}"
+
     testImplementation group: 'org.assertj', name: 'assertj-core', version: "${assertj_version}"
     testImplementation group: 'org.junit.jupiter', name: 'junit-jupiter-api', version: "${jupyter_version}"
     testRuntimeOnly group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: "${jupyter_version}"
 }
 
 // --- Preprocessors ---
-File genSrc = file("src/gen/java")
+def genJastaddDir = './src/gen/jastadd'
+File genSrc = file("${genJastaddDir}")
 idea.module.generatedSourceDirs += genSrc
 sourceSets.main.java.srcDir genSrc
 
-def relastFiles = ['./src/main/jastadd/{{cookiecutter.project_short_name}}.relast']
-def grammarPrefix = './src/gen/jastadd/{{cookiecutter.project_short_name}}'
-def grammarDiagramFile = './src/gen/resources/{{cookiecutter.project_short_name}}Grammar.png'
+def relastFiles = ['./src/main/jastadd/{{cookiecutter.grammar_name}}.relast']
+def grammarPrefix = "${genJastaddDir}/{{cookiecutter.grammar_name}}"
+def grammarDiagramFile = './src/gen/resources/{{cookiecutter.grammar_name}}Grammar.png'
 def jastAddListName = 'JastAddList'
 
 task generateGrammarDiagrams(type: JavaExec) {
@@ -64,7 +67,7 @@ task relastToJastAdd(type: JavaExec) {
     mainClass = 'org.jastadd.relast.compiler.Compiler'
 
     doFirst {
-        mkdir "src/gen/jastadd/"
+        mkdir "${genJastaddDir}"
     }
 
     args "--grammarName=${grammarPrefix}",
@@ -84,13 +87,6 @@ jastadd {
     modules {
         //noinspection GroovyAssignabilityCheck
         module('relast-module') {
-
-            java {
-                basedir 'src/'
-                include 'main/**/*.java'
-                include 'gen/**/*.java'
-            }
-
             jastadd {
                 basedir 'src/'
                 include 'main/jastadd/**/*.ast'
@@ -119,7 +115,7 @@ jastadd {
     }
 
     // TODO uncomment of parser is used
-    // parser.name = '{{cookiecutter.project_short_name}}Parser'
+    // parser.name = '{{cookiecutter.grammar_name}}Parser'
     // scanner.genDir = 'src/gen/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/scanner'
     // parser.genDir = 'src/gen/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/parser'
 
@@ -148,7 +144,7 @@ ext {
 }
 
 jar.manifest {
-    attributes 'Main-Class': '${mainClassName}'
+    attributes 'Main-Class': "${mainClassName}"
 }
 
 task fatJar(type: Jar) {
diff --git a/{{cookiecutter.repo_name}}/pages/docs/index.md b/{{cookiecutter.repo_name}}/pages/docs/index.md
index 824fea10df7e85bc420d61d21c32e3cd116aedbe..a3c1d9ec45e2556784ba0d2a51355f595fe35925 100644
--- a/{{cookiecutter.repo_name}}/pages/docs/index.md
+++ b/{{cookiecutter.repo_name}}/pages/docs/index.md
@@ -4,5 +4,5 @@
 
 ## The Grammar
 
-![](diagrams/{{cookiecutter.project_short_name}}Grammar.png)
+![](diagrams/{{cookiecutter.grammar_name}}Grammar.png)
 
diff --git a/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.project_short_name}}.relast b/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.grammar_name}}.relast
similarity index 69%
rename from {{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.project_short_name}}.relast
rename to {{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.grammar_name}}.relast
index 659992af8a6cd785a0b76b143bb13e6be5e9b70c..d46a5f14fd8aaf6bc8dab9b56b73199c76eee68e 100644
--- a/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.project_short_name}}.relast
+++ b/{{cookiecutter.repo_name}}/src/main/jastadd/{{cookiecutter.grammar_name}}.relast
@@ -1,4 +1,4 @@
-// Grammar for {{cookiecutter.project_short_name}}
+// Grammar for {{cookiecutter.grammar_name}}
 
 // TODO replace with own grammar
 Root ::= A B* [myC:C];
diff --git a/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java b/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java
index fdce0c056b74fd23cb57eb9e3b9c23e5458de746..da76b962d72bb773a4ce5c7b60a8fc9beecb4f40 100644
--- a/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java
+++ b/{{cookiecutter.repo_name}}/src/main/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/Main.java
@@ -6,7 +6,7 @@ public class Main {
 
   public static void main(String[] args) {
     // TODO put code here
-    System.out.println("Running {{cookiecutter.project_short_name}}");
+    System.out.println("Running {{cookiecutter.project_name}}");
   }
 
 }
diff --git a/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.project_short_name}}Test.java b/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.grammar_name}}Test.java
similarity index 83%
rename from {{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.project_short_name}}Test.java
rename to {{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.grammar_name}}Test.java
index 590a0bc416f21bbda34756376e6639ece8803a70..6c83b0fac1e13d96c12d93d6c949914f46f89103 100644
--- a/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.project_short_name}}Test.java
+++ b/{{cookiecutter.repo_name}}/src/test/java/de/tudresden/inf/st/{{cookiecutter.repo_name}}/{{cookiecutter.grammar_name}}Test.java
@@ -5,7 +5,7 @@ import de.tudresden.inf.st.{{cookiecutter.repo_name}}.ast.*;
 import org.junit.jupiter.api.Test;
 import static org.assertj.core.api.Assertions.assertThat;
 
-public class {{cookiecutter.project_short_name}}Test {
+public class {{cookiecutter.grammar_name}}Test {
 
   @Test
   void test() {