diff --git a/src/main/grammar/Aspect.bnf b/src/main/grammar/Aspect.bnf
index aca28a62073d58a3b791091d1a9fdb38f5951942..1bd54a8a035025a82dcca39fbdb23ac6e17bfe29 100644
--- a/src/main/grammar/Aspect.bnf
+++ b/src/main/grammar/Aspect.bnf
@@ -34,7 +34,11 @@ modifiers ::= (PUBLIC | STATIC  | PROTECTED | PRIVATE | FINAL | ABSTRACT | SYNCH
 
 type_declaration ::= SEMICOLON | (modifiers ( class_declaration | interface_declaration | unmodified_enum_declaration | annotation_type_declaration | aspect_declaration ) )
 
-aspect_declaration ::= ASPECT IDENTIFIER aspect_body
+aspect_declaration ::= ASPECT aspect_name aspect_body
+{
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectDeclarationImplExtension"
+  implements="org.jastadd.tooling.common.psi.NamedElement"
+}
 
 aspect_body ::= LBRACE aspect_body_declaration* RBRACE
 
@@ -70,7 +74,7 @@ aspect_class_declaration ::= modifiers class_declaration
 
 // aspect_class_body unused
 
-aspect_interface_declaration ::= modifiers INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE
+aspect_interface_declaration ::= modifiers INTERFACE simple_type_name type_parameters? (EXTENDS type_name_list)? LBRACE aspect_interface_member_declaration* RBRACE
 
 aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
                                         | aspect_nested_interface_declaration
@@ -79,16 +83,16 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
                                         | aspect_interface_method_declaration
                                         | aspect_interface_field_declaration )
 
-aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON
+aspect_interface_syn_attribute_declaration ::= annotation* SYN LAZY? FINAL? aspect_type attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON
 {
   implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute"
-  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectSynAttributeImpl"
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectSynAttributeDeclarationImplExtension"
 }
 
-aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON
+aspect_interface_inh_attribute_declaration ::= annotation* INH LAZY? FINAL? aspect_type attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON
 {
   implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute"
-  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectInhAttributeImpl"
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectInhAttributeDeclarationImplExtension"
 }
 
 aspect_interface_method_declaration ::= (PUBLIC | PROTECTED | PRIVATE | STATIC | ABSTRACT | FINAL | NATIVE | SYNCHRONIZED )* aspect_result_type method_declarator (THROWS name_list)? SEMICOLON
@@ -103,41 +107,41 @@ aspect_nested_class_declaration ::= modifiers class_declaration
 
 aspect_method_declaration ::= modifiers type_parameters? aspect_result_type ast_type_name DOT method_declarator (THROWS name_list)? (block | SEMICOLON)
 
-aspect_refine_method_declaration ::= REFINE [IDENTIFIER] modifiers type_parameters? aspect_result_type IDENTIFIER DOT method_declarator (THROWS name_list)? (block | SEMICOLON)
+aspect_refine_method_declaration ::= REFINE [aspect_name] modifiers type_parameters? aspect_result_type ast_type_name DOT method_declarator (THROWS name_list)? (block | SEMICOLON)
 
 aspect_constructor_declaration ::= modifiers ast_type_name DOT ast_type_name formal_parameters (THROWS name_list)? LBRACE explicit_constructor_invocation? block_statement* RBRACE
 
-aspect_refine_constructor_declaration ::= REFINE IDENTIFIER (PUBLIC | PROTECTED | PRIVATE) ast_type_name DOT IDENTIFIER formal_parameters (THROWS name_list)? LBRACE block_statement* RBRACE
+aspect_refine_constructor_declaration ::= REFINE aspect_name (PUBLIC | PROTECTED | PRIVATE) ast_type_name DOT method_name formal_parameters (THROWS name_list)? LBRACE block_statement* RBRACE
 
 aspect_field_declaration ::= modifiers aspect_type ast_type_name DOT variable_declarator (COMMA variable_declarator)* SEMICOLON
 
-aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type ast_type_name DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? ( ASSIGN expression SEMICOLON | block | SEMICOLON )
+aspect_syn_attribute_declaration ::= annotation* SYN NTA? LAZY? FINAL? aspect_type ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? ( ASSIGN expression SEMICOLON | block | SEMICOLON )
 {
   implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute"
-  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectSynAttributeImpl"
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectSynAttributeDeclarationImplExtension"
 }
 
-aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type ast_type_name DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON
+aspect_inh_attribute_declaration ::= annotation* INH NTA? LAZY? FINAL? aspect_type ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)* )? RPAREN (CIRCULAR LBRACKET expression RBRACKET)? SEMICOLON
 {
   implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute"
-  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectInhAttributeImpl"
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectInhAttributeDeclarationImplExtension"
 }
 
 // FIXME parentheses are not required around the WHEN expression?
-aspect_rewrite ::= REWRITE IDENTIFIER (ast_type_name DOT IDENTIFIER LPAREN RPAREN)? LBRACE ((WHEN LPAREN expression RPAREN)? TO aspect_type ( expression SEMICOLON | block ))+ RBRACE
+aspect_rewrite ::= REWRITE ast_type_name (ast_type_name DOT method_name LPAREN RPAREN)? LBRACE ((WHEN LPAREN expression RPAREN)? TO aspect_type ( expression SEMICOLON | block ))+ RBRACE
 
-aspect_syn_equation ::= annotation* EQUATION ast_type_name DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN ( ASSIGN expression SEMICOLON | block )
+aspect_syn_equation ::= annotation* EQUATION ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)*)? RPAREN ( ASSIGN expression SEMICOLON | block )
 
-aspect_refine_syn_equation ::= REFINE IDENTIFIER EQUATION ast_type_name DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN expression SEMICOLON | block)
+aspect_refine_syn_equation ::= REFINE aspect_name EQUATION ast_type_name DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)*)? RPAREN (ASSIGN expression SEMICOLON | block)
 
-aspect_inh_equation ::= annotation* EQUATION ast_type_name DOT IDENTIFIER LPAREN (INT IDENTIFIER)? RPAREN DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN expression SEMICOLON | block)
+aspect_inh_equation ::= annotation* EQUATION ast_type_name DOT attribute_name LPAREN (INT parameter_name)? RPAREN DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)*)? RPAREN (ASSIGN expression SEMICOLON | block)
 
-aspect_refine_inh_equation ::= REFINE IDENTIFIER EQUATION ast_type_name DOT IDENTIFIER LPAREN (INT IDENTIFIER)? RPAREN DOT attribute_name LPAREN (type IDENTIFIER (COMMA type IDENTIFIER)*)? RPAREN (ASSIGN expression SEMICOLON | block)
+aspect_refine_inh_equation ::= REFINE aspect_name EQUATION ast_type_name DOT attribute_name LPAREN (INT parameter_name)? RPAREN DOT attribute_name LPAREN (type parameter_name (COMMA type parameter_name)*)? RPAREN (ASSIGN expression SEMICOLON | block)
 
-collection_attribute ::= annotation* COLL aspect_type ast_type_name DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET expression RBRACKET)? (WITH IDENTIFIER)? (ROOT IDENTIFIER)? SEMICOLON
+collection_attribute ::= annotation* COLL aspect_type ast_type_name DOT attribute_name LPAREN RPAREN CIRCULAR? (LBRACKET expression RBRACKET)? (WITH method_name)? (ROOT ast_type_name)? SEMICOLON
 {
   implements="org.jastadd.tooling.aspect.psi.JastAddAspectAttribute"
-  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectCollAttributeImpl"
+  extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectCollectionAttributeImplExtension"
 }
 
 collection_contribution ::= annotation* ast_type_name CONTRIBUTES ( NTA expression TO ast_type_name DOT attribute_name LPAREN RPAREN | EACH? expression (WHEN expression)? TO ast_type_name DOT attribute_name LPAREN RPAREN (FOR  EACH? expression)? | block TO ast_type_name DOT attribute_name LPAREN RPAREN ) SEMICOLON
@@ -146,14 +150,14 @@ aspect_add_interface ::= ast_type_name IMPLEMENTS type_name_list SEMICOLON
 
 aspect_extend_interface ::= ast_type_name EXTENDS type_name_list SEMICOLON
 
-class_declaration ::= CLASS IDENTIFIER type_parameters? (EXTENDS class_or_interface_type)? (implements type_name_list)? class_body
+class_declaration ::= CLASS simple_type_name type_parameters? (EXTENDS class_or_interface_type)? (implements type_name_list)? class_body
 
 type_name_list ::= class_or_interface_type (COMMA class_or_interface_type)*
 
-unmodified_class_declaration ::= CLASS IDENTIFIER type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? class_body
+unmodified_class_declaration ::= CLASS simple_type_name type_parameters? (EXTENDS class_or_interface_type)? (IMPLEMENTS type_name_list)? class_body
 
 // TODO check simplification
-aspect_enum_declaration ::= modifiers ENUM IDENTIFIER (IMPLEMENTS type_name_list)? enum_body
+aspect_enum_declaration ::= modifiers ENUM simple_type_name (IMPLEMENTS type_name_list)? enum_body
 
 unmodified_enum_declaration ::= ENUM java_identifier (IMPLEMENTS type_name_list)? enum_body
 
@@ -173,7 +177,7 @@ class_body_declaration ::= initializer | modifiers ( unmodified_class_declaratio
 
 interface_declaration ::= unmodified_interface_declaration
 
-unmodified_interface_declaration ::= INTERFACE IDENTIFIER type_parameters? (EXTENDS type_name_list)? LBRACE interface_member_declaration* RBRACE
+unmodified_interface_declaration ::= INTERFACE simple_type_name type_parameters? (EXTENDS type_name_list)? LBRACE interface_member_declaration* RBRACE
 
 interface_member_declaration ::= modifiers (unmodified_class_declaration | unmodified_interface_declaration | field_declaration | method_declaration) | SEMICOLON
 
@@ -217,7 +221,7 @@ reference_type ::= ( primitive_type (LBRACKET RBRACKET)+ ) | ( class_or_interfac
 class_or_interface_type ::= java_identifier type_arguments? (DOT java_identifier type_arguments? )*
 {
   extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectClassOrInterfaceTypeImplExtension"
-  implements="org.jastadd.tooling.grammar.psi.GrammarNamedElement"
+  implements="org.jastadd.tooling.common.psi.NamedElement"
 }
 
 type_arguments ::= LT (type_argument (COMMA type_argument)* )? GT
@@ -384,7 +388,7 @@ annotation_type_member_declaration ::= ( modifiers (aspect_type java_identifier
 
 default_value ::= DEFAULT member_value
 
-aspect_cache_declaration ::= (CACHE | UNCACHE) IDENTIFIER DOT attribute_name LPAREN (type IDENTIFIER? (COMMA type IDENTIFIER?)* )? RPAREN SEMICOLON
+aspect_cache_declaration ::= (CACHE | UNCACHE) aspect_name DOT attribute_name LPAREN (type parameter_name? (COMMA type parameter_name?)* )? RPAREN SEMICOLON
 
 java_identifier ::= IDENTIFIER | INH | SYN | LAZY | REWRITE | TO | WHEN | ASPECT | EQUATION | CIRCULAR | REFINE | COLL | CONTRIBUTES | EACH | NTA | CACHE | UNCACHE
 
@@ -393,8 +397,16 @@ attribute_name ::= IDENTIFIER
 ast_type_name ::= IDENTIFIER
 {
   extends="org.jastadd.tooling.aspect.psi.impl.JastAddAspectAstTypeNameImplExtension"
-  implements="org.jastadd.tooling.grammar.psi.GrammarNamedElement"
+  implements="org.jastadd.tooling.common.psi.NamedElement"
 }
 
+aspect_name ::= IDENTIFIER
+
+simple_type_name ::= IDENTIFIER
+
+parameter_name ::= IDENTIFIER
+
+method_name ::= IDENTIFIER
+
 // unused keywords must still appear somewhere
 unused_keywords ::= GOTO | CONST ELLIPSIS | PACKAGE
diff --git a/src/main/grammar/Grammar.bnf b/src/main/grammar/Grammar.bnf
index df4ab340fe111e7d0c0c3d3b8f11ffa0d52f0a20..34db53bc3d952affdf27c6c4d9846762c6a16e6e 100644
--- a/src/main/grammar/Grammar.bnf
+++ b/src/main/grammar/Grammar.bnf
@@ -22,7 +22,7 @@ comment ::= (WHITESPACE | MULTILINECOMMENT | DOCCOMMENT | SINGLELINECOMMENT)
 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"
+  implements="org.jastadd.tooling.common.psi.NamedElement"
 }
 
 nta_component ::= SLASH component SLASH
@@ -47,13 +47,13 @@ navigable_role ::= type_name DOT component_name (STAR | QUESTION_MARK)?
 type_name ::= ID
 {
   extends="org.jastadd.tooling.grammar.psi.impl.GrammarTypeNameImplExtension"
-  implements="org.jastadd.tooling.grammar.psi.GrammarNamedElement"
+  implements="org.jastadd.tooling.common.psi.NamedElement"
 }
 
 component_name ::= ID
 {
   extends="org.jastadd.tooling.grammar.psi.impl.GrammarComponentNameImplExtension"
-  implements="org.jastadd.tooling.grammar.psi.GrammarNamedElement"
+  implements="org.jastadd.tooling.common.psi.NamedElement"
 }
 
 
diff --git a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..38c5d6709657b32deda9c6287c0fb2311db9b46b
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewElement.java
@@ -0,0 +1,252 @@
+package org.jastadd.tooling.aspect;
+
+import com.intellij.icons.AllIcons;
+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.PsiElement;
+import com.intellij.psi.util.PsiTreeUtil;
+import org.jastadd.tooling.aspect.psi.*;
+import org.jastadd.tooling.aspect.psi.impl.*;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NotNull;
+
+import javax.swing.*;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+public class AspectStructureViewElement implements StructureViewTreeElement, SortableTreeElement {
+
+  private final NavigatablePsiElement myElement;
+
+  public AspectStructureViewElement(NavigatablePsiElement element) {
+    this.myElement = element;
+  }
+
+  @Override
+  public NavigatablePsiElement 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();
+
+    if (presentation == null) {
+      if (myElement instanceof JastAddAspectAspectMethodDeclaration) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectMethodDeclaration) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return AllIcons.Nodes.Method;
+          }
+        };
+      } else if (myElement instanceof JastAddAspectAspectClassDeclaration) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectClassDeclaration) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return AllIcons.Nodes.Class;
+          }
+        };
+      } else if (myElement instanceof JastAddAspectAspectEnumDeclaration) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectEnumDeclaration) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return AllIcons.Nodes.Enum;
+          }
+        };
+      } else if (myElement instanceof JastAddAspectAspectInterfaceDeclaration) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectInterfaceDeclaration) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return AllIcons.Nodes.Interface;
+          }
+        };
+      } else if (myElement instanceof JastAddAspectAspectFieldDeclaration) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectFieldDeclaration) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return AllIcons.Nodes.Field;
+          }
+        };
+      } else if (myElement instanceof JastAddAspectAspectConstructorDeclaration) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectConstructorDeclaration) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return AllIcons.Nodes.Method;
+          }
+        };
+      } else if (myElement instanceof JastAddAspectAspectRewrite) {
+        presentation = new ItemPresentation() {
+          @Override
+          public String getPresentableText() {
+            return AspectStructureViewElement.getPresentableText((JastAddAspectAspectRewrite) myElement);
+          }
+
+          @Override
+          public Icon getIcon(boolean unused) {
+            return JastAddIcons.REWRITE;
+          }
+        };
+      }
+
+    }
+
+    return presentation != null ? presentation : new PresentationData();
+  }
+
+  private static String getPresentableText(JastAddAspectAspectClassDeclaration decl) {
+    return decl.getModifiers().getText()
+      + " class " + decl.getClassDeclaration().getSimpleTypeName().getText();
+  }
+
+  private static String getPresentableText(JastAddAspectAspectEnumDeclaration decl) {
+    return decl.getModifiers().getText()
+      + " class " + decl.getSimpleTypeName().getText();
+  }
+
+  private static String getPresentableText(JastAddAspectAspectInterfaceDeclaration decl) {
+    return decl.getModifiers().getText()
+      + " class " + decl.getSimpleTypeName().getText();
+  }
+
+  private static String getPresentableText(JastAddAspectAspectFieldDeclaration decl) {
+    return decl.getModifiers().getText()
+      + " " + decl.getAstTypeName().getText()
+      + " : " + decl.getAspectType().getText();
+  }
+
+  private static String getPresentableText(JastAddAspectAspectRewrite rewrite) {
+    return "rewrite " + rewrite.getAstTypeNameList().get(0).getText()
+      + " to " + rewrite.getAspectTypeList().stream().map(JastAddAspectAspectType::getText).collect(Collectors.joining("/"));
+  }
+
+  private static String getPresentableText(JastAddAspectAspectConstructorDeclaration decl) {
+    return decl.getModifiers().getText()
+      + " " + decl.getAstTypeNameList().get(0).getText()
+      + "." + decl.getAstTypeNameList().get(1).getText()
+      + decl.getFormalParameters().getFormalParameterList().stream()
+      .map(JastAddAspectFormalParameter::getType)
+      .map(PsiElement::getText).collect(Collectors.joining(", ", "(", ")"));
+  }
+
+  private static String getPresentableText(JastAddAspectAspectMethodDeclaration decl) {
+    return decl.getModifiers().getText()
+      + " " + decl.getAstTypeName().getText()
+      + "." + AspectStructureViewElement.getPresentableText(decl.getMethodDeclarator()) + " : "
+      + decl.getAspectResultType().getText();
+  }
+
+  private static String getPresentableText(JastAddAspectMethodDeclarator declarator) {
+    return declarator.getJavaIdentifier().getText()
+      + declarator.getFormalParameters().getFormalParameterList().stream()
+      .map(JastAddAspectFormalParameter::getType)
+      .map(PsiElement::getText).collect(Collectors.joining(", ", "(", ")"));
+  }
+
+
+
+  @Override
+  public TreeElement @NotNull [] getChildren() {
+    if (myElement instanceof AspectFile) {
+      return PsiTreeUtil.getChildrenOfTypeAsList(myElement, JastAddAspectTypeDeclaration.class)
+        .stream()
+        .map(JastAddAspectTypeDeclaration::getAspectDeclaration)
+        .filter(Objects::nonNull)
+        .map(decl -> new AspectStructureViewElement((JastAddAspectAspectDeclarationImpl) decl))
+        .toArray(TreeElement[]::new);
+    } else if (myElement instanceof JastAddAspectAspectDeclaration) {
+      return PsiTreeUtil.getChildrenOfTypeAsList(((JastAddAspectAspectDeclaration) myElement).getAspectBody(), JastAddAspectAspectBodyDeclaration.class)
+        .stream()
+        .map(decl -> {
+          if (decl.getAspectSynAttributeDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectSynAttributeDeclarationImpl) decl.getAspectSynAttributeDeclaration());
+          } else if (decl.getAspectInhAttributeDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectInhAttributeDeclarationImpl) decl.getAspectInhAttributeDeclaration());
+          } else if (decl.getCollectionAttribute() != null) {
+            return new AspectStructureViewElement((JastAddAspectCollectionAttributeImpl) decl.getCollectionAttribute());
+          } else if (decl.getAspectMethodDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectMethodDeclarationImpl) decl.getAspectMethodDeclaration());
+          } else if (decl.getAspectClassDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectClassDeclarationImpl) decl.getAspectClassDeclaration());
+          } else if (decl.getAspectEnumDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectEnumDeclarationImpl) decl.getAspectEnumDeclaration());
+          } else if (decl.getAspectInterfaceDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectInterfaceDeclarationImpl) decl.getAspectInterfaceDeclaration());
+          } else if (decl.getAspectFieldDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectFieldDeclarationImpl) decl.getAspectFieldDeclaration());
+          } else if (decl.getAspectConstructorDeclaration() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectConstructorDeclarationImpl) decl.getAspectConstructorDeclaration());
+          } else if (decl.getAspectRewrite() != null) {
+            return new AspectStructureViewElement((JastAddAspectAspectRewriteImpl) decl.getAspectRewrite());
+          }
+          // missing cases include:
+          // aspect_refine_method_declaration
+          // aspect_refine_constructor_declaration
+          // aspect_add_interface
+          // aspect_extend_interface
+          return null;
+        })
+        .filter(Objects::nonNull)
+        .toArray(TreeElement[]::new);
+    }
+
+    return EMPTY_ARRAY;
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewFactory.java b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewFactory.java
new file mode 100644
index 0000000000000000000000000000000000000000..c16c0338cc093b5008d3937ed16853f4b1988a69
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewFactory.java
@@ -0,0 +1,27 @@
+package org.jastadd.tooling.aspect;
+
+
+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 AspectStructureViewFactory implements PsiStructureViewFactory {
+
+  @Nullable
+  @Override
+  public StructureViewBuilder getStructureViewBuilder(@NotNull final PsiFile psiFile) {
+    return new TreeBasedStructureViewBuilder() {
+      @NotNull
+      @Override
+      public StructureViewModel createStructureViewModel(@Nullable Editor editor) {
+        return new AspectStructureViewModel(psiFile);
+      }
+    };
+  }
+
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java
new file mode 100644
index 0000000000000000000000000000000000000000..e14181ba0b0d033be21a3e34a1b442ef4bb3e5f9
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/AspectStructureViewModel.java
@@ -0,0 +1,48 @@
+package org.jastadd.tooling.aspect;
+
+
+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.Filter;
+import com.intellij.ide.util.treeView.smartTree.Grouper;
+import com.intellij.ide.util.treeView.smartTree.Sorter;
+import com.intellij.psi.PsiFile;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jetbrains.annotations.NotNull;
+
+public class AspectStructureViewModel extends StructureViewModelBase implements
+  StructureViewModel.ElementInfoProvider {
+
+  public AspectStructureViewModel(PsiFile psiFile) {
+    super(psiFile, new AspectStructureViewElement(psiFile));
+  }
+
+  @NotNull
+  public Sorter @NotNull [] getSorters() {
+    return new Sorter[]{Sorter.ALPHA_SORTER};
+  }
+
+
+  @Override
+  public boolean isAlwaysShowsPlus(StructureViewTreeElement element) {
+    return element.getValue() instanceof JastAddAspectAspectDeclaration;
+  }
+
+  @Override
+  public boolean isAlwaysLeaf(StructureViewTreeElement element) {
+    return element.getValue() instanceof JastAddAspectAttribute;
+  }
+
+  @Override
+  public Grouper @NotNull [] getGroupers() {
+    // TODO group by member type
+    return new Grouper[]{};
+  }
+
+  @Override
+  public Filter @NotNull [] getFilters() {
+    return new Filter[]{new JastAddAspectAttributeFilter(), new JastAddAspectIntertypeFilter(), new JastAddAspectRewriteFilter()};
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectAttributeFilter.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectAttributeFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..974798ae8df3c14bc0dad827bb567e141052efc4
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectAttributeFilter.java
@@ -0,0 +1,44 @@
+package org.jastadd.tooling.aspect;
+
+import com.intellij.ide.util.treeView.smartTree.ActionPresentation;
+import com.intellij.ide.util.treeView.smartTree.ActionPresentationData;
+import com.intellij.ide.util.treeView.smartTree.Filter;
+import com.intellij.ide.util.treeView.smartTree.TreeElement;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class JastAddAspectAttributeFilter implements Filter {
+  @NonNls
+  public static final String ID = "HIDE_ATTRIBUTE";
+
+  @Override
+  public boolean isVisible(TreeElement treeNode) {
+    if (treeNode instanceof AspectStructureViewElement) {
+      return !(((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAttribute);
+    }
+    else {
+      return true;
+    }
+  }
+
+  @Override
+  @NotNull
+  public ActionPresentation getPresentation() {
+    // TODO use i18n and string bundle like JavaStructureViewBundle
+    return new ActionPresentationData("Hide Attributes", null, JastAddIcons.ATTRIBUTE);
+  }
+
+  @Override
+  @NotNull
+  public String getName() {
+    return ID;
+  }
+
+  @Override
+  public boolean isReverted() {
+    return false;
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..5f0371916db01d98f78a3025d3e5ff62b7ed36e0
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectIntertypeFilter.java
@@ -0,0 +1,52 @@
+package org.jastadd.tooling.aspect;
+
+import com.intellij.ide.util.treeView.smartTree.ActionPresentation;
+import com.intellij.ide.util.treeView.smartTree.ActionPresentationData;
+import com.intellij.ide.util.treeView.smartTree.Filter;
+import com.intellij.ide.util.treeView.smartTree.TreeElement;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectEnumDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectFieldDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectInterfaceDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectMethodDeclaration;
+import org.jastadd.tooling.aspect.psi.impl.JastAddAspectAspectClassDeclarationImpl;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class JastAddAspectIntertypeFilter implements Filter {
+  @NonNls
+  public static final String ID = "HIDE_INTERTYPE_DECLS";
+
+  @Override
+  public boolean isVisible(TreeElement treeNode) {
+    if (treeNode instanceof AspectStructureViewElement) {
+      return !(
+        ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectMethodDeclaration
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectClassDeclarationImpl
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectEnumDeclaration
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectInterfaceDeclaration
+          || ((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectFieldDeclaration
+      );
+    } else {
+      return true;
+    }
+  }
+
+  @Override
+  @NotNull
+  public ActionPresentation getPresentation() {
+    // TODO use i18n and string bundle like JavaStructureViewBundle
+    return new ActionPresentationData("Hide Intertype Declarations", null, JastAddIcons.INTERTYPE_DECL);
+  }
+
+  @Override
+  @NotNull
+  public String getName() {
+    return ID;
+  }
+
+  @Override
+  public boolean isReverted() {
+    return false;
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java
new file mode 100644
index 0000000000000000000000000000000000000000..bd82e1ae3206078d3128bbb48658a482ce03877b
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/JastAddAspectRewriteFilter.java
@@ -0,0 +1,44 @@
+package org.jastadd.tooling.aspect;
+
+import com.intellij.ide.util.treeView.smartTree.ActionPresentation;
+import com.intellij.ide.util.treeView.smartTree.ActionPresentationData;
+import com.intellij.ide.util.treeView.smartTree.Filter;
+import com.intellij.ide.util.treeView.smartTree.TreeElement;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectRewrite;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NonNls;
+import org.jetbrains.annotations.NotNull;
+
+public class JastAddAspectRewriteFilter implements Filter {
+  @NonNls
+  public static final String ID = "HIDE_REWRITES";
+
+  @Override
+  public boolean isVisible(TreeElement treeNode) {
+    if (treeNode instanceof AspectStructureViewElement) {
+      return !(((AspectStructureViewElement) treeNode).getValue() instanceof JastAddAspectAspectRewrite);
+    }
+    else {
+      return true;
+    }
+  }
+
+  @Override
+  @NotNull
+  public ActionPresentation getPresentation() {
+    // TODO use i18n and string bundle like JavaStructureViewBundle
+    return new ActionPresentationData("Hide Rewrites", null, JastAddIcons.REWRITE);
+  }
+
+  @Override
+  @NotNull
+  public String getName() {
+    return ID;
+  }
+
+  @Override
+  public boolean isReverted() {
+    return false;
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementFactory.java b/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementFactory.java
index 575b08a8d95c3e09a06a0849ec22306d4825291b..1b0685db7fe1551e5dd02671ffe41a70d26005f7 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementFactory.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/AspectElementFactory.java
@@ -34,4 +34,13 @@ public class AspectElementFactory {
     return (AspectFile) PsiFileFactory.getInstance(project).
       createFileFromText(name, AspectFileType.INSTANCE, text);
   }
+
+  public static JastAddAspectAspectDeclaration createAspectDeclaration(Project project, String name) {
+    final AspectFile file = createFile(project, "aspect " + name + "{}");
+    PsiElement result = file.getFirstChild().findElementAt(20);
+    if (result != null) {
+      return (JastAddAspectAspectDeclaration) result.getParent().getParent();
+    }
+    return null;
+  }
 }
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java
index 3641ed2542495ddb249c07539fc6864e8dea5a3b..c2fd74630c60ff04810ece7ba4ef16914b41c919 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java
@@ -1,6 +1,10 @@
 package org.jastadd.tooling.aspect.psi;
 
 import com.intellij.psi.PsiElement;
+import org.jastadd.tooling.common.psi.NamedElement;
+
+public interface JastAddAspectAttribute extends PsiElement, NamedElement {
+
+  String signature();
 
-public interface JastAddAspectAttribute extends PsiElement {
 }
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java
new file mode 100644
index 0000000000000000000000000000000000000000..337ad11a6adb005f8b8ccc8c16cff5b88735ad92
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java
@@ -0,0 +1,59 @@
+package org.jastadd.tooling.aspect.psi.impl;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.psi.PsiElement;
+import org.jastadd.tooling.aspect.psi.AspectElementFactory;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectName;
+import org.jastadd.tooling.common.psi.NamedElement;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+public class JastAddAspectAspectDeclarationImplExtension extends NamedElementImpl implements NamedElement {
+
+  public JastAddAspectAspectDeclarationImplExtension(@NotNull ASTNode node) {
+    super(node);
+  }
+
+  public String getName() {
+    return getNameIdentifier().getText();
+  }
+
+  public PsiElement setName(@NotNull String newName) {
+    ASTNode identifierNode = getNameIdentifier().getNode().getFirstChildNode();
+    if (identifierNode != null) {
+      JastAddAspectAspectDeclaration name = AspectElementFactory.createAspectDeclaration(getProject(), newName);
+      assert name != null; // we know the name is not null because we always create the same one
+      ASTNode newNameIdentifierNode = name.getAspectName().getNode().getFirstChildNode();
+      getNameIdentifier().getNode().replaceChild(identifierNode, newNameIdentifierNode);
+    }
+    return this;
+  }
+
+  @Override
+  @NotNull
+  public JastAddAspectAspectName getNameIdentifier() {
+    return ((JastAddAspectAspectDeclaration) getNode().getPsi()).getAspectName();
+  }
+
+  @Override
+  public ItemPresentation getPresentation() {
+    return new ItemPresentation() {
+      @Nullable
+      @Override
+      public String getPresentableText() {
+        return "aspect " + getName();
+      }
+
+      @Override
+      public Icon getIcon(boolean unused) {
+        return JastAddIcons.ASPECT;
+      }
+    };
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java
new file mode 100644
index 0000000000000000000000000000000000000000..5851ca2b4f71d03572d162674f296a2911238980
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java
@@ -0,0 +1,70 @@
+package org.jastadd.tooling.aspect.psi.impl;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.openapi.util.NlsSafe;
+import com.intellij.psi.PsiElement;
+import com.intellij.util.IncorrectOperationException;
+import org.jastadd.tooling.aspect.psi.AspectTypes;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectInhAttributeDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.util.stream.Collectors;
+
+public abstract class JastAddAspectAspectInhAttributeDeclarationImplExtension extends NamedElementImpl implements JastAddAspectAttribute {
+  public JastAddAspectAspectInhAttributeDeclarationImplExtension(@NotNull ASTNode node) {
+    super(node);
+  }
+
+  public String getName() {
+    // this finds the *first* ID, which is what we want
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.ATTRIBUTE_NAME);
+    if (nameNode != null) {
+      return nameNode.getText();
+    } else {
+      return null;
+    }
+  }
+
+  @Override
+  public @Nullable PsiElement getNameIdentifier() {
+    return ((JastAddAspectAspectInhAttributeDeclaration) this).getAttributeName();
+  }
+
+  @Override
+  public PsiElement setName(@NlsSafe @NotNull String name) throws IncorrectOperationException {
+    throw new IncorrectOperationException("Renaming collection attributes is not supported.");
+  }
+
+  @Override
+  public @Nullable PsiElement getIdentifyingElement() {
+    return this;
+  }
+
+  @Override
+  public String signature() {
+    JastAddAspectAspectInhAttributeDeclaration decl = (JastAddAspectAspectInhAttributeDeclaration) this;
+    return "inh " + decl.getAstTypeName().getText() + "." + decl.getAttributeName().getText() + "(" + decl.getTypeList().stream().map(PsiElement::getText).collect(Collectors.joining(", ")) + ") : " + decl.getAspectType().getText();
+  }
+
+  @Override
+  public ItemPresentation getPresentation() {
+    return new ItemPresentation() {
+      @Nullable
+      @Override
+      public String getPresentableText() {
+        return signature();
+      }
+
+      @Override
+      public Icon getIcon(boolean unused) {
+        return JastAddIcons.INH_ATTRIBUTE;
+      }
+    };
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java
new file mode 100644
index 0000000000000000000000000000000000000000..ffa93a2b6ff925f59b3708199fc1962484b4eb3e
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java
@@ -0,0 +1,71 @@
+package org.jastadd.tooling.aspect.psi.impl;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.openapi.util.NlsSafe;
+import com.intellij.psi.PsiElement;
+import com.intellij.util.IncorrectOperationException;
+import org.jastadd.tooling.aspect.psi.AspectTypes;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAspectSynAttributeDeclaration;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+import java.util.stream.Collectors;
+
+public abstract class JastAddAspectAspectSynAttributeDeclarationImplExtension extends NamedElementImpl implements JastAddAspectAttribute {
+  public JastAddAspectAspectSynAttributeDeclarationImplExtension(@NotNull ASTNode node) {
+    super(node);
+  }
+
+
+  public String getName() {
+    // this finds the *first* ID, which is what we want
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.ATTRIBUTE_NAME);
+    if (nameNode != null) {
+      return nameNode.getText();
+    } else {
+      return null;
+    }
+  }
+
+  @Override
+  public @Nullable PsiElement getNameIdentifier() {
+    return ((JastAddAspectAspectSynAttributeDeclaration) this).getAttributeName();
+  }
+
+  @Override
+  public PsiElement setName(@NlsSafe @NotNull String name) throws IncorrectOperationException {
+    throw new IncorrectOperationException("Renaming collection attributes is not supported.");
+  }
+
+  @Override
+  public @Nullable PsiElement getIdentifyingElement() {
+    return this;
+  }
+
+  @Override
+  public String signature() {
+    JastAddAspectAspectSynAttributeDeclaration decl = (JastAddAspectAspectSynAttributeDeclaration) this;
+    return "syn " + decl.getAstTypeName().getText() + "." + decl.getAttributeName().getText() + "(" + decl.getTypeList().stream().map(PsiElement::getText).collect(Collectors.joining(", ")) + ") : " + decl.getAspectType().getText();
+  }
+
+  @Override
+  public ItemPresentation getPresentation() {
+    return new ItemPresentation() {
+      @Nullable
+      @Override
+      public String getPresentableText() {
+        return signature();
+      }
+
+      @Override
+      public Icon getIcon(boolean unused) {
+        return JastAddIcons.SYN_ATTRIBUTE;
+      }
+    };
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAstTypeNameImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAstTypeNameImplExtension.java
index c83758eea7659596e84856ed3d74ea7440cb1bde..4f7fa54c69b5b7c2ba01028e4f4065cd1e19312c 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAstTypeNameImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAstTypeNameImplExtension.java
@@ -3,30 +3,34 @@ package org.jastadd.tooling.aspect.psi.impl;
 import com.intellij.lang.ASTNode;
 import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.aspect.psi.AspectElementFactory;
+import org.jastadd.tooling.aspect.psi.AspectTypes;
 import org.jastadd.tooling.aspect.psi.JastAddAspectAstTypeName;
-import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
-import org.jastadd.tooling.grammar.psi.impl.GrammarNamedElementImpl;
+import org.jastadd.tooling.common.psi.NamedElement;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
 import org.jetbrains.annotations.NotNull;
 
-public class JastAddAspectAstTypeNameImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
+public class JastAddAspectAstTypeNameImplExtension extends NamedElementImpl implements NamedElement {
 
   public JastAddAspectAstTypeNameImplExtension(@NotNull ASTNode node) {
     super(node);
   }
 
   public String getName() {
-    // this finds the *first* ID, which is what we want
-    return getNode().getText();
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.AST_TYPE_NAME);
+    if (nameNode != null) {
+      return nameNode.getText();
+    } else {
+      return null;
+    }
   }
 
   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) {
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.AST_TYPE_NAME);
+    if (nameNode != null) {
       JastAddAspectAstTypeName name = AspectElementFactory.createAstTypeName(getProject(), newName);
       assert name != null; // we know the name is not null because we always create the same one
-      ASTNode newKeyNode = name.getNode().getFirstChildNode();
-      getNode().replaceChild(keyNode, newKeyNode);
+      ASTNode newNameNode = name.getNode().getFirstChildNode();
+      getNode().replaceChild(nameNode, newNameNode);
     }
     return this;
   }
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectClassOrInterfaceTypeImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectClassOrInterfaceTypeImplExtension.java
index ca1542e8db7756b3ad81660546a929b38fb3278d..e702693db65ba94f16ab06117a19535f0a97cf50 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectClassOrInterfaceTypeImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectClassOrInterfaceTypeImplExtension.java
@@ -3,12 +3,13 @@ package org.jastadd.tooling.aspect.psi.impl;
 import com.intellij.lang.ASTNode;
 import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.aspect.psi.AspectElementFactory;
+import org.jastadd.tooling.aspect.psi.AspectTypes;
 import org.jastadd.tooling.aspect.psi.JastAddAspectClassOrInterfaceType;
-import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
-import org.jastadd.tooling.grammar.psi.impl.GrammarNamedElementImpl;
+import org.jastadd.tooling.common.psi.NamedElement;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
 import org.jetbrains.annotations.NotNull;
 
-public class JastAddAspectClassOrInterfaceTypeImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
+public class JastAddAspectClassOrInterfaceTypeImplExtension extends NamedElementImpl implements NamedElement {
 
   public JastAddAspectClassOrInterfaceTypeImplExtension(@NotNull ASTNode node) {
     super(node);
@@ -16,22 +17,28 @@ public class JastAddAspectClassOrInterfaceTypeImplExtension extends GrammarNamed
 
   public String getName() {
     // this finds the *first* ID, which is what we want
-    return getNode().getText();
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.JAVA_IDENTIFIER);
+    if (nameNode != null) {
+      return nameNode.getText();
+    } else {
+      return null;
+    }
   }
 
   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) {
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.JAVA_IDENTIFIER);
+    if (nameNode != null) {
       JastAddAspectClassOrInterfaceType name = AspectElementFactory.createClassOrInterfaceType(getProject(), newName);
       assert name != null; // we know the name is not null because we always create the same one
-      ASTNode newKeyNode = name.getNode().getFirstChildNode();
-      getNode().replaceChild(keyNode, newKeyNode);
+      assert !name.getJavaIdentifierList().isEmpty(); // we know there is always one name - the class name
+      ASTNode newKeyNode = name.getJavaIdentifierList().get(0).getNode().getFirstChildNode();
+      getNode().replaceChild(nameNode, newKeyNode);
     }
     return this;
   }
 
   public PsiElement getNameIdentifier() {
+    // the entire thing is the identifier
     return getNode().getPsi();
   }
 
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java
deleted file mode 100644
index 0381a57e809a9634499c5ec46b31445f8c8e5abd..0000000000000000000000000000000000000000
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.jastadd.tooling.aspect.psi.impl;
-
-import com.intellij.extapi.psi.ASTWrapperPsiElement;
-import com.intellij.lang.ASTNode;
-import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
-import org.jetbrains.annotations.NotNull;
-
-public abstract class JastAddAspectCollAttributeImpl extends ASTWrapperPsiElement implements JastAddAspectAttribute {
-  public JastAddAspectCollAttributeImpl(@NotNull ASTNode node) {
-    super(node);
-  }
-}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java
new file mode 100644
index 0000000000000000000000000000000000000000..d38d8276beed065cc6a13c121e596b788dfe7d00
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java
@@ -0,0 +1,69 @@
+package org.jastadd.tooling.aspect.psi.impl;
+
+import com.intellij.lang.ASTNode;
+import com.intellij.navigation.ItemPresentation;
+import com.intellij.openapi.util.NlsSafe;
+import com.intellij.psi.PsiElement;
+import com.intellij.util.IncorrectOperationException;
+import org.jastadd.tooling.aspect.psi.AspectTypes;
+import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
+import org.jastadd.tooling.aspect.psi.JastAddAspectCollectionAttribute;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
+import org.jastadd.tooling.util.JastAddIcons;
+import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
+
+import javax.swing.*;
+
+public abstract class JastAddAspectCollectionAttributeImplExtension extends NamedElementImpl implements JastAddAspectAttribute {
+  public JastAddAspectCollectionAttributeImplExtension(@NotNull ASTNode node) {
+    super(node);
+  }
+
+  public String getName() {
+    // this finds the *first* ID, which is what we want
+    ASTNode nameNode = getNode().findChildByType(AspectTypes.ATTRIBUTE_NAME);
+    if (nameNode != null) {
+      return nameNode.getText();
+    } else {
+      return null;
+    }
+  }
+
+  @Override
+  public @Nullable PsiElement getNameIdentifier() {
+    return ((JastAddAspectCollectionAttribute) this).getAttributeName();
+  }
+
+  @Override
+  public PsiElement setName(@NlsSafe @NotNull String name) throws IncorrectOperationException {
+    throw new IncorrectOperationException("Renaming collection attributes is not supported.");
+  }
+
+  @Override
+  public @Nullable PsiElement getIdentifyingElement() {
+    return this;
+  }
+
+  @Override
+  public String signature() {
+    JastAddAspectCollectionAttribute decl = (JastAddAspectCollectionAttribute) this;
+    return "coll " + decl.getAstTypeNameList().get(0).getText() + "." + decl.getAttributeName().getText() + "() : " + decl.getAspectType().getText();
+  }
+
+  @Override
+  public ItemPresentation getPresentation() {
+    return new ItemPresentation() {
+      @Nullable
+      @Override
+      public String getPresentableText() {
+        return signature();
+      }
+
+      @Override
+      public Icon getIcon(boolean unused) {
+        return JastAddIcons.COL_ATTRIBUTE;
+      }
+    };
+  }
+}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java
deleted file mode 100644
index 6bd54d13cdaebb6413cf846e395df22a82685f8c..0000000000000000000000000000000000000000
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.jastadd.tooling.aspect.psi.impl;
-
-import com.intellij.extapi.psi.ASTWrapperPsiElement;
-import com.intellij.lang.ASTNode;
-import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
-import org.jetbrains.annotations.NotNull;
-
-public abstract class JastAddAspectInhAttributeImpl extends ASTWrapperPsiElement implements JastAddAspectAttribute {
-  public JastAddAspectInhAttributeImpl(@NotNull ASTNode node) {
-    super(node);
-  }
-}
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java
deleted file mode 100644
index 1b9443a44f50f29ddaa1ac17b7df717f12f4c78a..0000000000000000000000000000000000000000
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package org.jastadd.tooling.aspect.psi.impl;
-
-import com.intellij.extapi.psi.ASTWrapperPsiElement;
-import com.intellij.lang.ASTNode;
-import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
-import org.jetbrains.annotations.NotNull;
-
-public abstract class JastAddAspectSynAttributeImpl extends ASTWrapperPsiElement implements JastAddAspectAttribute {
-  public JastAddAspectSynAttributeImpl(@NotNull ASTNode node) {
-    super(node);
-  }
-}
diff --git a/src/main/java/org/jastadd/tooling/common/psi/NamedElement.java b/src/main/java/org/jastadd/tooling/common/psi/NamedElement.java
new file mode 100644
index 0000000000000000000000000000000000000000..0444f8a7778c38f7e69c0a436fb036b133abdf68
--- /dev/null
+++ b/src/main/java/org/jastadd/tooling/common/psi/NamedElement.java
@@ -0,0 +1,7 @@
+package org.jastadd.tooling.common.psi;
+
+import com.intellij.psi.PsiNameIdentifierOwner;
+
+public interface NamedElement extends PsiNameIdentifierOwner {
+
+}
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java b/src/main/java/org/jastadd/tooling/common/psi/impl/NamedElementImpl.java
similarity index 73%
rename from src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java
rename to src/main/java/org/jastadd/tooling/common/psi/impl/NamedElementImpl.java
index 377ff8179cbbdd378ee06ab5f62c7c45664d50cb..56b1da56010246218172625be7dc6a74c6ad6bea 100644
--- a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarNamedElementImpl.java
+++ b/src/main/java/org/jastadd/tooling/common/psi/impl/NamedElementImpl.java
@@ -1,20 +1,20 @@
-package org.jastadd.tooling.grammar.psi.impl;
+package org.jastadd.tooling.common.psi.impl;
 
 import com.intellij.extapi.psi.ASTWrapperPsiElement;
 import com.intellij.lang.ASTNode;
 import com.intellij.navigation.ItemPresentation;
 import com.intellij.psi.PsiReference;
 import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry;
-import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
+import org.jastadd.tooling.common.psi.NamedElement;
 import org.jastadd.tooling.util.JastAddIcons;
 import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 
-public abstract class GrammarNamedElementImpl extends ASTWrapperPsiElement implements GrammarNamedElement {
+public abstract class NamedElementImpl extends ASTWrapperPsiElement implements NamedElement {
 
-  protected GrammarNamedElementImpl(@NotNull ASTNode node) {
+  protected NamedElementImpl(@NotNull ASTNode node) {
     super(node);
   }
 
@@ -38,11 +38,6 @@ public abstract class GrammarNamedElementImpl extends ASTWrapperPsiElement imple
         return getName();
       }
 
-      @Override
-      public String getLocationString() {
-        return getContainingFile().getName();
-      }
-
       @Override
       public Icon getIcon(boolean unused) {
         return JastAddIcons.FILE;
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java b/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java
deleted file mode 100644
index 69b6fe7cbf9737f3d18e9ba6e2830c7d9cd78910..0000000000000000000000000000000000000000
--- a/src/main/java/org/jastadd/tooling/grammar/psi/GrammarNamedElement.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package org.jastadd.tooling.grammar.psi;
-
-import com.intellij.psi.PsiNameIdentifierOwner;
-
-public interface GrammarNamedElement extends PsiNameIdentifierOwner {
-
-}
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 8f4fc2504ff8fba1970c99bf9c7dd81ba568abda..439cdcd49d0b75e27ba7fa55d0f81b545a5f3fc6 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
@@ -2,12 +2,13 @@ package org.jastadd.tooling.grammar.psi.impl;
 
 import com.intellij.lang.ASTNode;
 import com.intellij.psi.PsiElement;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
 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.common.psi.NamedElement;
 import org.jetbrains.annotations.NotNull;
 
-public class GrammarComponentNameImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
+public class GrammarComponentNameImplExtension extends NamedElementImpl implements NamedElement {
 
   public GrammarComponentNameImplExtension(@NotNull ASTNode node) {
     super(node);
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java
index 39bd24dbfd95d0f4f9989ec860c9de58a9e2b38a..12b2c992a793920ca91bdbc61419bced41dcb2a7 100644
--- a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeDeclImplExtension.java
@@ -2,13 +2,14 @@ package org.jastadd.tooling.grammar.psi.impl;
 
 import com.intellij.lang.ASTNode;
 import com.intellij.psi.PsiElement;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
 import org.jastadd.tooling.grammar.parser.GrammarTypes;
 import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
-import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
+import org.jastadd.tooling.common.psi.NamedElement;
 import org.jastadd.tooling.grammar.psi.GrammarTypeName;
 import org.jetbrains.annotations.NotNull;
 
-public class GrammarTypeDeclImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
+public class GrammarTypeDeclImplExtension extends NamedElementImpl implements NamedElement {
 
   public GrammarTypeDeclImplExtension(@NotNull ASTNode node) {
     super(node);
@@ -16,28 +17,28 @@ public class GrammarTypeDeclImplExtension extends GrammarNamedElementImpl implem
 
   public String getName() {
     // this finds the *first* ID, which is what we want
-    ASTNode keyNode = getNode().findChildByType(GrammarTypes.TYPE_NAME);
-    if (keyNode != null) {
-      return keyNode.getText();
+    ASTNode nameNode = getNode().findChildByType(GrammarTypes.TYPE_NAME);
+    if (nameNode != null) {
+      return nameNode.getText();
     } else {
       return null;
     }
   }
 
   public PsiElement setName(@NotNull String newName) {
-    ASTNode keyNode = getNode().findChildByType(GrammarTypes.TYPE_NAME);
-    if (keyNode != null) {
+    ASTNode nameNode = getNode().findChildByType(GrammarTypes.TYPE_NAME);
+    if (nameNode != null) {
       GrammarTypeName name = GrammarElementFactory.createTypeName(getProject(), newName);
       ASTNode newKeyNode = name.getNode();
-      getNode().replaceChild(keyNode, newKeyNode);
+      getNode().replaceChild(nameNode, newKeyNode);
     }
     return this;
   }
 
   public PsiElement getNameIdentifier() {
-    ASTNode keyNode = getNode().findChildByType(GrammarTypes.TYPE_NAME);
-    if (keyNode != null) {
-      return keyNode.getPsi();
+    ASTNode nameNode = getNode().findChildByType(GrammarTypes.TYPE_NAME);
+    if (nameNode != null) {
+      return nameNode.getPsi();
     } else {
       return null;
     }
diff --git a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeNameImplExtension.java b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeNameImplExtension.java
index 753e63cc14ca327f4e521221916b9e293e854641..c33cd5ff330224bb63e1e75779dc257cb6134eae 100644
--- a/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeNameImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/grammar/psi/impl/GrammarTypeNameImplExtension.java
@@ -2,12 +2,13 @@ package org.jastadd.tooling.grammar.psi.impl;
 
 import com.intellij.lang.ASTNode;
 import com.intellij.psi.PsiElement;
+import org.jastadd.tooling.common.psi.impl.NamedElementImpl;
 import org.jastadd.tooling.grammar.psi.GrammarElementFactory;
-import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
+import org.jastadd.tooling.common.psi.NamedElement;
 import org.jastadd.tooling.grammar.psi.GrammarTypeName;
 import org.jetbrains.annotations.NotNull;
 
-public class GrammarTypeNameImplExtension extends GrammarNamedElementImpl implements GrammarNamedElement {
+public class GrammarTypeNameImplExtension extends NamedElementImpl implements NamedElement {
 
   public GrammarTypeNameImplExtension(@NotNull ASTNode node) {
     super(node);
diff --git a/src/main/java/org/jastadd/tooling/util/JastAddIcons.java b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java
index dbfe933afb197b70252431997a2bd28e30c0a3e7..86cf9542d6e2ddd0b0022003703eac9a30a90ff2 100644
--- a/src/main/java/org/jastadd/tooling/util/JastAddIcons.java
+++ b/src/main/java/org/jastadd/tooling/util/JastAddIcons.java
@@ -1,5 +1,6 @@
 package org.jastadd.tooling.util;
 
+import com.intellij.icons.AllIcons;
 import com.intellij.openapi.util.IconLoader;
 
 import javax.swing.*;
@@ -7,6 +8,13 @@ import javax.swing.*;
 public class JastAddIcons {
 
   public static final Icon FILE = IconLoader.getIcon("/META-INF/pluginIcon.svg", JastAddIcons.class);
+  public static final Icon ASPECT = AllIcons.Actions.GroupByModuleGroup;
+  public static final Icon ATTRIBUTE = IconLoader.getIcon("/META-INF/attributeIcon.svg", JastAddIcons.class);
+  public static final Icon COL_ATTRIBUTE = ATTRIBUTE;
+  public static final Icon INH_ATTRIBUTE = ATTRIBUTE;
+  public static final Icon SYN_ATTRIBUTE = ATTRIBUTE;
+  public static final Icon INTERTYPE_DECL = IconLoader.getIcon("/META-INF/intertypeIcon.svg", JastAddIcons.class);
+  public static final Icon REWRITE = IconLoader.getIcon("/META-INF/rewriteIcon.svg", JastAddIcons.class);
 
   private JastAddIcons() {
     throw new IllegalStateException("Utility class");
diff --git a/src/main/resources/META-INF/aspectIcon.svg b/src/main/resources/META-INF/aspectIcon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..7f64ea2b6ff40b4b0e547ca138d1facabc84ef9c
--- /dev/null
+++ b/src/main/resources/META-INF/aspectIcon.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="aspectIcon.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="1.1571627"
+     inkscape:cy="6.6314325"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9830a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:13.3333px;line-height:1.25;font-family:sans-serif"
+     x="2.9176779"
+     y="11.700195"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="2.9176779"
+       y="11.700195"
+       style="font-weight:normal;font-size:13.3333px;fill:#333333">{</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/aspectIcon_dark.svg b/src/main/resources/META-INF/aspectIcon_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..59c6aaecbe74742ddfdbc794e986fed978cc72ef
--- /dev/null
+++ b/src/main/resources/META-INF/aspectIcon_dark.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="aspectIcon_dark.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="63.551222"
+     inkscape:cx="6.781931"
+     inkscape:cy="9.7716453"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781"
+     showguides="true"
+     inkscape:guide-bbox="true">
+    <sodipodi:guide
+       position="9.1343785,8.2655725"
+       orientation="0,-1"
+       id="guide38338" />
+  </sodipodi:namedview>
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b66e17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:12px;line-height:1.25;font-family:sans-serif"
+     x="3.1542871"
+     y="11.505499"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="3.1542871"
+       y="11.505499"
+       style="font-weight:bold;font-size:12px;fill:#333333">{</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/attributeIcon.svg b/src/main/resources/META-INF/attributeIcon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..a1a7a47b0a031e0daf77bf866507575c122e32d3
--- /dev/null
+++ b/src/main/resources/META-INF/attributeIcon.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="attributeIcon.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="7.9888734"
+     inkscape:cy="6.3421419"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9830a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.6667px;line-height:1.25;font-family:sans-serif"
+     x="3.4162667"
+     y="11.919761"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="3.4162667"
+       y="11.919761"
+       style="font-size:14.6667px;fill:#333333">a</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/attributeIcon_dark.svg b/src/main/resources/META-INF/attributeIcon_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..8f856336fc924cc287eb4463f4e33e0a84fc2225
--- /dev/null
+++ b/src/main/resources/META-INF/attributeIcon_dark.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="attributeIcon_dark.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="7.9888734"
+     inkscape:cy="6.3421419"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b66e17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.6667px;line-height:1.25;font-family:sans-serif"
+     x="3.4162667"
+     y="11.919761"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="3.4162667"
+       y="11.919761"
+       style="font-size:14.6667px;fill:#333333">a</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/intertypeIcon.svg b/src/main/resources/META-INF/intertypeIcon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..99d1fe559fc48499fe8685d019684c05e6d59b8d
--- /dev/null
+++ b/src/main/resources/META-INF/intertypeIcon.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="intertypeIcon.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="0.95688456"
+     inkscape:cy="6.3421419"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9830a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.6667px;line-height:1.25;font-family:sans-serif"
+     x="5.9174619"
+     y="13.450501"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="5.9174619"
+       y="13.450501"
+       style="font-size:14.6667px;fill:#333333">i</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/intertypeIcon_dark.svg b/src/main/resources/META-INF/intertypeIcon_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..d041ab4a3f545454b8a42f68f0cd3ddc27cedf53
--- /dev/null
+++ b/src/main/resources/META-INF/intertypeIcon_dark.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="intertypeIcon_dark.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="7.9888734"
+     inkscape:cy="6.3421419"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b66e17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.6667px;line-height:1.25;font-family:sans-serif"
+     x="5.9174619"
+     y="13.450501"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="5.9174619"
+       y="13.450501"
+       style="font-size:14.6667px;fill:#333333">i</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml
index a41624890b5ba72d39f91aa10a63e9fb19276af3..d84dd364f37c819a7929e7af627878c00d78fbf6 100644
--- a/src/main/resources/META-INF/plugin.xml
+++ b/src/main/resources/META-INF/plugin.xml
@@ -91,7 +91,8 @@
         <lang.formatter language="JastAddAspect" implementationClass="org.jastadd.tooling.aspect.AspectFormattingModelBuilder"/>
 
         <lang.foldingBuilder language="JastAddAspect" implementationClass="org.jastadd.tooling.aspect.AspectFoldingBuilder"/>
-        FoldingBuilder"/>
+
+        <lang.psiStructureViewFactory language="JastAddAspect" implementationClass="org.jastadd.tooling.aspect.AspectStructureViewFactory"/>
     </extensions>
 
     <actions>
diff --git a/src/main/resources/META-INF/rewriteIcon.svg b/src/main/resources/META-INF/rewriteIcon.svg
new file mode 100644
index 0000000000000000000000000000000000000000..bfa665d2a84ed3ba4f4d38847f5e3a7fbc7f052c
--- /dev/null
+++ b/src/main/resources/META-INF/rewriteIcon.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="rewriteIcon.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="0.95688456"
+     inkscape:cy="6.3421419"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#e9830a;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.6667px;line-height:1.25;font-family:sans-serif"
+     x="4.8556738"
+     y="12.25705"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="4.8556738"
+       y="12.25705"
+       style="font-size:14.6667px;fill:#333333">r</tspan></text>
+</svg>
diff --git a/src/main/resources/META-INF/rewriteIcon_dark.svg b/src/main/resources/META-INF/rewriteIcon_dark.svg
new file mode 100644
index 0000000000000000000000000000000000000000..aea4f01636c6fee7ad9a3774ae32472454d2974f
--- /dev/null
+++ b/src/main/resources/META-INF/rewriteIcon_dark.svg
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   width="16"
+   height="16"
+   id="svg4781"
+   version="1.1"
+   sodipodi:docname="rewriteIcon_dark.svg"
+   inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:dc="http://purl.org/dc/elements/1.1/">
+  <sodipodi:namedview
+     id="namedview9"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="44.9375"
+     inkscape:cx="7.9888734"
+     inkscape:cy="6.3421419"
+     inkscape:window-width="2560"
+     inkscape:window-height="1406"
+     inkscape:window-x="0"
+     inkscape:window-y="18"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg4781" />
+  <defs
+     id="defs4783" />
+  <metadata
+     id="metadata4786">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <path
+     id="path4837"
+     style="color:#000000;display:inline;overflow:visible;visibility:visible;fill:#b66e17;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.481132;marker:none;enable-background:accumulate"
+     d="m 6.4411958,16.885559 c 0.5447722,0.109891 1.0331311,0.141756 1.3374082,-0.01044 0.3042887,-0.151859 0.3667902,-0.189484 0.491665,-0.337386 0.1248749,-0.147913 0.1782498,-0.275616 0.2292498,-0.47546 0.051105,-0.19982 0.0227,-0.943587 0.016181,-1.025785 -0.00582,-0.08219 0.054364,-0.235268 0.078577,-0.293602 0.045284,-0.109197 0.1313824,-0.22252 0.1849784,-0.25195 0.093595,-0.04144 0.179018,-0.0752 0.4369863,0.02048 0.3234851,0.09686 1.5911975,0.548998 2.2623465,0.830226 0.526052,0.22904 0.945322,0.414577 1.095073,0.462365 0.238167,0.0816 0.301402,0.128181 0.419327,0.09499 0.117906,-0.03329 0.142919,-0.148332 0.194117,-0.311901 0.05122,-0.16357 0.730751,-1.980212 0.962667,-2.554844 0.232044,-0.574572 0.26181,-0.670939 0.334264,-0.89169 0.07195,-0.22095 -0.0058,-0.423191 -0.107561,-0.528416 -0.101514,-0.105237 -0.267153,-0.119794 -0.315999,-0.119002 -0.04877,6.41e-4 -0.372891,-0.02269 -0.537217,-0.04737 -0.223686,-0.03375 -0.547752,-0.139287 -0.655527,-0.18101 -0.275058,-0.106635 -0.559974,-0.307163 -0.700787,-0.617983 -0.103021,-0.227433 -0.147644,-0.406253 -0.138157,-0.7849528 0.0082,-0.320563 0.06577,-0.6496707 0.111753,-0.8327631 C 12.186764,8.8460525 12.258533,8.637792 12.356707,8.4456194 12.54242,8.080296 12.74189,7.7669621 12.973608,7.511124 13.100031,7.3426179 13.44716,7.1847753 13.684709,7.1689781 c 0.365218,-0.033294 0.585959,0.019673 0.922203,0.1538964 0.175071,0.07008 0.464204,0.1963634 0.646853,0.2525903 0.182627,0.056226 0.326593,0.042723 0.413297,-0.0035 0.09592,-0.050524 0.173301,-0.1164123 0.204407,-0.3461854 0.03097,-0.2297968 0.04971,-0.7044425 0.07997,-1.0833743 0.03015,-0.3789203 0.02223,-0.6733955 0.04481,-1.0415361 0.02282,-0.3681173 0.0093,-0.662313 0.01444,-0.9335175 0.0046,-0.2712044 0.01181,-0.5904754 0.0093,-0.7473519 -0.0024,-0.177784 -0.01874,-0.3547997 -0.102321,-0.4510722 -0.08347,-0.096272 -0.245315,-0.081838 -0.35934,-0.084748 -0.130044,-0.0035 -0.433424,0.00232 -0.704734,-0.00582 -0.271343,-0.00698 -0.809435,0.01397 -1.204454,-0.00465 -0.395009,-0.018743 -0.836954,-0.00582 -1.169822,-0.03795 C 12.14644,2.8043284 11.85747,2.7834904 11.654553,2.7626534 11.505081,2.7471704 11.38321,2.6708044 11.316237,2.573787 11.236437,2.4579591 11.254837,2.3256805 11.288937,2.1382225 11.323157,1.950823 11.520329,1.5099716 11.585962,1.3354237 11.663252,1.1288628 11.772849,0.7310838 11.744049,0.54373065 11.715254,0.35634738 11.616991,0.19770154 11.47158,0.03201265 11.33531,-0.123269 11.147735,-0.24834184 10.995747,-0.36100515 10.795287,-0.50958144 10.618981,-0.6172972 10.427635,-0.70976316 10.241446,-0.79963299 9.9811843,-0.8837521 9.8259609,-0.92928075 9.6739738,-0.97375004 9.4242938,-1.023225 9.2406542,-1.042433 c -0.2107285,-0.022002 -0.492771,6.403e-4 -0.6949665,0.031082 -0.130486,0.0201393 -0.4029943,0.1423134 -0.5222581,0.23211342 -0.1192522,0.08987 -0.2453844,0.2265839 -0.3167215,0.36367036 -0.07136,0.13707489 -0.1828013,0.38176079 -0.2306815,0.56386366 C 7.4281814,0.33042248 7.373235,0.67471033 7.3690441,0.82353109 7.3643877,0.97239851 7.3483228,1.1769456 7.243494,1.2872108 7.1781871,1.3557772 7.0516359,1.398384 6.9653632,1.407988 6.8701383,1.4084303 6.7679637,1.3898278 6.5267003,1.3039158 6.1376174,1.1743729 5.6926915,0.99998804 5.1824936,0.80069106 4.6722959,0.60137095 4.3230955,0.462189 3.8889029,0.30507974 3.6707706,0.22638533 3.3482635,0.10279096 3.2303383,0.08061459 3.1053704,0.056983 3.0085275,0.09109163 2.9432436,0.13334902 2.9061084,0.1687383 2.8475532,0.2305529 2.8048534,0.29172723 2.7641093,0.36064298 2.7014797,0.52358454 2.6304569,0.75298557 2.5403542,1.0367392 2.1057658,2.372832 1.8911375,2.9149847 1.6765207,3.4571143 1.5722624,3.8636358 1.5043827,4.1084381 1.436515,4.3532986 1.6941922,4.4257067 1.8043292,4.4844132 c 0.1314987,0.055644 0.2980025,0.1116395 0.5826409,0.1214055 0.2846616,0.00932 0.6104399,0.043073 0.8165703,0.1289028 0.2061302,0.085795 0.3818538,0.1608344 0.5123979,0.3111105 0.083584,0.1052359 0.1947569,0.2920188 0.2314965,0.5131314 0.026658,0.2052921 0.022934,0.9584063 -0.095808,1.3582109 C 3.7646683,7.2778298 3.535244,7.6994615 3.3771103,7.918269 3.1542633,8.237377 2.9069697,8.5054732 2.6634481,8.6547947 2.4479116,8.794873 2.0926927,8.8603661 1.6940873,8.6969358 1.429041,8.6067166 1.0476877,8.444229 0.77410849,8.3665357 0.5654636,8.3014616 0.28684376,8.350471 0.21196768,8.5036689 0.14677706,8.6296496 0.12978103,8.7543849 0.11418176,8.9353935 0.08379838,9.3750109 0.08042286,11.193875 0.03071459,12.267505 c -0.04109344,0.50602 0.00698,0.673197 0.04109344,0.751625 0.04190839,0.0986 0.43035102,0.08825 0.54059301,0.08615 0.21908685,1.28e-4 0.3680706,-0.0058 0.61573666,-0.007 0.6244676,0.0046 2.977708,-0.03214 3.228296,0.03457 0.08405,0.01676 0.1714862,0.04657 0.2308213,0.08195 0.060534,0.03877 0.09895,0.08591 0.1209755,0.158286 0.032363,0.103494 -0.046098,0.321587 -0.09639,0.460641 -0.050174,0.139076 -0.1643153,0.483121 -0.3364766,0.853216 -0.1721846,0.37012 -0.1224301,0.726526 -0.074037,0.835848 0.048427,0.109306 0.1762707,0.379829 0.4415382,0.617542 0.2652791,0.237701 0.5230147,0.356639 0.856418,0.502479 0.2867221,0.125422 0.7918212,0.236444 0.8408655,0.242335 z" />
+  <text
+     xml:space="preserve"
+     style="font-size:14.6667px;line-height:1.25;font-family:sans-serif"
+     x="4.8556738"
+     y="12.25705"
+     id="text3686"><tspan
+       sodipodi:role="line"
+       id="tspan3684"
+       x="4.8556738"
+       y="12.25705"
+       style="font-size:14.6667px;fill:#333333">r</tspan></text>
+</svg>