diff --git a/ragconnect.base/src/main/jastadd/Intermediate.jadd b/ragconnect.base/src/main/jastadd/Intermediate.jadd
index 1fdb8c82051890d91d11e1a76a880bfc257be945..bcd4cc4da4242ccd317f3d23bb66bb70a62f3599 100644
--- a/ragconnect.base/src/main/jastadd/Intermediate.jadd
+++ b/ragconnect.base/src/main/jastadd/Intermediate.jadd
@@ -3,72 +3,6 @@ Design considerations
 - InnerMappingDefinition needed for iteration attribute (first, last) - not possible with list-relation
 - no complete intermediate structure, but instead single nodes where applicable/needed
 */
-aspect NewStuff {
-  // unsorted
-  inh boolean EndpointDefinition.isImplied();
-  eq ConnectSpecification.getEndpointDefinition().isImplied() = false;
-  eq EndpointTarget.impliedEndpointDefinitions().isImplied() = true;
-
-  syn String TypeComponent.disconnectMethodName() {
-    List<TypeEndpointTarget> typeEndpointTargets = getTypeEndpointTargets();
-    if (typeEndpointTargets.isEmpty()) {
-      return "MISSING_ENDPOINT";
-    } else {
-      return typeEndpointTargets.get(0).containingEndpointDefinition().disconnectMethodName();
-    }
-  }
-  syn String RagConnect.observerInstanceFieldName() = internalRagConnectPrefix() + "ObserverInstance";
-  syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer";
-  syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver";
-  syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals";
-  syn String TypeComponent.touchedTerminalsMethodName() = ragconnect().touchedTerminalsMethodName();
-  syn java.util.List<Component> TypeDecl.tokenComponents() {
-    return filteredComponents(Component::isTokenComponent);
-  }
-  syn java.util.List<Component> TypeDecl.normalComponents() {
-    return filteredComponents(comp -> comp.isTypeComponent() && !comp.isListComponent());
-  }
-  syn java.util.List<Component> TypeDecl.listComponents() {
-    return filteredComponents(Component::isListComponent);
-  }
-  private java.util.List<Component> TypeDecl.filteredComponents(java.util.function.Predicate<Component> filter) {
-    java.util.List<Component> result = new java.util.ArrayList<>();
-    for (Component comp : getComponentList()) {
-      if (filter.test(comp)) {
-        result.add(comp);
-      }
-    }
-    return result;
-  }
-  syn List<TypeDecl> RagConnect.allTypeDecls() {
-    return getProgram().typeDecls().stream()
-            .sorted(java.util.Comparator.comparing(TypeDecl::getName))
-            .collect(java.util.stream.Collectors.toList());
-  }
-  // send.mustache
-  syn boolean EndpointDefinition.needForwardingNTA() = getEndpointTarget().needForwardingNTA();
-  syn String EndpointDefinition.forwardingNTA_Name() = getEndpointTarget().forwardingNTA_Name();
-  syn String EndpointDefinition.forwardingNTA_Type() = getEndpointTarget().forwardingNTA_Type();
-
-  syn boolean EndpointTarget.needForwardingNTA() = false;
-  eq TypeEndpointTarget.needForwardingNTA() = containingEndpointDefinition().getSend() && !getType().getNTA();
-
-  syn String EndpointTarget.forwardingNTA_Name() = null;
-  eq TypeEndpointTarget.forwardingNTA_Name() = ragconnect().internalRagConnectPrefix() + getType().getName();
-
-  syn String EndpointTarget.forwardingNTA_Type() = null;
-  eq TypeEndpointTarget.forwardingNTA_Type() = getType().forwardingNTA_Type(
-          containingEndpointDefinition().getIndexBasedListAccess());
-
-  syn String TypeComponent.forwardingNTA_Type(boolean indexBasedListAccess);
-  eq NormalComponent.forwardingNTA_Type(boolean indexBasedListAccess) = getTypeDecl().getName();
-  eq OptComponent.forwardingNTA_Type(boolean indexBasedListAccess) =
-          ragconnect().configJastAddOpt() + "<" + getTypeDecl().getName() + ">";
-  eq ListComponent.forwardingNTA_Type(boolean indexBasedListAccess) = indexBasedListAccess ?
-                  getTypeDecl().getName() :
-                  ragconnect().configJastAddList() + "<" + getTypeDecl().getName() + ">";
-}
-
 aspect SharedMustache {
   // === RagConnect ===
   syn boolean RagConnect.configIncrementalOptionActive() = getConfiguration().getIncrementalOptionActive();
@@ -83,6 +17,9 @@ aspect SharedMustache {
 
   syn String RagConnect.internalRagConnectPrefix() = "_ragconnect_";
 
+  syn String RagConnect.observerInstanceSingletonMethodName() = internalRagConnectPrefix() + "Observer";
+  syn String RagConnect.observerInstanceResetMethodName() = internalRagConnectPrefix() + "resetObserver";
+
   syn String RagConnect.rootNodeName() = getConfiguration().getRootNode().getName();
 
   // === EndpointDefinition ===
@@ -286,8 +223,26 @@ aspect MustacheRagConnect {
     return result;
   }
 
+  syn List<TypeDecl> RagConnect.allTypeDecls() {
+    return getProgram().typeDecls().stream()
+            .sorted(java.util.Comparator.comparing(TypeDecl::getName))
+            .collect(java.util.stream.Collectors.toList());
+  }
+
   // > allMappingDefinitions in Mappings.jrag
 
+  syn String RagConnect.observerInstanceFieldName() = internalRagConnectPrefix() + "ObserverInstance";
+
+  syn java.util.List<Component> TypeDecl.tokenComponents() {
+    return filteredComponents(Component::isTokenComponent);
+  }
+  syn java.util.List<Component> TypeDecl.normalComponents() {
+    return filteredComponents(comp -> comp.isTypeComponent() && !comp.isListComponent());
+  }
+  syn java.util.List<Component> TypeDecl.listComponents() {
+    return filteredComponents(Component::isListComponent);
+  }
+
   syn List<TokenComponent> RagConnect.tokenComponentsThatNeedProxy() {
     List<TokenComponent> result = new ArrayList<>();
     for (TokenComponent token : getProgram().allTokenComponents()) {
@@ -298,6 +253,8 @@ aspect MustacheRagConnect {
     return result;
   }
 
+  syn String RagConnect.touchedTerminalsMethodName() = internalRagConnectPrefix() + "touchedTerminals";
+
   syn List<TypeDecl> RagConnect.typeDeclsOfContextFreeEndpointTargets() {
     List<TypeDecl> result = new ArrayList<>();
     for (EndpointTarget target : givenEndpointTargetList()) {
@@ -353,6 +310,15 @@ aspect MustacheRagConnect {
     return result;
   }
 
+  private java.util.List<Component> TypeDecl.filteredComponents(java.util.function.Predicate<Component> filter) {
+    java.util.List<Component> result = new java.util.ArrayList<>();
+    for (Component comp : getComponentList()) {
+      if (filter.test(comp)) {
+        result.add(comp);
+      }
+    }
+    return result;
+  }
 }
 
 aspect MustacheReceiveAndSendAndHandleUri {
@@ -457,6 +423,10 @@ aspect MustacheSendDefinition {
 
   syn String EndpointDefinition.lastValueSetter() = senderName() + ".setLastValue";
 
+  syn boolean EndpointDefinition.needForwardingNTA() = getEndpointTarget().needForwardingNTA();
+  syn String EndpointDefinition.forwardingNTA_Name() = getEndpointTarget().forwardingNTA_Name();
+  syn String EndpointDefinition.forwardingNTA_Type() = getEndpointTarget().forwardingNTA_Type();
+
   syn String EndpointDefinition.senderName() = getEndpointTarget().senderName();
 
   syn boolean EndpointDefinition.shouldSendValue() = getSend() && getEndpointTarget().entityIsNormalAttribute();
@@ -468,6 +438,24 @@ aspect MustacheSendDefinition {
   syn String EndpointDefinition.writeMethodName() = toMustache().writeMethodName();
 
   // === attributes needed for computing above ones ===
+  syn boolean EndpointTarget.needForwardingNTA() = false;
+  eq TypeEndpointTarget.needForwardingNTA() = containingEndpointDefinition().getSend() && !getType().getNTA();
+
+  syn String EndpointTarget.forwardingNTA_Name() = null;
+  eq TypeEndpointTarget.forwardingNTA_Name() = ragconnect().internalRagConnectPrefix() + getType().getName();
+
+  syn String EndpointTarget.forwardingNTA_Type() = null;
+  eq TypeEndpointTarget.forwardingNTA_Type() = getType().forwardingNTA_Type(
+          containingEndpointDefinition().getIndexBasedListAccess());
+
+  syn String TypeComponent.forwardingNTA_Type(boolean indexBasedListAccess);
+  eq NormalComponent.forwardingNTA_Type(boolean indexBasedListAccess) = getTypeDecl().getName();
+  eq OptComponent.forwardingNTA_Type(boolean indexBasedListAccess) =
+          ragconnect().configJastAddOpt() + "<" + getTypeDecl().getName() + ">";
+  eq ListComponent.forwardingNTA_Type(boolean indexBasedListAccess) = indexBasedListAccess ?
+          getTypeDecl().getName() :
+          ragconnect().configJastAddList() + "<" + getTypeDecl().getName() + ">";
+
   syn String EndpointTarget.senderName();
   eq TokenEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getToken().getName();
   eq TypeEndpointTarget.senderName() = ragconnect().internalRagConnectPrefix() + "_sender_" + getType().getName();
@@ -546,6 +534,14 @@ aspect MustacheTokenComponent {
 aspect MustacheTypeDecl {
   // === TypeComponent ===
   syn String TypeComponent.parentTypeName() = containingTypeDecl().getName();
+  syn String TypeComponent.disconnectMethodName() {
+    List<TypeEndpointTarget> typeEndpointTargets = getTypeEndpointTargets();
+    if (typeEndpointTargets.isEmpty()) {
+      return "MISSING_ENDPOINT";
+    } else {
+      return typeEndpointTargets.get(0).containingEndpointDefinition().disconnectMethodName();
+    }
+  }
 
   // === TypeDecl ===
   syn List<TypeComponent> TypeDecl.occurencesInProductionRules() {