diff --git a/framework/examples/app4mc.example.transform.m2t/META-INF/MANIFEST.MF b/framework/examples/app4mc.example.transform.m2t/META-INF/MANIFEST.MF
index e1c5aa8..9f2bd48 100644
--- a/framework/examples/app4mc.example.transform.m2t/META-INF/MANIFEST.MF
+++ b/framework/examples/app4mc.example.transform.m2t/META-INF/MANIFEST.MF
@@ -19,6 +19,6 @@
  org.osgi.service.component.annotations;version="[1.3.0,2.0.0)";resolution:=optional
 Export-Package: app4mc.example.transform.m2t.transformers
 Bundle-ClassPath: .
-Service-Component: OSGI-INF/app4mc.example.transform.m2t.M2TTransformationDefinition.xml,
- OSGI-INF/app4mc.example.transform.m2t.ExampleModel2TextTransformer.xml,
+Service-Component: OSGI-INF/app4mc.example.transform.m2t.ExampleModel2TextTransformer.xml,
+ OSGI-INF/app4mc.example.transform.m2t.M2TTransformationDefinition.xml,
  OSGI-INF/app4mc.example.transform.m2t.transformers.ExampleGuiceModuleFactory.xml
diff --git a/framework/examples/app4mc.example.transform.product/Transformation.product b/framework/examples/app4mc.example.transform.product/Transformation.product
index b13e16a..ebadfc7 100644
--- a/framework/examples/app4mc.example.transform.product/Transformation.product
+++ b/framework/examples/app4mc.example.transform.product/Transformation.product
@@ -41,23 +41,36 @@
       <plugin id="org.apache.felix.gogo.runtime"/>
       <plugin id="org.apache.felix.gogo.shell"/>
       <plugin id="org.apache.felix.scr"/>
+      <plugin id="org.apache.log4j"/>
       <plugin id="org.eclipse.app4mc.amalthea.model"/>
       <plugin id="org.eclipse.app4mc.transformation"/>
       <plugin id="org.eclipse.app4mc.transformation.starter"/>
       <plugin id="org.eclipse.app4mc.util.sessionlog"/>
       <plugin id="org.eclipse.app4mc.util.sessionlog.console"/>
       <plugin id="org.eclipse.app4mc.util.sessionlog.file"/>
+      <plugin id="org.eclipse.core.contenttype"/>
+      <plugin id="org.eclipse.core.jobs"/>
+      <plugin id="org.eclipse.core.runtime"/>
       <plugin id="org.eclipse.emf.common"/>
       <plugin id="org.eclipse.emf.ecore"/>
       <plugin id="org.eclipse.emf.ecore.xcore.lib"/>
       <plugin id="org.eclipse.emf.ecore.xmi"/>
+      <plugin id="org.eclipse.equinox.app"/>
       <plugin id="org.eclipse.equinox.cm"/>
       <plugin id="org.eclipse.equinox.common"/>
       <plugin id="org.eclipse.equinox.console"/>
       <plugin id="org.eclipse.equinox.event"/>
+      <plugin id="org.eclipse.equinox.preferences"/>
+      <plugin id="org.eclipse.equinox.region" fragment="true"/>
+      <plugin id="org.eclipse.equinox.registry"/>
+      <plugin id="org.eclipse.equinox.supplement"/>
+      <plugin id="org.eclipse.equinox.transforms.hook" fragment="true"/>
+      <plugin id="org.eclipse.equinox.weaving.hook" fragment="true"/>
       <plugin id="org.eclipse.osgi"/>
+      <plugin id="org.eclipse.osgi.compatibility.state" fragment="true"/>
       <plugin id="org.eclipse.osgi.services"/>
       <plugin id="org.eclipse.osgi.util"/>
+      <plugin id="org.eclipse.xtext.logging" fragment="true"/>
       <plugin id="org.eclipse.xtext.xbase.lib"/>
       <plugin id="org.slf4j.api"/>
    </plugins>
diff --git a/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaModel2TextTransformer.java b/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaModel2TextTransformer.java
index cf1178e..bd8b854 100644
--- a/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaModel2TextTransformer.java
+++ b/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaModel2TextTransformer.java
@@ -19,6 +19,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Collection;
 
 import org.eclipse.app4mc.amalthea.model.Amalthea;
 import org.eclipse.app4mc.amlt2systemc.m2t.module.BaseTransformer;
@@ -45,20 +46,26 @@
 		this.outputBuffer.configureFiletype("INC", ".h", "// This code was generated for simulation with app4mc.sim\n\n#pragma once\n\n", null);
 		this.outputBuffer.configureFiletype("OTHER", "", "", "");
 
-		ArrayList<Amalthea> amaltheas = new ArrayList<Amalthea>();
+		// collect Amalthea models
+		// for APP4MC > 1.1.0 the AmaltheaLoader has a method collectAmaltheaModels(ResourceSet resourceSet)
+
+		Collection<Amalthea> models = new ArrayList<>();
 		for (final Resource resource : inputResourceSet.getResources()) {
 			for (final EObject model : resource.getContents()) {
 
 				logger.info("Processing file : {0}", resource.getURI());
-				
+
 				if ((model instanceof Amalthea)) {
-					amaltheas.add((Amalthea) model);
+					models.add((Amalthea) model);
 				}
 			}
 		}
 		
+		// if you want to check consistency of model structure:
+		// for APP4MC > 1.1.0 the method ModelStructureCheck.checkModels(...) can be used
+
 		//transform models
-		this.amaltheaTransformer.transform(amaltheas.toArray(new Amalthea[amaltheas.size()]));
+		this.amaltheaTransformer.transform(models.toArray(new Amalthea[models.size()]));
 
 		logger.info("Generating cmake");
 
diff --git a/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaTransformer.xtend b/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaTransformer.xtend
index cd42f79..e6037f5 100644
--- a/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaTransformer.xtend
+++ b/simulation_generator/app4mc.sim/plugins/org.eclipse.app4mc.amlt2systemc.m2t/src/org/eclipse/app4mc/amlt2systemc/m2t/transformers/AmaltheaTransformer.xtend
@@ -46,9 +46,9 @@
 
 	@Inject ProcessingUnitTransformer processingUnitTransformer
 	@Inject MemoryTransformer memoryTransformer
-	
+
 	@Inject SessionLogger logger;
-	
+
 	static def getModulePath() {
 		return "amaltheaTop"
 	}
@@ -62,9 +62,9 @@
 			logger.error("Input Amalthea model(s) invalid (received null).")
 			return
 		}
-			
-		//make sure all submodels are present in at least one input model 
-		//Note: chose index 0 at will, any list element would do just fine
+
+		// make sure all submodels are present in at least one input model 
+		// Note: chose index 0 at will, any list element would do just fine
 		adjustModel(amaltheas.get(0))
 
 		swModelTransformer.transform(amaltheas.map[it.swModel])
@@ -75,9 +75,9 @@
 		stimuliModelTransformer.transform(amaltheas.map[it.stimuliModel])
 
 		outputBuffer.appendTo("INC", getModuleName(), toH())
-		outputBuffer.appendTo("SRC", getModuleName(), toCpp())//swModels, hwModels, mappingModels, osModels, eventModels, stimuliModels))
+		outputBuffer.appendTo("SRC", getModuleName(), toCpp()) // swModels, hwModels, mappingModels, osModels, eventModels, stimuliModels))
 		outputBuffer.appendTo("OTHER", getModulePath() + "/CMakeLists.txt", getCMake());
-		
+
 	}
 
 	private def void adjustModel(Amalthea amalthea) {
@@ -94,7 +94,7 @@
 		//top level header 
 	'''
 
-	private def String toCpp()'''
+	private def String toCpp() '''
 		#include "APP4MCsim.h"
 		#include "Tracer/Tracer.h"
 		#include "Tracer/BTFTracer.h"
@@ -122,10 +122,10 @@
 		
 		
 		//include processing units and memories for tracing -----
-		«FOR tu: processingUnitTransformer.cache.values»
+		«FOR tu : processingUnitTransformer.cache.values»
 			#include "«tu.module».h"
 		«ENDFOR»
-		«FOR tu: memoryTransformer.cache.values»
+		«FOR tu : memoryTransformer.cache.values»
 			#include "«tu.module».h"
 		«ENDFOR»
 		// tracing includes -----------------
@@ -141,27 +141,27 @@
 			VLOG(0) << "build simulation model";
 			/* Software */
 			«FOR obj : TuSort.byModule(swModelTransformer.cache.values)»
-			«obj.call»;
+				«obj.call»;
 			«ENDFOR»
 			/* Hardware */
 			«FOR obj : TuSort.byModule(hwModelTransformer.cache.values)»
-			«obj.call»;
+				«obj.call»;
 			«ENDFOR»
 			/* OS */
 			«FOR obj : TuSort.byModule(osModelTransformer.cache.values)»
-			«obj.call»;
+				«obj.call»;
 			«ENDFOR»
 			/* Mapping */
 			«FOR obj : TuSort.byModule(mappingModelTransformer.cache.values)»
-			«obj.call»;
+				«obj.call»;
 			«ENDFOR»
 			/* Event */
 			«FOR obj : TuSort.byModule(eventModelTransformer.cache.values)»
-			«obj.call»;
+				«obj.call»;
 			«ENDFOR»
 			/* Stimuli */
 			«FOR obj : TuSort.byModule(stimuliModelTransformer.cache.values)»
-			«obj.call»;
+				«obj.call»;
 			«ENDFOR»
 			VLOG(0) << "simulation model complete";
 			
@@ -173,10 +173,10 @@
 			sc_core::sc_trace_file *tf = sc_core::sc_create_vcd_trace_file("trace");
 			
 			//trace processing units and memories -----
-			«FOR tu: processingUnitTransformer.cache.values»
+			«FOR tu : processingUnitTransformer.cache.values»
 				sc_trace(tf, &*«tu.call»(), "«tu.module.replaceAll("/", "_")»");
 			«ENDFOR»
-			«FOR tu: memoryTransformer.cache.values»
+			«FOR tu : memoryTransformer.cache.values»
 				sc_trace(tf, &*«tu.call»(), "«tu.module.replaceAll("/", "_")»");
 			«ENDFOR»
 			
@@ -202,15 +202,13 @@
 		}
 	'''
 
-	
-
 	def String getCMake() '''
 		include_directories(${PROJECT_SOURCE_DIR})
 		
 		add_executable («getProperty(PropertyKeys.PROJECT_NAME)»
 			"${PROJECT_SOURCE_DIR}/«getModuleName()».cpp"
 			 )
-
+		
 		target_link_libraries(«getProperty(PropertyKeys.PROJECT_NAME)» app4mc.sim_lib)
 		target_include_directories(«getProperty(PropertyKeys.PROJECT_NAME)» PUBLIC app4mc.sim_lib)
 		
@@ -222,10 +220,10 @@
 		add_subdirectory ("./osModel")
 		
 		«IF Integer.parseInt(super.getProperty("CmakeUnityBuildTUPerCore","0")) > 0»
-		# set the unity-batch-size to a Processorcount dependend value, for more efficient compiling
-		if(COMMAND calc_unity_batch_size)
-			calc_unity_batch_size(«getProperty(PropertyKeys.PROJECT_NAME)» «super.getProperty("CmakeUnityBuildTUPerCore")»)
-		endif()
+			# set the unity-batch-size to a Processorcount dependend value, for more efficient compiling
+			if(COMMAND calc_unity_batch_size)
+				calc_unity_batch_size(«getProperty(PropertyKeys.PROJECT_NAME)» «super.getProperty("CmakeUnityBuildTUPerCore")»)
+			endif()
 		«ENDIF»
 		
 		# use /bigobj to ensure big models to build with MSVC (e.g. FMTV WATERS Challenge 2017) 
@@ -239,8 +237,8 @@
 		endif()
 		
 		add_custom_target(model_execution 
-                COMMAND «getProperty(PropertyKeys.PROJECT_NAME)»
-                WORKING_DIRECTORY "${MODEL_WORKING_DIR}"
+		              COMMAND «getProperty(PropertyKeys.PROJECT_NAME)»
+		              WORKING_DIRECTORY "${MODEL_WORKING_DIR}"
 		  )
 	'''
 
