diff --git a/src/main/grammar/Grammar.bnf b/src/main/grammar/Grammar.bnf
index ca92e0fd3bf99f0f98add4a662748cb893ac6a6e..df4ab340fe111e7d0c0c3d3b8f11ffa0d52f0a20 100644
--- a/src/main/grammar/Grammar.bnf
+++ b/src/main/grammar/Grammar.bnf
@@ -19,7 +19,7 @@ GrammarFile ::= comment* ((type_decl | relation) comment*)*
 
 comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
 
-type_decl ::= ABSTRACT? type_name (COL type_reference)? (ASSIGN (component | nta_component)*)? SCOL
+type_decl ::= ABSTRACT? type_name (COL type_name)? (ASSIGN (component | nta_component)*)? SCOL
 {
   extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeDeclImplExtension"
   implements="org.jastadd.tooling.grammar.psi.GrammarNamedElement"
@@ -27,7 +27,7 @@ type_decl ::= ABSTRACT? type_name (COL type_reference)? (ASSIGN (component | nta
 
 nta_component ::= SLASH component SLASH
 
-component ::= (component_name COL type_reference STAR?) | (type_reference STAR?) | (LBRACKET component_name COL type_reference RBRACKET) | (LBRACKET type_reference RBRACKET) | (LT component_name (COL (java_type_use))? GT)
+component ::= (component_name COL type_name STAR?) | (type_name STAR?) | (LBRACKET component_name COL type_name RBRACKET) | (LBRACKET type_name RBRACKET) | (LT component_name (COL (java_type_use))? GT)
 
 java_type_use ::=  parameterized_java_type_use | simple_java_type_use
 
@@ -37,16 +37,16 @@ simple_java_type_use ::=  java_name (DOT java_name)*
 
 relation ::=  REL ((unnamed_role LEFT navigable_role) | (navigable_role RIGHT unnamed_role) | (navigable_role BIDIRECTIONAL navigable_role)) SCOL
 
-unnamed_role ::= type_reference | navigable_role
+unnamed_role ::= type_name | navigable_role
 
-navigable_role ::= type_reference DOT component_name (STAR | QUESTION_MARK)?
+navigable_role ::= type_name DOT component_name (STAR | QUESTION_MARK)?
 
-// for auto-completion, it is helpful if we can distinguish the different IDs
-type_name ::= ID
+//// for auto-completion, it is helpful if we can distinguish the different IDs
+//type_name ::= ID
 
-type_reference ::= ID
+type_name ::= ID
 {
-  extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeReferenceImplExtension"
+  extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeNameImplExtension"
   implements="org.jastadd.tooling.grammar.psi.GrammarNamedElement"
 }
 
diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java b/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java
index 7e501556e65c64b1f6df50315432d252f2384c21..ee0e88a0704b3b396255c3ff30f81192eefbbac7 100644
--- a/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarAnnotator.java
@@ -8,7 +8,7 @@ import com.intellij.lang.annotation.HighlightSeverity;
 import com.intellij.openapi.editor.DefaultLanguageHighlighterColors;
 import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.grammar.psi.GrammarComponent;
-import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarTypeName;
 import org.jetbrains.annotations.NotNull;
 
 public class GrammarAnnotator implements Annotator {
@@ -18,9 +18,9 @@ public class GrammarAnnotator implements Annotator {
 
     if (element instanceof GrammarComponent) {
       GrammarComponent component = (GrammarComponent) element;
-      if (component.getTypeReference() != null && component.getComponentName() != null) {
+      if (component.getTypeName() != null && component.getComponentName() != null) {
         String name = component.getComponentName().getText();
-        if (name != null && !name.equals("") && name.equals(component.getTypeReference().getName())) {
+        if (name != null && !name.equals("") && name.equals(component.getTypeName().getName())) {
           holder.newAnnotation(HighlightSeverity.WEAK_WARNING, "Redundant name")
             .range(component.getComponentName().getTextRange())
             .highlightType(ProblemHighlightType.WEAK_WARNING)
@@ -30,8 +30,8 @@ public class GrammarAnnotator implements Annotator {
             .create();
         }
       }
-    } else if (element instanceof GrammarTypeReference) {
-      GrammarTypeReference reference = (GrammarTypeReference) element;
+    } else if (element instanceof GrammarTypeName) {
+      GrammarTypeName reference = (GrammarTypeName) element;
       if (GrammarUtil.findTypeDecl(element.getProject(), reference.getName()).isEmpty()) {
         holder.newAnnotation(HighlightSeverity.ERROR, "Undefined reference")
           .range(element.getTextRange())
diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java
index ee356908fe4ccce7cab89dec9c3fe41251744209..a3939dc90ca034aef2cafe0657bc7898bc10dddb 100644
--- a/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarCompletionContributor.java
@@ -7,7 +7,7 @@ import com.intellij.util.ProcessingContext;
 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.grammar.psi.GrammarTypeName;
 import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 
@@ -24,7 +24,7 @@ public class GrammarCompletionContributor extends CompletionContributor {
                                    @NotNull ProcessingContext context,
                                    @NotNull CompletionResultSet resultSet) {
           for (GrammarTypeDecl decl : GrammarUtil.findTypeDecl(parameters.getPosition().getProject())) {
-            GrammarTypeReference ref = GrammarElementFactory.createTypeReference(parameters.getPosition().getProject(), decl.getName());
+            GrammarTypeName ref = GrammarElementFactory.createTypeName(parameters.getPosition().getProject(), decl.getName());
             resultSet.addElement(LookupElementBuilder.create(ref).withIcon(JastAddIcons.FILE).withTypeText(decl.getContainingFile().getName()));
           }
         }
diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java b/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java
index c726f7971618b49ff00c934ebd3b7cd79704faf0..07be384087a7e006e7321d61f0fd7503076309dc 100644
--- a/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarRefactoringSupportProvider.java
@@ -4,7 +4,6 @@ package org.jastadd.tooling.grammar;
 import com.intellij.lang.refactoring.RefactoringSupportProvider;
 import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.grammar.psi.GrammarTypeName;
-import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
@@ -14,7 +13,7 @@ public class GrammarRefactoringSupportProvider extends RefactoringSupportProvide
   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 GrammarTypeName) || (elementToRename instanceof GrammarTypeReference);
+    return elementToRename instanceof GrammarTypeName;
   }
 
 }
diff --git a/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java b/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java
index 728058c2095b0c858788183b68779f0c64235d59..2724d9107c243d2067c8abc7485be942a718e005 100644
--- a/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java
+++ b/src/main/java/org/jastadd/tooling/grammar/GrammarReferenceContributor.java
@@ -4,21 +4,21 @@ import com.intellij.openapi.util.TextRange;
 import com.intellij.patterns.PlatformPatterns;
 import com.intellij.psi.*;
 import com.intellij.util.ProcessingContext;
-import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarTypeName;
 import org.jetbrains.annotations.NotNull;
 
 public class GrammarReferenceContributor extends PsiReferenceContributor {
 
   @Override
   public void registerReferenceProviders(@NotNull PsiReferenceRegistrar registrar) {
-    registrar.registerReferenceProvider(PlatformPatterns.psiElement(GrammarTypeReference.class),
+    registrar.registerReferenceProvider(PlatformPatterns.psiElement(GrammarTypeName.class),
       new PsiReferenceProvider() {
         @NotNull
         @Override
         public PsiReference @NotNull [] getReferencesByElement(@NotNull PsiElement element,
                                                                @NotNull ProcessingContext context) {
 
-          GrammarTypeReference typeReference = (GrammarTypeReference) element;
+          GrammarTypeName typeReference = (GrammarTypeName) element;
           String value = typeReference.getText();
           if (value != null) {
             TextRange range = new TextRange(0, value.length());
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java
index aaacf268a10a5b7d47b9db1d479e5a34d93b3394..0a0aa0308f30baed6dad4a163c9a44093e07264f 100644
--- a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarElementFactory.java
@@ -15,12 +15,7 @@ public class GrammarElementFactory {
 
   public static GrammarTypeName createTypeName(Project project, String name) {
     final GrammarFile file = createFile(project, name + ";");
-    return (GrammarTypeName) 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());
+    return (GrammarTypeName) (Objects.requireNonNull(file.getFirstChild().getNode().findChildByType(GrammarTypes.TYPE_NAME)).getPsi());
   }
 
   public static GrammarComponentName createComponentName(Project project, String name) {
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeNameManipulator.java
similarity index 66%
rename from src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java
rename to src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeNameManipulator.java
index 7ab2f70c6e8376f986224f54c36c08994fe70e80..ea2a34466ebe44825504e12bb9bad25577e2dd66 100644
--- a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeReferenceManipulator.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarTypeNameManipulator.java
@@ -7,7 +7,7 @@ import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
-public class GrammarTypeReferenceManipulator extends AbstractElementManipulator<GrammarTypeReference> implements ElementManipulator<GrammarTypeReference> {
+public class GrammarTypeNameManipulator extends AbstractElementManipulator<GrammarTypeName> implements ElementManipulator<GrammarTypeName> {
   /**
    * Changes the element's text to the given new text.
    *
@@ -19,9 +19,9 @@ public class GrammarTypeReferenceManipulator extends AbstractElementManipulator<
    */
   @Nullable
   @Override
-  public GrammarTypeReference handleContentChange(@NotNull GrammarTypeReference element, @NotNull TextRange range, String newContent) {
+  public GrammarTypeName handleContentChange(@NotNull GrammarTypeName element, @NotNull TextRange range, String newContent) {
     try {
-      return (GrammarTypeReference) element.setName(range.replace(element.getText(), newContent));
+      return (GrammarTypeName) 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/grammar/psi/impl/GrammarComponentNameImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarComponentNameImplExtension.java
index 84e04ad5b5368a181d9a23abf6f4e5dc2b72de5e..c598375ba03d46153e4cb6c68b3fe1f1b3c3421c 100644
--- a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarComponentNameImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarComponentNameImplExtension.java
@@ -5,7 +5,7 @@ import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.grammar.psi.GrammarComponentName;
 import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
 import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
-import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
+import org.jastadd.tooling.grammar.psi.GrammarTypeName;
 import org.jetbrains.annotations.NotNull;
 
 public class GrammarComponentNameImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java
deleted file mode 100644
index 388b9129f3e99b0f3949099ef88616bf202632cd..0000000000000000000000000000000000000000
--- a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeReferenceImplExtension.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package org.jastadd.tooling.grammar.psi.impl;
-
-import com.intellij.lang.ASTNode;
-import com.intellij.psi.PsiElement;
-import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
-import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
-import org.jastadd.tooling.grammar.psi.GrammarTypeReference;
-import org.jetbrains.annotations.NotNull;
-
-public class GrammarTypeReferenceImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
-
-  public GrammarTypeReferenceImplExtension(@NotNull ASTNode node) {
-    super(node);
-  }
-
-  public String getName() {
-    // this finds the *first* ID, which is what we want
-    return getNode().getText();
-  }
-
-  public PsiElement setName(@NotNull String newName) {
-    // 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) {
-      GrammarTypeReference name = GrammarElementFactory.createTypeReference(getProject(), newName);
-      ASTNode newKeyNode = name.getNode().getFirstChildNode();
-      getNode().replaceChild(keyNode, newKeyNode);
-    }
-    return this;
-  }
-
-  public PsiElement getNameIdentifier() {
-    return getNode().getPsi();
-  }
-
-}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 5b1ae814b5c04e1e78c2cc01e0a44be2077d7f9c..c5bdfc6fd6915d57278099ca4d9c0ef3b46dbebb 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -38,8 +38,8 @@
         <lang.refactoringSupport language="JastAddGrammar"
                                  implementationClass="org.jastadd.tooling.grammar.GrammarRefactoringSupportProvider"/>
 
-        <lang.elementManipulator forClass="org.jastadd.tooling.grammar.psi.GrammarTypeReference"
-                                 implementationClass="org.jastadd.tooling.grammar.psi.GrammarTypeReferenceManipulator"/>
+        <lang.elementManipulator forClass="org.jastadd.tooling.grammar.psi.GrammarTypeName"
+                                 implementationClass="org.jastadd.tooling.grammar.psi.GrammarTypeNameManipulator"/>
 
 
         <lang.findUsagesProvider language="JastAddGrammar"