diff --git a/src/main/grammar/Aspect.bnf b/src/main/grammar/Aspect.bnf
index fd079b1fad7fb79b1a9a75893d7e63f57c5d8980..65e0e185e86f5ea428ef7233c62d45a150761909 100644
--- a/src/main/grammar/Aspect.bnf
+++ b/src/main/grammar/Aspect.bnf
@@ -86,13 +86,13 @@ aspect_interface_member_declaration ::= ( aspect_nested_class_declaration
 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 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
@@ -118,13 +118,13 @@ aspect_field_declaration ::= modifiers aspect_type ast_type_name DOT variable_de
 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 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?
@@ -141,7 +141,7 @@ aspect_refine_inh_equation ::= REFINE aspect_name EQUATION ast_type_name DOT att
 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
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 e3e4c7b1d0e78a52d89086ecdd2222bb2aa8c4a4..961119593abda78feb39dd0864eba7e668433d81 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/JastAddAspectAttribute.java
@@ -4,4 +4,7 @@ import com.intellij.psi.PsiElement;
 import org.jastadd.tooling.grammar.psi.GrammarNamedElement;
 
 public interface JastAddAspectAttribute extends PsiElement, GrammarNamedElement {
+
+  String signature();
+
 }
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
index a077cbc5ab79f8cb7f9aea825be891efba273532..bac6dcc17deace69d231bde12882c8f1c2385d35 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectDeclarationImplExtension.java
@@ -52,15 +52,9 @@ public class JastAddAspectAspectDeclarationImplExtension extends GrammarNamedEle
         return "aspect " + getName();
       }
 
-      @Override
-      public String getLocationString() {
-        Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile());
-        return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : "";
-      }
-
       @Override
       public Icon getIcon(boolean unused) {
-        return JastAddIcons.FILE;
+        return JastAddIcons.ASPECT;
       }
     };
   }
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java
similarity index 70%
rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java
rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java
index 5b2692b74af86411604202bd14d08a2574653c9b..91838ecc4b6e0d8fab4583012637b6b13d6b2f6d 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectInhAttributeImpl.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectInhAttributeDeclarationImplExtension.java
@@ -9,6 +9,7 @@ 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.JastAddAspectAspectSynAttributeDeclaration;
 import org.jastadd.tooling.aspect.psi.JastAddAspectAttribute;
 import org.jastadd.tooling.grammar.psi.impl.GrammarNamedElementImpl;
 import org.jastadd.tooling.util.JastAddIcons;
@@ -16,9 +17,10 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
+import java.util.stream.Collectors;
 
-public abstract class JastAddAspectInhAttributeImpl extends GrammarNamedElementImpl implements JastAddAspectAttribute {
-  public JastAddAspectInhAttributeImpl(@NotNull ASTNode node) {
+public abstract class JastAddAspectAspectInhAttributeDeclarationImplExtension extends GrammarNamedElementImpl implements JastAddAspectAttribute {
+  public JastAddAspectAspectInhAttributeDeclarationImplExtension(@NotNull ASTNode node) {
     super(node);
   }
 
@@ -47,19 +49,19 @@ public abstract class JastAddAspectInhAttributeImpl extends GrammarNamedElementI
     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 "inh " + getName();
-      }
-
-      @Override
-      public String getLocationString() {
-        Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile());
-        return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : "";
+        return signature();
       }
 
       @Override
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java
similarity index 72%
rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java
rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java
index 358e467052a897db4dbfedad710656846a190dcd..ecb2e41b38bb4ae0d6bb908b81aff09a143747ea 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectSynAttributeImpl.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectAspectSynAttributeDeclarationImplExtension.java
@@ -16,9 +16,10 @@ import org.jetbrains.annotations.NotNull;
 import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
+import java.util.stream.Collectors;
 
-public abstract class JastAddAspectSynAttributeImpl extends GrammarNamedElementImpl implements JastAddAspectAttribute {
-  public JastAddAspectSynAttributeImpl(@NotNull ASTNode node) {
+public abstract class JastAddAspectAspectSynAttributeDeclarationImplExtension extends GrammarNamedElementImpl implements JastAddAspectAttribute {
+  public JastAddAspectAspectSynAttributeDeclarationImplExtension(@NotNull ASTNode node) {
     super(node);
   }
 
@@ -48,19 +49,19 @@ public abstract class JastAddAspectSynAttributeImpl extends GrammarNamedElementI
     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 "syn " + getName();
-      }
-
-      @Override
-      public String getLocationString() {
-        Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile());
-        return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : "";
+        return signature();
       }
 
       @Override
diff --git a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java
similarity index 72%
rename from src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java
rename to src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java
index 931466e895e289596cfd9c53ae2c486e530511c6..7fde5d31a6de5cf298746728fe2f956072f8f007 100644
--- a/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollAttributeImpl.java
+++ b/src/main/java/org/jastadd/tooling/aspect/psi/impl/JastAddAspectCollectionAttributeImplExtension.java
@@ -2,8 +2,6 @@ package org.jastadd.tooling.aspect.psi.impl;
 
 import com.intellij.lang.ASTNode;
 import com.intellij.navigation.ItemPresentation;
-import com.intellij.openapi.editor.Document;
-import com.intellij.openapi.fileEditor.FileDocumentManager;
 import com.intellij.openapi.util.NlsSafe;
 import com.intellij.psi.PsiElement;
 import com.intellij.util.IncorrectOperationException;
@@ -17,8 +15,8 @@ import org.jetbrains.annotations.Nullable;
 
 import javax.swing.*;
 
-public abstract class JastAddAspectCollAttributeImpl extends GrammarNamedElementImpl implements JastAddAspectAttribute {
-  public JastAddAspectCollAttributeImpl(@NotNull ASTNode node) {
+public abstract class JastAddAspectCollectionAttributeImplExtension extends GrammarNamedElementImpl implements JastAddAspectAttribute {
+  public JastAddAspectCollectionAttributeImplExtension(@NotNull ASTNode node) {
     super(node);
   }
 
@@ -47,19 +45,19 @@ public abstract class JastAddAspectCollAttributeImpl extends GrammarNamedElement
     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 "coll " + getName();
-      }
-
-      @Override
-      public String getLocationString() {
-        Document document = FileDocumentManager.getInstance().getDocument(getNode().getPsi().getContainingFile().getVirtualFile());
-        return document != null ? "l." + document.getLineNumber(getTextRange().getStartOffset() + 1) : "";
+        return signature();
       }
 
       @Override