diff --git a/src/jastadd/ast/Attributes.jrag b/src/jastadd/ast/Attributes.jrag
index 7574499424362788cc5e74cd2ffc6331df5243ef..706d4d044fdb69493b7bd5d8f8e056add9ba71c5 100644
--- a/src/jastadd/ast/Attributes.jrag
+++ b/src/jastadd/ast/Attributes.jrag
@@ -28,7 +28,9 @@
 import org.jastadd.ast.AST.*;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.Map;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -402,29 +404,26 @@ public aspect Attributes {
     }
   }
 
-  public class InterTypeObject {
-    public String className;
-    public ClassBodyObject classBodyObject;
+  public Map<String, Collection<ClassBodyObject>> Grammar.interTypeDecls
+      = new HashMap<String, Collection<ClassBodyObject>>();
 
-    public InterTypeObject(String name, ClassBodyObject obj) {
-      this.className = name;
-      this.classBodyObject = obj;
+  protected void Grammar.addInterTypeDecl(String className, ClassBodyObject decl) {
+    if (!interTypeDecls.containsKey(className)) {
+      interTypeDecls.put(className, new ArrayList<ClassBodyObject>());
     }
+    interTypeDecls.get(className).add(decl);
   }
 
-  public Collection<InterTypeObject> Grammar.interTypeObjects = new LinkedList<InterTypeObject>();
-
   public void Grammar.addClassBodyDecl(org.jastadd.jrag.AST.SimpleNode n,
       String className, String fileName, String aspectName) {
-    interTypeObjects.add(new InterTypeObject(className, new ClassBodyObject(n,
-        fileName, n.firstToken.beginLine, aspectName)));
+    addInterTypeDecl(className, new ClassBodyObject(n, fileName, n.firstToken.beginLine, aspectName));
   }
 
   public void Grammar.addClassBodyDecl(org.jastadd.jrag.AST.SimpleNode n,
       String className, String fileName, String modifiers, String aspectName) {
     ClassBodyObject obj = new ClassBodyObject(n, fileName, n.firstToken.beginLine, aspectName);
     obj.modifiers = modifiers;
-    interTypeObjects.add(new InterTypeObject(className, obj));
+    addInterTypeDecl(className, obj);
   }
 
   public Collection<ClassBodyObject> TypeDecl.classBodyDecls = new LinkedHashSet<ClassBodyObject>();
diff --git a/src/java/org/jastadd/JastAdd.java b/src/java/org/jastadd/JastAdd.java
index bb0cc2e8274c18dbabdb39e3f56b267267946f19..ce550654a38457ab2608e8262edb3e7143b269b4 100644
--- a/src/java/org/jastadd/JastAdd.java
+++ b/src/java/org/jastadd/JastAdd.java
@@ -40,6 +40,7 @@ import java.io.StringReader;
 import java.io.StringWriter;
 import java.util.Collection;
 import java.util.LinkedList;
+import java.util.Map;
 import java.util.MissingResourceException;
 import java.util.ResourceBundle;
 import java.util.Scanner;
@@ -51,12 +52,12 @@ import org.jastadd.ast.AST.Component;
 import org.jastadd.ast.AST.Grammar;
 import org.jastadd.ast.AST.InhDecl;
 import org.jastadd.ast.AST.InhEq;
-import org.jastadd.ast.AST.InterTypeObject;
 import org.jastadd.ast.AST.List;
 import org.jastadd.ast.AST.SynDecl;
 import org.jastadd.ast.AST.SynEq;
 import org.jastadd.ast.AST.TokenComponent;
 import org.jastadd.ast.AST.TypeDecl;
+import org.jastadd.jrag.ClassBodyObject;
 import org.jastadd.jrag.AST.ASTCompilationUnit;
 import org.jastadd.jrag.AST.JragParser;
 import org.jastadd.jrag.AST.TokenMgrError;
@@ -297,20 +298,23 @@ public class JastAdd {
 
   protected static Collection<Problem> weaveInterTypeObjects(Grammar grammar) {
     Collection<Problem> problems = new LinkedList<Problem>();
-    for (InterTypeObject object : grammar.interTypeObjects) {
-      TypeDecl clazz = grammar.lookup(object.className);
-      if (clazz != null) {
-        clazz.classBodyDecls.add(object.classBodyObject);
-      } else {
-        problems.add(Problem.builder()
-            .message("can not add member to unknown class %s", object.className)
-            .sourceFile(object.classBodyObject.fileName)
-            .sourceLine(object.classBodyObject.line)
-            .buildError());
+    for (Map.Entry<String, Collection<ClassBodyObject>> entry : grammar.interTypeDecls.entrySet()) {
+      String className = entry.getKey();
+      TypeDecl clazz = grammar.lookup(className);
+      for (ClassBodyObject decl : entry.getValue()) {
+        if (clazz != null) {
+          clazz.classBodyDecls.add(decl);
+        } else {
+          problems.add(Problem.builder()
+              .message("can not add member to unknown class %s", className)
+              .sourceFile(decl.fileName)
+              .sourceLine(decl.line)
+              .buildError());
+        }
       }
     }
     // TODO(jesper): Remove the below line.
-    grammar.interTypeObjects.clear(); // Reset to avoid double weaving.
+    grammar.interTypeDecls.clear(); // Reset to avoid double weaving.
     return problems;
   }