diff --git a/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag b/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag
index 67fc12fe1fe146459262338ad77779e619ebe300..337527db4b44261a30c6768450ded30ad99446db 100644
--- a/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag
+++ b/ragconnect.base/src/main/jastadd/intermediate2mustache/MustacheNodesToYAML.jrag
@@ -2,63 +2,71 @@ aspect MustacheNodesToYAML {
   syn Document MRagConnect.toYAML() {
     Document doc = new Document();
     MappingElement root = new MappingElement();
-    root.addKeyValuePair("rootNodeName", StringElement.of(rootNodeName()));
-    root.addKeyValuePair("closeMethod", StringElement.of(closeMethod()));
-    root.addKeyValuePair("usesMqtt", ValueElement.of(usesMqtt));
-    root.addKeyValuePair("usesRest", ValueElement.of(usesRest));
+    root.put("rootNodeName", rootNodeName());
+    root.put("closeMethod", closeMethod());
+    root.put("usesMqtt", usesMqtt);
+    root.put("usesRest", usesRest);
     // mqtt
-    root.addKeyValuePair("mqttHandlerField", StringElement.of(mqttHandlerField()));
-    root.addKeyValuePair("mqttHandlerAttribute", StringElement.of(mqttHandlerAttribute()));
-    root.addKeyValuePair("mqttSetupWaitUntilReadyMethod", StringElement.of(mqttSetupWaitUntilReadyMethod()));
+    root.put("mqttHandlerField", mqttHandlerField());
+    root.put("mqttHandlerAttribute", mqttHandlerAttribute());
+    root.put("mqttSetupWaitUntilReadyMethod", mqttSetupWaitUntilReadyMethod());
 
     // rootTypeComponents
     ListElement rootTypeComponents = new ListElement();
     for (MTypeComponent comp : getRootTypeComponentList()) {
       MappingElement inner = new MappingElement();
-      inner.addKeyValuePair("first", ValueElement.of(comp.isFirst()));
-      inner.addKeyValuePair("name", StringElement.of(comp.name()));
+      inner.put("first", comp.isFirst());
+      inner.put("name", comp.name());
       rootTypeComponents.addElement(inner);
     }
-    root.addKeyValuePair("RootTypeComponents", rootTypeComponents);
+    root.put("RootTypeComponents", rootTypeComponents);
 
     // rest
-    root.addKeyValuePair("restHandlerField", StringElement.of(restHandlerField()));
-    root.addKeyValuePair("restHandlerAttribute", StringElement.of(restHandlerAttribute()));
+    root.put("restHandlerField", restHandlerField());
+    root.put("restHandlerAttribute", restHandlerAttribute());
 
     // ReceiveDefinitions
     ListElement receiveDefinitions = new ListElement();
     for (MReceiveDefinition def : getReceiveDefinitionList()) {
       receiveDefinitions.addElement(def.toYAML());
     }
-    root.addKeyValuePair("ReceiveDefinitions", receiveDefinitions);
+    root.put("ReceiveDefinitions", receiveDefinitions);
 
     // SendDefinitions
     ListElement sendDefinitions = new ListElement();
     for (MSendDefinition def : getSendDefinitionList()) {
       sendDefinitions.addElement(def.toYAML());
     }
-    root.addKeyValuePair("SendDefinitions", sendDefinitions);
+    root.put("SendDefinitions", sendDefinitions);
 
     // MappingDefinitions
     ListElement mappingDefinitions = new ListElement();
     for (MMappingDefinition def : getMappingDefinitionList()) {
       mappingDefinitions.addElement(def.toYAML());
     }
-    root.addKeyValuePair("MappingDefinitions", mappingDefinitions);
+    root.put("MappingDefinitions", mappingDefinitions);
 
     // DependencyDefinitions
     ListElement dependencyDefinitions = new ListElement();
     for (MDependencyDefinition def : getDependencyDefinitionList()) {
       dependencyDefinitions.addElement(def.toYAML());
     }
-    root.addKeyValuePair("DependencyDefinitions", dependencyDefinitions);
+    root.put("DependencyDefinitions", dependencyDefinitions);
 
     // TokenComponents
     ListElement tokenComponents = new ListElement();
     for (MTokenComponent comp : getTokenComponentList()) {
       tokenComponents.addElement(comp.toYAML());
     }
-    root.addKeyValuePair("TokenComponents", tokenComponents);
+    root.put("TokenComponents", tokenComponents);
+
+    // Handlers
+    ListElement handlers = new ListElement();
+    for (MHandler handler : getHandlerList()) {
+      handlers.add(handler.toYAML()
+                          .put("rootTokenComponents", rootTypeComponents.treeCopy()) );
+    }
+    root.put("Handlers", handlers);
 
     doc.setRootElement(root);
     return doc;
@@ -66,75 +74,75 @@ aspect MustacheNodesToYAML {
 
   syn MappingElement MEndpointDefinition.toYAML() {
     MappingElement result = new MappingElement();
-    result.addKeyValuePair("parentTypeName", StringElement.of(parentTypeName()));
-    result.addKeyValuePair("connectMethod", StringElement.of(connectMethod()));
-    result.addKeyValuePair("connectParameterName", StringElement.of(connectParameterName()));
-    result.addKeyValuePair("lastDefinitionToType", StringElement.of(lastDefinitionToType()));
-    result.addKeyValuePair("preemptiveReturn", StringElement.of(preemptiveReturn()));
-    result.addKeyValuePair("alwaysApply", ValueElement.of(alwaysApply()));
-    result.addKeyValuePair("condition", StringElement.of(
-    condition().replace("\"", "\\\"").replace("\n", "\\n")));
-    result.addKeyValuePair("lastResult", StringElement.of(lastResult()));
-    result.addKeyValuePair("tokenName", StringElement.of(tokenName()));
-    result.addKeyValuePair("InnerMappingDefinitions", innerMappingDefinitionsAsListElement());
+    result.put("parentTypeName", parentTypeName());
+    result.put("connectMethod", connectMethod());
+    result.put("connectParameterName", connectParameterName());
+    result.put("lastDefinitionToType", lastDefinitionToType());
+    result.put("preemptiveReturn", preemptiveReturn());
+    result.put("alwaysApply", alwaysApply());
+    result.put("condition",
+    condition().replace("\"", "\\\"").replace("\n", "\\n"));
+    result.put("lastResult", lastResult());
+    result.put("tokenName", tokenName());
+    result.put("InnerMappingDefinitions", innerMappingDefinitionsAsListElement());
     return result;
   }
 
   syn MappingElement MReceiveDefinition.toYAML() {
     MappingElement result = super.toYAML();
-    result.addKeyValuePair("loggingEnabledForReads", ValueElement.of(loggingEnabledForReads));
+    result.put("loggingEnabledForReads", loggingEnabledForReads);
     return result;
   }
 
   syn MappingElement MSendDefinition.toYAML() {
     MappingElement result = super.toYAML();
-    result.addKeyValuePair("sender", StringElement.of(sender()));
-    result.addKeyValuePair("lastValue", StringElement.of(lastValue()));
-    result.addKeyValuePair("loggingEnabledForWrites", ValueElement.of(loggingEnabledForWrites));
-    result.addKeyValuePair("updateMethod", StringElement.of(updateMethod()));
-    result.addKeyValuePair("writeMethod", StringElement.of(writeMethod()));
-    result.addKeyValuePair("tokenResetMethod", StringElement.of(tokenResetMethod()));
+    result.put("sender", sender());
+    result.put("lastValue", lastValue());
+    result.put("loggingEnabledForWrites", loggingEnabledForWrites);
+    result.put("updateMethod", updateMethod());
+    result.put("writeMethod", writeMethod());
+    result.put("tokenResetMethod", tokenResetMethod());
     return result;
   }
 
   syn Element MMappingDefinition.toYAML() {
     MappingElement result = new MappingElement();
-    result.addKeyValuePair("toType", StringElement.of(toType()));
-    result.addKeyValuePair("methodName", StringElement.of(methodName()));
-    result.addKeyValuePair("fromType", StringElement.of(fromType()));
-    result.addKeyValuePair("fromVariableName", StringElement.of(fromVariableName()));
-    result.addKeyValuePair("content", StringElement.of(
-        content().replace("\"", "\\\"").replace("\n", "\\n")));
+    result.put("toType", toType());
+    result.put("methodName", methodName());
+    result.put("fromType", fromType());
+    result.put("fromVariableName", fromVariableName());
+    result.put("content",
+        content().replace("\"", "\\\"").replace("\n", "\\n"));
     return result;
   }
 
   syn Element MDependencyDefinition.toYAML() {
     MappingElement result = new MappingElement();
-    result.addKeyValuePair("targetParentTypeName", StringElement.of(targetParentTypeName()));
-    result.addKeyValuePair("dependencyMethod", StringElement.of(dependencyMethod()));
-    result.addKeyValuePair("sourceParentTypeName", StringElement.of(sourceParentTypeName()));
-    result.addKeyValuePair("internalRelationPrefix", StringElement.of(internalRelationPrefix()));
+    result.put("targetParentTypeName", targetParentTypeName());
+    result.put("dependencyMethod", dependencyMethod());
+    result.put("sourceParentTypeName", sourceParentTypeName());
+    result.put("internalRelationPrefix", internalRelationPrefix());
     return result;
   }
 
   syn Element MTokenComponent.toYAML() {
     MappingElement result = new MappingElement();
-    result.addKeyValuePair("parentTypeName", StringElement.of(parentTypeName()));
-    result.addKeyValuePair("name", StringElement.of(name()));
-    result.addKeyValuePair("javaType", StringElement.of(javaType()));
-    result.addKeyValuePair("internalName", StringElement.of(internalName()));
+    result.put("parentTypeName", parentTypeName());
+    result.put("name", name());
+    result.put("javaType", javaType());
+    result.put("internalName", internalName());
     ListElement dependencyDefinitions = new ListElement();
     for (MDependencyDefinition def : getDependencyDefinitionList()) {
       MappingElement inner = new MappingElement();
-      inner.addKeyValuePair("targetParentTypeName", StringElement.of(def.targetParentTypeName()));
-      inner.addKeyValuePair("internalRelationPrefix", StringElement.of(def.internalRelationPrefix()));
+      inner.put("targetParentTypeName", def.targetParentTypeName());
+      inner.put("internalRelationPrefix", def.internalRelationPrefix());
       MappingElement targetEndpointDefinition = new MappingElement();
-    targetEndpointDefinition.addKeyValuePair("updateMethod", StringElement.of(def.targetEndpointDefinition().updateMethod()));
-    targetEndpointDefinition.addKeyValuePair("writeMethod", StringElement.of(def.targetEndpointDefinition().writeMethod()));
-      inner.addKeyValuePair("targetEndpointDefinition", targetEndpointDefinition);
+    targetEndpointDefinition.put("updateMethod", def.targetEndpointDefinition().updateMethod());
+    targetEndpointDefinition.put("writeMethod", def.targetEndpointDefinition().writeMethod());
+      inner.put("targetEndpointDefinition", targetEndpointDefinition);
       dependencyDefinitions.addElement(inner);
     }
-    result.addKeyValuePair("DependencyDefinitions", dependencyDefinitions);
+    result.put("DependencyDefinitions", dependencyDefinitions);
     return result;
   }
 
@@ -142,15 +150,25 @@ aspect MustacheNodesToYAML {
     ListElement innerMappingDefinitions = new ListElement();
     for (MInnerMappingDefinition def : getInnerMappingDefinitionList()) {
       MappingElement inner = new MappingElement();
-      inner.addKeyValuePair("toType", StringElement.of(def.toType()));
-      inner.addKeyValuePair("methodName", StringElement.of(def.methodName()));
-      inner.addKeyValuePair("inputVarName", StringElement.of(def.inputVarName()));
-      inner.addKeyValuePair("outputVarName", StringElement.of(def.outputVarName()));
-      inner.addKeyValuePair("last", ValueElement.of(def.isLast()));
+      inner.put("toType", def.toType());
+      inner.put("methodName", def.methodName());
+      inner.put("inputVarName", def.inputVarName());
+      inner.put("outputVarName", def.outputVarName());
+      inner.put("last", def.isLast());
       innerMappingDefinitions.addElement(inner);
     }
     return innerMappingDefinitions;
   }
+
+  syn MappingElement MHandler.toYAML() {
+    MappingElement result = new MappingElement();
+    result.put("ClassName", getClassName());
+    result.put("Construction", getConstruction());
+    result.put("AttributeName", getAttributeName());
+    result.put("FieldName", getFieldName());
+    result.put("InUse", getInUse());
+    return result;
+  }
 }
 
 aspect Navigation {