diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java b/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..dd6e74dc9112e7671f2b20d98b23418432c63701
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewElement.java
@@ -0,0 +1,74 @@
+package org.jastadd.tooling;
+
+import com.intellij.ide.projectView.PresentationData;
+import com.intellij.ide.structureView.StructureViewTreeElement;
+import com.intellij.ide.util.treeView.smartTree.SortableTreeElement;
+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.jetbrains.annotations.NotNull;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RelAstGrammarStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
+
+  private final NavigatablePsiElement myElement;
+
+  public RelAstGrammarStructureViewElement(NavigatablePsiElement element) {
+    this.myElement = element;
+  }
+
+  @Override
+  public Object getValue() {
+    return myElement;
+  }
+
+  @Override
+  public void navigate(boolean requestFocus) {
+    myElement.navigate(requestFocus);
+  }
+
+  @Override
+  public boolean canNavigate() {
+    return myElement.canNavigate();
+  }
+
+  @Override
+  public boolean canNavigateToSource() {
+    return myElement.canNavigateToSource();
+  }
+
+  @NotNull
+  @Override
+  public String getAlphaSortKey() {
+    String name = myElement.getName();
+    return name != null ? name : "";
+  }
+
+  @NotNull
+  @Override
+  public ItemPresentation getPresentation() {
+    ItemPresentation presentation = myElement.getPresentation();
+    return presentation != null ? presentation : new PresentationData();
+  }
+
+  @NotNull
+  @Override
+  public TreeElement @NotNull [] getChildren() {
+    if (myElement instanceof RelAstGrammarFile) {
+      List<RelAstGrammarTypeDecl> properties = PsiTreeUtil.getChildrenOfTypeAsList(myElement, RelAstGrammarTypeDecl.class);
+      List<TreeElement> treeElements = new ArrayList<>(properties.size());
+      for (RelAstGrammarTypeDecl property : properties) {
+        treeElements.add(new RelAstGrammarStructureViewElement((RelAstGrammarTypeDeclImpl) property));
+      }
+      return treeElements.toArray(new TreeElement[0]);
+    }
+    return EMPTY_ARRAY;
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java b/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..23b14e4281f2816557667501fab17a594ce7485c
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewFactory.java
@@ -0,0 +1,26 @@
+package org.jastadd.tooling;
+
+import com.intellij.ide.structureView.StructureViewBuilder;
+import com.intellij.ide.structureView.StructureViewModel;
+import com.intellij.ide.structureView.TreeBasedStructureViewBuilder;
+import com.intellij.lang.PsiStructureViewFactory;
+import com.intellij.openapi.editor.Editor;
+import com.intellij.psi.PsiFile;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+public class RelAstGrammarStructureViewFactory implements PsiStructureViewFactory {
+
+  @Nullable
+  @Override
+  public StructureViewBuilder getStructureViewBuilder(@NotNull final PsiFile psiFile) {
+    return new TreeBasedStructureViewBuilder() {
+      @NotNull
+      @Override
+      public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
+        return new RelAstGrammarStructureViewModel(psiFile);
+      }
+    };
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java b/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..9f164f06b9c71570d7578c83452f1ad49dcaad1e
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/RelAstGrammarStructureViewModel.java
@@ -0,0 +1,34 @@
+package org.jastadd.tooling;
+
+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.jetbrains.annotations.NotNull;
+
+public class RelAstGrammarStructureViewModel extends StructureViewModelBase implements
+  StructureViewModel.ElementInfoProvider {
+
+  public RelAstGrammarStructureViewModel(PsiFile psiFile) {
+    super(psiFile, new RelAstGrammarStructureViewElement(psiFile));
+  }
+
+  @NotNull
+  public Sorter[] getSorters() {
+    return new Sorter[]{Sorter.ALPHA_SORTER};
+  }
+
+
+  @Override
+  public boolean isAlwaysShowsPlus(StructureViewTreeElement element) {
+    return false;
+  }
+
+  @Override
+  public boolean isAlwaysLeaf(StructureViewTreeElement element) {
+    return element instanceof RelAstGrammarFile;
+  }
+
+}
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index f2d489f03713716ac8366d9e10f068dc8130ae8f..29eb7921f9f6a73367c02f9b3c68a98271a4911a 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -41,8 +41,10 @@
         <lang.findUsagesProvider language="JastAddGrammar"
                                  implementationClass="org.jastadd.tooling.RelAstGrammarFindUsageProvider"/>
 
-        <gotoSymbolContributor
-            implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/>
+        <gotoSymbolContributor implementation="org.jastadd.tooling.RelAstGrammarChooseByNameContributor"/>
+
+        <lang.psiStructureViewFactory language="JastAddGrammar"
+                                      implementationClass="org.jastadd.tooling.RelAstGrammarStructureViewFactory"/>
     </extensions>
 
     <actions>