diff --git a/src/main/jastadd/RelAst.relast b/src/main/jastadd/RelAst.relast
index 2168413aef3510a889a1a2ea3f71ea4624938f1c..b92cb924a986af6d13084792f597650e65329499 100644
--- a/src/main/jastadd/RelAst.relast
+++ b/src/main/jastadd/RelAst.relast
@@ -20,7 +20,7 @@ NormalComponent : TypeComponent;
 ListComponent : TypeComponent;
 OptComponent : TypeComponent;
 
-TokenComponent : Component ::= JavaTypeUse;
+TokenComponent : Component ::= [JavaTypeUse];
 
 abstract JavaTypeUse ::= <Name>;
 SimpleJavaTypeUse : JavaTypeUse;
diff --git a/src/main/jastadd/backend/AbstractGrammar.jadd b/src/main/jastadd/backend/AbstractGrammar.jadd
index 870132c2cf4fa0fa6e7ec75759ec39f72872fa3c..713efeed9b83ff4d5833323dd00e2e3fddeda50c 100644
--- a/src/main/jastadd/backend/AbstractGrammar.jadd
+++ b/src/main/jastadd/backend/AbstractGrammar.jadd
@@ -101,9 +101,14 @@ aspect BackendAbstractGrammar {
     }
     b.append("<");
     if (!getName().equals("")) {
-      b.append(getName()).append(":");
+      b.append(getName());
+      if (hasJavaTypeUse()) {
+        b.append(":");
+      }
+    }
+    if (hasJavaTypeUse()) {
+      getJavaTypeUse().generateAbstractGrammar(b);
     }
-    getJavaTypeUse().generateAbstractGrammar(b);
     b.append(">");
     if (getNTA()) {
       b.append("/");
diff --git a/src/main/jastadd/parser/RelAst.parser b/src/main/jastadd/parser/RelAst.parser
index f94fbef474825bbd669f89ce070b2ce8fc406c72..c05c959f6f5f7729549024daeb2da3ea1d315a88 100644
--- a/src/main/jastadd/parser/RelAst.parser
+++ b/src/main/jastadd/parser/RelAst.parser
@@ -118,11 +118,10 @@ Component actual_component
       result.setJavaTypeUse(type);
       return result;
     :}
-  | LT ID.type GT
+  | LT ID.name GT
     {:
       TokenComponent result = new TokenComponent();
-      result.setName(type);
-      result.setJavaTypeUse(new SimpleJavaTypeUse(type));
+      result.setName(name);
       return result;
     :}
 ;