diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java b/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..3f8f4c50910dd4c7730f8896ab66b9d93c2ffe52
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/RelAstGrammarFindUsageProvider.java
@@ -0,0 +1,67 @@
+package org.jastadd.tooling;
+
+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.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class RelAstGrammarFindUsageProvider 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),
+      TokenSet.EMPTY);
+  }
+
+  @Override
+  public boolean canFindUsagesFor(@NotNull PsiElement psiElement) {
+    return psiElement instanceof RelAstGrammarTypeDecl; // was: PsiNamedElement
+  }
+
+  @Nullable
+  @Override
+  public String getHelpId(@NotNull PsiElement psiElement) {
+    return null;
+  }
+
+  @NotNull
+  @Override
+  public String getType(@NotNull PsiElement element) {
+    if (element instanceof RelAstGrammarTypeDecl) {
+      return "JastAdd Nonterminal Type";
+    } else {
+      return "";
+    }
+  }
+
+  @NotNull
+  @Override
+  public String getDescriptiveName(@NotNull PsiElement element) {
+    if (element instanceof RelAstGrammarTypeDecl && ((RelAstGrammarTypeDecl) element).getName() != null) {
+      return ((RelAstGrammarTypeDecl) element).getName();
+    } else {
+      return "";
+    }
+  }
+
+  @NotNull
+  @Override
+  public String getNodeText(@NotNull PsiElement element, boolean useFullName) {
+    if (element instanceof RelAstGrammarTypeDecl) {
+      return ((RelAstGrammarTypeDecl) element).getText();
+    } else {
+      return "";
+    }
+  }
+
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index 6c566e8bda4fe61f5c58aebc9e52240dcd6c3a72..7bb097d05c32c16a757a723a855c5212d4879a59 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -38,6 +38,10 @@
                                  implementationClass="org.jastadd.tooling.RelAstGrammarRefactoringSupportProvider"/>
 
         <lang.elementManipulator forClass="org.jastadd.tooling.psi.RelAstGrammarTypeReference" implementationClass="org.jastadd.tooling.psi.RelAstGrammarTypeReferenceManipulator"/>
+
+
+        <lang.findUsagesProvider language="JastAddGrammar"
+                                 implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/>
     </extensions>
 
     <actions>