Remove SLG Linux translation unit hierarchy - step 2
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
index 35105eb..419af5e 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/customization/CustomRunnableTransformer.java
@@ -31,7 +31,7 @@
 	@Inject private ActivityGraphItemTransformer psCallGraphItemTransformer;
 
 	@Override
-	public RunnableTranslationUnit transform(final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+	public RunnableTranslationUnit transform(final Runnable runnable) {
 		final ArrayList<?> key = CollectionLiterals.newArrayList(runnable);
 		final CustomRunnableTranslationUnit result;
 		synchronized (_createCache_transform) {
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java
index 7ea4ee4..6006031 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxGoogleGuiceModule.java
@@ -35,6 +35,7 @@
 	protected void configure() {
 		bind(Properties.class).toInstance(this.properties);
 		bind(CustomObjectsStore.class).toInstance(new CustomObjectsStore());
+
 		bind(RunnableTransformer.class).to(CustomRunnableTransformer.class);
 	}
 
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java
index f44cf61..90e2eef 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/artefacts/LinuxRootTransformer.java
@@ -101,7 +101,6 @@
 				}
 			}
 		}
-
 	}
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxBaseTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxBaseTranslationUnit.java
deleted file mode 100644
index 3f75c23..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxBaseTranslationUnit.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- ********************************************************************************
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- ********************************************************************************
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public abstract class LinuxBaseTranslationUnit extends TranslationUnit {
-
-	private static final String SRC_FOLDER = "/_src/";
-	private static final String INC_FOLDER = "/_inc/";
-
-	private OutputBuffer outputBuffer;
-
-	public LinuxBaseTranslationUnit(final OutputBuffer outputBuffer) {
-		super("MODULE_PATH", "CALL", "MODULE.H", "MODULE.C"); // dummy values for unused data
-		this.outputBuffer = outputBuffer;
-	}
-
-	public abstract String getBasePath();
-
-	public abstract String getModuleName();
-
-	public String getModulePath() {
-		return getBasePath() + "/" + getModuleName();
-	}
-
-	@Override
-	public String getIncFile() {
-		return (this.getModuleName() + ".h");
-	}
-
-	@Override
-	public String getSrcFile() {
-		return (this.getModuleName() + ".c");
-	}
-
-	public String getIncPath() {
-		return this.getModulePath() + INC_FOLDER + this.getIncFile();
-	}
-
-	public String getSrcPath() {
-		return this.getModulePath() + SRC_FOLDER + this.getSrcFile();
-	}
-
-	public boolean isIncFileEmpty() {
-		return !outputBuffer.bufferExists("H", getModulePath() + INC_FOLDER + getModuleName());
-	}
-
-	public boolean isSrcFileEmpty() {
-		return !outputBuffer.bufferExists("C", getModulePath() + SRC_FOLDER + getModuleName());
-	}
-
-	public boolean incAppend(String str) {
-		return outputBuffer.appendTo("H", getModulePath() + INC_FOLDER + getModuleName(), str);
-	}
-
-	public boolean srcAppend(String str) {
-		return outputBuffer.appendTo("C", getModulePath() + SRC_FOLDER + getModuleName(), str);
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelAccessTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelAccessTranslationUnit.java
deleted file mode 100644
index 96975c1..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelAccessTranslationUnit.java
+++ /dev/null
@@ -1,97 +0,0 @@
-/**
- ********************************************************************************
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- ********************************************************************************
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import static org.eclipse.app4mc.amalthea.model.LabelAccessEnum._UNDEFINED_;
-
-import org.eclipse.app4mc.amalthea.model.LabelAccess;
-import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
-import org.eclipse.app4mc.amalthea.model.NumericStatistic;
-import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxLabelAccessTranslationUnit extends LinuxBaseTranslationUnit {
-
-	private final LinuxLabelTranslationUnit tuLabel;
-	private final LabelAccess labelAccess;
-
-	public LinuxLabelAccessTranslationUnit(
-			final OutputBuffer outputBuffer,
-			final LinuxLabelTranslationUnit tuLabel,
-			final LabelAccess labelAccess) {
-		super(outputBuffer);
-		this.tuLabel = tuLabel;
-		this.labelAccess = labelAccess;
-	}
-
-	// translation unit specific settings
-	
-	@Override
-	public String getBasePath() { return this.tuLabel.getBasePath(); }
-
-	@Override
-	public String getModuleName() { return this.tuLabel.getModuleName(); }
-
-	@Override
-	public String getIncFile() { return this.tuLabel.getIncFile(); }
-
-	// ---------- names of generated 'C' functions ----------
-
-	@Override
-	public String getCall() {
-		if (labelAccess == null || tuLabel == null) return null;
-		
-		if (labelAccess.getAccess() == _UNDEFINED_) {
-			if (labelAccess.getData() == null) {
-				return "/* unspecified label access */";	
-			} else {
-				return ("/*underspecified access to label" + this.labelAccess.getData().getName()) + "*/";				
-			}
-		}
-
-		final NumericStatistic stat = statisticValueOrNull(labelAccess);
-		final String statString = (stat == null) ? "1" : getNumericStatistic(stat);
-
-
-		switch (labelAccess.getAccess()) {
-		case READ:
-			return tuLabel.readCall(statString);
-		case WRITE:
-			return tuLabel.writeCall(statString);
-		default:
-			return null;
-		}
-	}
-
-	// --------------------------------------------------
-
-	private NumericStatistic statisticValueOrNull(final LabelAccess access) {
-		if (access == null || access.getStatistic() == null) return null;
-		
-		return access.getStatistic().getValue();
-	}
-
-	private String getNumericStatistic(final NumericStatistic statistic) {
-		if (statistic instanceof MinAvgMaxStatistic) {
-			String valueString = String.format("%d", Math.ceil(((MinAvgMaxStatistic) statistic).getAvg()));
-			return (valueString + " /*MinAvgMaxStatistic not supported yet*/");
-		} else if (statistic instanceof SingleValueStatistic) {
-			return String.format("%d", Math.ceil(((SingleValueStatistic) statistic).getValue()));
-		}
-		return null;
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelTranslationUnit.java
deleted file mode 100644
index 7d3a7c0..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxLabelTranslationUnit.java
+++ /dev/null
@@ -1,75 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.amalthea.model.Label;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxLabelTranslationUnit extends LinuxSyntheticTranslationUnit {
-
-	public static String getModulePathStatic() {
-		return getBasePathStatic() + "/" + getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getModulePathStatic() + "/" + getMakeFileName();
-	}
-
-	public static String getModuleNameStatic() {
-		return "labels";
-	}
-
-	public static String getLibName() {
-		return "LABELS_LIB";
-	}
-
-	@Override
-	public String getModuleName() {
-		return LinuxLabelTranslationUnit.getModuleNameStatic();
-	}
-
-	private String getName() {
-		return this.label.getName();
-	}
-
-	@Override
-	public String getIncFile() {
-		return this.getModuleName() + ".h";
-	}
-
-	// ---------- names of generated 'C' functions ----------
-	public String initCall()				{ return "initialize_" + getName(); }
-	public String readCall(String param)	{ return "read_" + getName() + "(" + param + ")"; }
-	public String writeCall(String param)	{ return "write_" + getName() + "(" + param + ")"; }
-
-	// ----------
-
-	private final Label label;
-
-	public LinuxLabelTranslationUnit(final OutputBuffer outputBuffer, final Label label) {
-		super(outputBuffer);
-		this.label = label;
-		this.genFiles();
-	}
-
-	public void genFiles() {
-		if (this.isSrcFileEmpty()) {
-			this.srcAppend("#include \"" + this.getIncFile() + "\"\n");
-			this.srcAppend("#include <stdbool.h>\n\n");
-		}
-		this.incAppend(LinuxLabelGenerator.toH(label));
-		this.srcAppend(LinuxLabelGenerator.toCpp(label));
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRealisiticSyntheticTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRealisiticSyntheticTranslationUnit.java
deleted file mode 100644
index 0a62c3a..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRealisiticSyntheticTranslationUnit.java
+++ /dev/null
@@ -1,53 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-import com.google.inject.Singleton;
-
-@Singleton
-public class LinuxRealisiticSyntheticTranslationUnit extends LinuxSyntheticTranslationUnit {
-	public static String getModulePathStatic() {
-		return getBasePathStatic() + "/" + getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getModulePathStatic() + "/" + getMakeFileName();
-	}
-
-	public static String getModuleNameStatic() {
-		return "codesnippets";
-	}
-
-	public static String getLibName() {
-		return "CODESNIPPETS_LIB";
-	}
-
-	@Override
-	public String getModuleName() {
-		return getModuleNameStatic();
-	}
-
-	@Override
-	public String getIncFile() {
-		return this.getModuleName() + ".h";
-	}
-
-	public LinuxRealisiticSyntheticTranslationUnit(final OutputBuffer outputBuffer, final ConfigModel configModel) {
-		super(outputBuffer);
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRunnableTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRunnableTranslationUnit.java
deleted file mode 100644
index 336d76e..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxRunnableTranslationUnit.java
+++ /dev/null
@@ -1,151 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-package org.eclipse.app4mc.slg.linux.generators;
-
-import java.util.Properties;
-import java.util.Set;
-
-import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
-import org.eclipse.app4mc.amalthea.model.LabelAccess;
-import org.eclipse.app4mc.amalthea.model.LabelAccessEnum;
-import org.eclipse.app4mc.amalthea.model.LabelAccessStatistic;
-import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
-import org.eclipse.app4mc.amalthea.model.NumericStatistic;
-import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
-import org.eclipse.app4mc.amalthea.model.Runnable;
-import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
-import org.eclipse.app4mc.amalthea.model.Ticks;
-import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableGenerator.Calculation;
-import org.eclipse.app4mc.slg.linux.transformers.sw.LinuxActivityGraphItemTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxRunnableTranslationUnit extends LinuxSyntheticTranslationUnit {
-	public static String getModulePathStatic() {
-		return getBasePathStatic() + "/" + getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getModulePathStatic() + "/" + getMakeFileName();
-	}
-
-	public static String getModuleNameStatic() {
-		return "runnables";
-	}
-
-	public static String getLibName() {
-		return "RUNNABLES_LIB";
-	}
-
-	@Override
-	public String getModuleName() {
-		return getModuleNameStatic();
-	}
-
-	@Override
-	public String getCall() {
-		String name = (this.runnable == null) ? "???" : runnable.getName();
-		return name + "()";
-	}
-
-	@Override
-	public String getIncFile() {
-		return (getModuleName() + ".h");
-	}
-
-	private Runnable runnable;
-	private Properties properties;
-
-	public LinuxRunnableTranslationUnit(final OutputBuffer outputBuffer,
-			final LinuxActivityGraphItemTransformer linuxCallGraphItemTransformer,
-			final Runnable runnable, final Properties properties) {
-		super(outputBuffer);
-		this.runnable = runnable;
-		this.properties = properties;
-
-		this.genFiles();
-	}
-
-	private String runnableName() {
-		return (runnable == null) ? "???" : runnable.getName();
-	}
-
-	public void genFiles() {
-			if (isIncFileEmpty()) {
-				incAppend(LinuxRunnableGenerator.snippetIncStart());
-			}
-			if (this.isSrcFileEmpty()) {
-				srcAppend(LinuxRunnableGenerator.snippetSrcStart());
-			}
-			
-			// write header
-			incAppend("\n//Runnable " + runnableName() + "----\n");
-			incAppend("void " + runnableName() + "(char* coreName);\n");
-			
-			Calculation calc = new Calculation();
-			calc.ticksSumMap.put("default", Integer.valueOf(0));
-			
-			if (runnable != null && runnable.getActivityGraph() != null) {
-				for (ActivityGraphItem item : runnable.getActivityGraph().getItems()) {
-					if (item instanceof Ticks) {
-						Ticks ticks = (Ticks) item;
-						if (ticks.getDefault() != null && ticks.getDefault().getAverage() != null) {
-							calc.ticksSum += ticks.getDefault().getAverage().intValue();
-							calc.ticksSumMap.put("default", calc.ticksSum);
-						}
-
-						Set<ProcessingUnitDefinition> puDefinitions = ticks.getExtended().keySet();
-						for (ProcessingUnitDefinition puDef : puDefinitions) {
-							if (puDef != null) {
-								String puDefName = puDef.getName();
-								if (!calc.ticksSumMap.containsKey(puDefName)) {
-									calc.ticksSumMap.put(puDefName, 0);
-								}
-								calc.ticksSumMap.put(puDefName, calc.ticksSumMap.get(puDefName) +
-									ticks.getExtended().get(puDef).getAverage().intValue());
-							}
-						}
-					} else if (item instanceof LabelAccess) {
-						LabelAccess la = (LabelAccess) item;
-						Float value = Float.parseFloat(
-							properties.getOrDefault("labelAccessStatisticValueDefault", "1.0F").toString());
-
-						LabelAccessStatistic labelStatistic = la.getStatistic();
-						if (labelStatistic != null) {
-							NumericStatistic labelStatisticValue = labelStatistic.getValue();
-
-							if (labelStatisticValue instanceof SingleValueStatistic) {
-								value = ((SingleValueStatistic) labelStatisticValue).getValue();
-							} else if (labelStatisticValue instanceof MinAvgMaxStatistic) {
-								// TODO: provide a configuration option, to select appropriate value
-								// from labelStatistic (min/max/avg)
-								// right now considering the average value
-								value = ((MinAvgMaxStatistic) labelStatisticValue).getAvg();
-							}
-						}
-
-						if (la.getAccess() == LabelAccessEnum.READ) {
-							calc.readsSum += value.intValue();
-						} else if (la.getAccess() == LabelAccessEnum.WRITE) {
-							calc.writesSum += value.intValue();
-						}
-					}
-				}
-			}
-
-			boolean useExperimental = Boolean.parseBoolean(properties.getProperty("experimentalCodeSnippetMatching"));
-
-			String codeString = LinuxRunnableGenerator.syntheticLoad(useExperimental);
-			srcAppend(LinuxRunnableGenerator.snippetSrcBody(runnable, codeString));
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxStimulusTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxStimulusTranslationUnit.java
deleted file mode 100644
index 6e80e42..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxStimulusTranslationUnit.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Properties;
-
-import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
-import org.eclipse.app4mc.amalthea.model.Stimulus;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxStimulusTranslationUnit extends LinuxSyntheticTranslationUnit {
-
-	private List<Stimulus> stimuli = new ArrayList<>();
-	private Properties properties;
-
-	public LinuxStimulusTranslationUnit(final OutputBuffer outputBuffer, final Properties properties,
-			final List<Stimulus> stimuli) {
-		super(outputBuffer);
-		this.properties = properties;
-
-		for (Stimulus stimulus : stimuli) {
-			if ((stimulus instanceof PeriodicStimulus)) {
-				this.stimuli.add(stimulus);
-			}
-		}
-
-		this.genFiles();
-	}
-
-	@Override
-	public String getBasePath() {
-		return "Executable";
-	}
-
-	@Override
-	public String getModuleName() {
-		return "main";
-	}
-
-	public void genFiles() {
-		Stimulus lastStimulus = stimuli.isEmpty() ? null : stimuli.get(stimuli.size() - 1);
-		boolean enableInstrumentation = Boolean.parseBoolean(properties.getProperty("enableInstrumentation"));
-
-		srcAppend(LinuxStimulusGenerator.toSrc(stimuli, lastStimulus, enableInstrumentation));
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxSyntheticTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxSyntheticTranslationUnit.java
deleted file mode 100644
index 986118c..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxSyntheticTranslationUnit.java
+++ /dev/null
@@ -1,39 +0,0 @@
-/**
- ********************************************************************************
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- ********************************************************************************
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public abstract class LinuxSyntheticTranslationUnit extends LinuxBaseTranslationUnit {
-
-	protected static String getBasePathStatic() {
-		return "synthetic_gen";
-	}
-
-	protected static String getMakeFileName() {
-		return "CMakeLists.txt";
-	}
-
-	@Override
-	public String getBasePath() {
-		return getBasePathStatic();
-	}
-
-	public LinuxSyntheticTranslationUnit(final OutputBuffer outputBuffer) {
-		super(outputBuffer);
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTaskTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTaskTranslationUnit.java
deleted file mode 100644
index cbe6e7f..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTaskTranslationUnit.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-package org.eclipse.app4mc.slg.linux.generators;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
-
-import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
-import org.eclipse.app4mc.amalthea.model.Amalthea;
-import org.eclipse.app4mc.amalthea.model.AmaltheaServices;
-import org.eclipse.app4mc.amalthea.model.Group;
-import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
-import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
-import org.eclipse.app4mc.amalthea.model.Process;
-import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
-import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
-import org.eclipse.app4mc.amalthea.model.Runnable;
-import org.eclipse.app4mc.amalthea.model.RunnableCall;
-import org.eclipse.app4mc.amalthea.model.Task;
-import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxTaskTranslationUnit extends LinuxSyntheticTranslationUnit {
-	public static String getModulePathStatic() {
-		return getBasePathStatic() + "/" + "tasks";
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getBasePathStatic() + "/" + "tasks" + "/" + getMakeFileName();
-	}
-
-	public static String getLibName() {
-		return "TASKS_LIB";
-	}
-
-	@Override
-	public String getModuleName() {
-		return "tasks";
-	}
-
-	@Override
-	public String getCall() {
-		return task.getName() + "()";
-	}
-
-	@Override
-	public String getIncFile() {
-		return getModuleName() + ".h";
-	}
-
-	private final Task task;
-
-	public LinuxTaskTranslationUnit(final OutputBuffer outputBuffer, final Task task) {
-		super(outputBuffer);
-		this.task = task;
-
-		this.genFiles();
-	}
-
-	public void genFiles() {
-		final Amalthea root = AmaltheaServices.getContainerOfType(task, Amalthea.class);
-		final Set<ProcessingUnit> assignedCores = DeploymentUtil.getAssignedCoreForProcess(task, root);
-
-		final StringBuilder puDefinition = new StringBuilder("default");
-
-		if (assignedCores != null && !assignedCores.isEmpty()) {
-			puDefinition.delete(0, puDefinition.length());
-
-			ProcessingUnit pu = assignedCores.iterator().next();
-			ProcessingUnitDefinition puDef = pu.getDefinition();
-			String puDefName = (puDef == null) ? null : puDef.getName();
-
-			puDefinition.append(puDefName);
-		}
-
-		final List<String> statements = new ArrayList<>();
-		final List<Process> processedTasks = new ArrayList<>();
-
-		if (task != null && task.getActivityGraph() != null) {
-			for (ActivityGraphItem item : task.getActivityGraph().getItems()) {
-
-				if (item instanceof Group) {
-					for (ActivityGraphItem item2 : ((Group) item).getItems()) {
-						if ((item2 instanceof RunnableCall)) {
-							final Runnable runnable = ((RunnableCall) item2).getRunnable();
-							statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
-						} else if ((item2 instanceof InterProcessTrigger)) {
-							InterProcessStimulus stimulus = ((InterProcessTrigger) item2).getStimulus();
-							LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
-						}
-					}
-				} else if (item instanceof RunnableCall) {
-					final Runnable runnable = ((RunnableCall) item).getRunnable();
-					if ((runnable != null)) {
-						statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
-					}
-				} else if (item instanceof InterProcessTrigger) {
-					InterProcessStimulus stimulus = ((InterProcessTrigger) item).getStimulus();
-					LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
-				}
-			}
-		}
-
-		if (isIncFileEmpty()) {
-			incAppend(LinuxTaskGenerator.snippetIncStart().toString());
-		}
-		if (isSrcFileEmpty()) {
-			srcAppend(LinuxTaskGenerator.snippetSrcStart().toString());
-		}
-		srcAppend(LinuxTaskGenerator.toCpp(task, statements));
-		incAppend(LinuxTaskGenerator.toH(task));
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksTranslationUnit.java
deleted file mode 100644
index e931082..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksTranslationUnit.java
+++ /dev/null
@@ -1,50 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.amalthea.model.Ticks;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxTicksTranslationUnit extends LinuxBaseTranslationUnit {
-	@Override
-	public String getBasePath() {
-		return this.tuTicksUtils.getBasePath();
-	}
-
-	@Override
-	public String getModuleName() {
-		return this.tuTicksUtils.getModuleName();
-	}
-
-	@Override
-	public String getIncFile() {
-		return getModuleName() + ".h";
-	}
-
-	@Override
-	public String getCall() {
-		return this.tuTicksUtils.getExecCall(LinuxTicksGenerator.getParameters(this.ticks.getDefault())).toString();
-	}
-
-	private final LinuxTicksUtilsTranslationUnit tuTicksUtils;
-	private final Ticks ticks;
-
-	public LinuxTicksTranslationUnit(final OutputBuffer outputBuffer, final LinuxTicksUtilsTranslationUnit tuTicksUtils,
-			final Ticks ticks) {
-		super(outputBuffer);
-		this.tuTicksUtils = tuTicksUtils;
-		this.ticks = ticks;
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksUtilsTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksUtilsTranslationUnit.java
deleted file mode 100644
index 5f58af8..0000000
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/generators/LinuxTicksUtilsTranslationUnit.java
+++ /dev/null
@@ -1,93 +0,0 @@
-/**
- * Copyright (c) 2020-2021 Robert Bosch GmbH.
- * 
- * This program and the accompanying materials are made
- * available under the terms of the Eclipse Public License 2.0
- * which is available at https://www.eclipse.org/legal/epl-2.0/
- * 
- * SPDX-License-Identifier: EPL-2.0
- * 
- * Contributors:
- *     Robert Bosch GmbH - initial API and implementation
- */
-
-package org.eclipse.app4mc.slg.linux.generators;
-
-import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-
-public class LinuxTicksUtilsTranslationUnit extends LinuxSyntheticTranslationUnit {
-	public static String getModulePathStatic() {
-		return getBasePathStatic() + "/" + getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getModulePathStatic() + "/" + getMakeFileName();
-	}
-
-	public static String getModuleNameStatic() {
-		return "ticksUtils";
-	}
-
-	public static String getLibName() {
-		return "TICKS_UTILS";
-	}
-
-	@Override
-	public String getModuleName() {
-		return getModuleNameStatic();
-	}
-
-	public CharSequence getExecCall(final String params) {
-		return "burnTicks(" + params + ")";
-	}
-
-	/**
-	 * '''executeTicks_«valueClass.toString.split("\\.").last»(«params»)'''
-	 */
-	@Override
-	public String getIncFile() {
-		return this.getModuleName() + ".h";
-	}
-
-	private final ConfigModel configModel;
-	private final Object valueClass;
-
-	public LinuxTicksUtilsTranslationUnit(final OutputBuffer outputBuffer, final ConfigModel configModel,
-			final Object valueClass) {
-		super(outputBuffer);
-		this.configModel = configModel;
-		this.valueClass = valueClass;
-
-		this.genFiles();
-	}
-
-	public void genFiles() {
-		if (isIncFileEmpty()) {
-			toH();
-		}
-		if (isSrcFileEmpty()) {
-			toCPP();
-		}
-		srcAppend(LinuxTicksUtilsGenerator.generateTicks(valueClass));
-		incAppend(LinuxTicksUtilsGenerator.generateTicksDecleration(valueClass));
-	}
-
-	private void toCPP() {
-		srcAppend("#include \"" + this.getIncFile() + "\"\n");
-		final String ticksCodeSnippet = this.configModel.getCustomTickImpl().getValue();
-
-		final String burnTicksBody = this.configModel.getCustomTickImpl().isEnable() ? ticksCodeSnippet : LinuxTicksUtilsGenerator.burnTicksDefault();
-
-		srcAppend(LinuxTicksUtilsGenerator.burnTicks(burnTicksBody));
-		srcAppend(LinuxTicksUtilsGenerator.burnTicksStatistics(this.configModel));
-
-	}
-
-	private void toH() {
-
-		incAppend(LinuxTicksUtilsGenerator.burnTicksDecleration());
-		incAppend(LinuxTicksUtilsGenerator.burnTicksStatisticsDecleration());
-	}
-
-}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java
index 3253d50..232b9ab 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxModel2TextTransformer.java
@@ -55,19 +55,19 @@
 	public void transform(final Amalthea model, final String outputFolder) {
 
 		final boolean experimentalCodeSnippetMatching = Boolean
-				.parseBoolean(this.properties.getProperty("experimentalCodeSnippetMatching"));
+				.parseBoolean(properties.getProperty("experimentalCodeSnippetMatching"));
 		final boolean enableInstrumentation = Boolean
-				.parseBoolean(this.properties.getProperty("enableInstrumentation"));
+				.parseBoolean(properties.getProperty("enableInstrumentation"));
 
 		final StimuliModel stimuliModel = ModelUtil.getOrCreateStimuliModel(model);
 		final SWModel swModel = ModelUtil.getOrCreateSwModel(model);
 
 		LOG.info("Starting Linux SLG code generation");
 
-		this.outputBuffer.initialize(properties.getProperty("m2t_output_folder"));
-		this.outputBuffer.configureFiletype("C", ".c", "// This code is auto-generated\n\n", null);
-		this.outputBuffer.configureFiletype("H", ".h", "// This code is auto-generated\n\n#pragma once\n\n", null);
-		this.outputBuffer.configureFiletype("OTHER", "", "", "");
+		outputBuffer.initialize(properties.getProperty("m2t_output_folder"));
+		outputBuffer.configureFiletype("C", ".c", "// This code is auto-generated\n\n", null);
+		outputBuffer.configureFiletype("H", ".h", "// This code is auto-generated\n\n#pragma once\n\n", null);
+		outputBuffer.configureFiletype("OTHER", "", "", "");
 
 		if (experimentalCodeSnippetMatching) {
 			realisticCodeBasedOnCodeSnippet.transform();
@@ -96,19 +96,19 @@
 		// ensure that the following files will be created
 
 		if (experimentalCodeSnippetMatching) {
-			this.outputBuffer.appendTo("C", "synthetic_gen/ticksUtils/_src/ticksUtils", "");
-			this.outputBuffer.appendTo("H", "synthetic_gen/ticksUtils/_inc/ticksUtils", "");
-			this.outputBuffer.appendTo("C", "synthetic_gen/labels/_src/labels", "");
-			this.outputBuffer.appendTo("H", "synthetic_gen/labels/_inc/labels", "");
+			outputBuffer.appendTo("C", "synthetic_gen/ticksUtils/_src/ticksUtils", "");
+			outputBuffer.appendTo("H", "synthetic_gen/ticksUtils/_inc/ticksUtils", "");
+			outputBuffer.appendTo("C", "synthetic_gen/labels/_src/labels", "");
+			outputBuffer.appendTo("H", "synthetic_gen/labels/_inc/labels", "");
 		} else {
-			this.outputBuffer.appendTo("C", "synthetic_gen/codesnippets/_src/codesnippets", "");
-			this.outputBuffer.appendTo("H", "synthetic_gen/codesnippets/_inc/codesnippets", "");
+			outputBuffer.appendTo("C", "synthetic_gen/codesnippets/_src/codesnippets", "");
+			outputBuffer.appendTo("H", "synthetic_gen/codesnippets/_inc/codesnippets", "");
 		}
 
-		this.outputBuffer.appendTo("C", "synthetic_gen/runnables/_src/runnables", "");
-		this.outputBuffer.appendTo("H", "synthetic_gen/runnables/_inc/runnables", "");
+		outputBuffer.appendTo("C", "synthetic_gen/runnables/_src/runnables", "");
+		outputBuffer.appendTo("H", "synthetic_gen/runnables/_inc/runnables", "");
 
-		this.outputBuffer.finish();
+		outputBuffer.finish();
 
 		LOG.info("Finished Linux SLG code generation");
 	}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java
index 6889d03..38e7433 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/LinuxTranslationUnit.java
@@ -59,14 +59,15 @@
 
 	// derived attributes
 
-	public String getIncModulePath() { return basePath + INC_FOLDER + moduleName; }
-	public String getSrcModulePath() { return basePath + SRC_FOLDER + moduleName; }
+	private String getModulePath() { return basePath + "/" + moduleName; }
+
+	public String getIncModulePath() { return getModulePath() + INC_FOLDER + moduleName; }
+	public String getSrcModulePath() { return getModulePath() + SRC_FOLDER + moduleName; }
 
 	public String getSrcFile() { return moduleName + SRC_EXT; }
 	public String getIncFile() { return moduleName + INC_EXT; }
 
-	public String getSrcPath() { return basePath + SRC_FOLDER + getSrcFile(); }
-	public String getIncPath() { return basePath + INC_FOLDER + getIncFile(); }
-
+	public String getSrcPath() { return getModulePath() + SRC_FOLDER + getSrcFile(); }
+	public String getIncPath() { return getModulePath() + INC_FOLDER + getIncFile(); }
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java
index ad149f6..1094d36 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/stimuli/LinuxStimulusTransformer.java
@@ -14,15 +14,17 @@
 package org.eclipse.app4mc.slg.linux.transformers.stimuli;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.Properties;
 
+import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
 import org.eclipse.app4mc.amalthea.model.Stimulus;
-import org.eclipse.app4mc.slg.linux.generators.LinuxStimulusTranslationUnit;
+import org.eclipse.app4mc.slg.linux.generators.LinuxStimulusGenerator;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -30,29 +32,66 @@
 @Singleton
 public class LinuxStimulusTransformer extends LinuxBaseTransformer {
 
-	@Inject private OutputBuffer outputBuffer;
 	@Inject private Properties properties;
 
-	public LinuxStimulusTranslationUnit transform(final List<Stimulus> stimuli) {
-		final ArrayList<?> key = CollectionLiterals.newArrayList(stimuli);
-		final LinuxStimulusTranslationUnit _result;
-		synchronized (_createCache_transform) {
-			if (_createCache_transform.containsKey(key)) {
-				return _createCache_transform.get(key);
-			}
-			LinuxStimulusTranslationUnit _linuxStimulusTranslationUnit = new LinuxStimulusTranslationUnit(
-					this.outputBuffer, this.properties, stimuli);
-			_result = _linuxStimulusTranslationUnit;
-			_createCache_transform.put(key, _result);
-		}
-		_init_transform(_result, stimuli);
-		return _result;
+	// ---------- generic part "def create new transform(...)" ----------
+
+	private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+	public Map<List<Object>, LinuxTranslationUnit> getCache() {
+		return this.transformCache;
 	}
 
-	private final HashMap<ArrayList<?>, LinuxStimulusTranslationUnit> _createCache_transform = CollectionLiterals
-			.newHashMap();
+	public LinuxTranslationUnit transform(final List<Stimulus> stimuli) {
+		final List<Object> key = new ArrayList<>(Arrays.asList(stimuli));
+		final LinuxTranslationUnit tu;
 
-	private void _init_transform(final LinuxStimulusTranslationUnit it, final List<Stimulus> stimuli) {
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
+			}
+			tu = createTranslationUnit(stimuli);
+			transformCache.put(key, tu);
+		}
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform(tu, stimuli);
+		}
+
+		return tu;
+	}
+
+	// ---------------------------------------------------
+
+	private LinuxTranslationUnit createTranslationUnit(final List<Stimulus> stimuli) {
+		if ((stimuli == null || stimuli.isEmpty())) {
+			return new LinuxTranslationUnit("UNSPECIFIED STIMULI");
+		} else {
+			String basePath = "Executable";
+			String moduleName = "main";
+			String call = "trigger<Stimuli>"; // unused
+			return new LinuxTranslationUnit(basePath, moduleName, call);
+		}
+	}
+
+	private void doTransform(final LinuxTranslationUnit tu, final List<Stimulus> stimuli) {
+		List<Stimulus> filteredStimuli = new ArrayList<>();
+
+		for (Stimulus stimulus : stimuli) {
+			if ((stimulus instanceof PeriodicStimulus)) {
+				filteredStimuli.add(stimulus);
+			}
+		}
+
+		genFiles(tu, filteredStimuli);
+	}
+
+	private void genFiles(LinuxTranslationUnit tu, final List<Stimulus> stimuli) {
+		Stimulus lastStimulus = stimuli.get(stimuli.size() - 1);
+		boolean enableInstrumentation = Boolean.parseBoolean(properties.getProperty("enableInstrumentation"));
+
+		srcAppend(tu, LinuxStimulusGenerator.toSrc(stimuli, lastStimulus, enableInstrumentation));
 	}
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java
index 9a05b53..9806951 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxActivityGraphItemTransformer.java
@@ -30,17 +30,17 @@
 	@Inject private LinuxLabelAccessTransformer linuxLabelAccessTransformer;
 	@Inject private LinuxTicksTransformer linuxTicksTransformer;
 
-	public LinuxTranslationUnit transform(final ActivityGraphItem labelAccess) {
-		if (labelAccess instanceof LabelAccess) {
-			return this.linuxLabelAccessTransformer.transform((LabelAccess) labelAccess);
-		} else if (labelAccess instanceof Ticks) {
-			return this.linuxTicksTransformer.transform((Ticks) labelAccess);
-		} else if (labelAccess != null) {
-			String warning = "/*[feature " + labelAccess.eClass().getName() + " in not supported]";
+	public LinuxTranslationUnit transform(final ActivityGraphItem graphItem) {
+		if (graphItem instanceof LabelAccess) {
+			return linuxLabelAccessTransformer.transform((LabelAccess) graphItem);
+		} else if (graphItem instanceof Ticks) {
+			return linuxTicksTransformer.transform((Ticks) graphItem);
+		} else if (graphItem != null) {
+			String warning = "/*[feature " + graphItem.eClass().getName() + " in not supported]";
 			return new LinuxTranslationUnit(warning);
 		} else {
 			throw new IllegalArgumentException(
-					"Unhandled parameter types: " + Arrays.<Object>asList(labelAccess).toString());
+					"Unhandled parameter types: " + Arrays.<Object>asList(graphItem).toString());
 		}
 	}
 
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java
index 477d0ff..9426ffa 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelAccessTransformer.java
@@ -21,7 +21,6 @@
 import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
 import org.eclipse.app4mc.amalthea.model.NumericStatistic;
 import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
-import org.eclipse.app4mc.slg.linux.generators.LinuxLabelTranslationUnit;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
@@ -32,23 +31,23 @@
 	@Inject private LinuxLabelTransformer labelTransformer;
 
 	public LinuxTranslationUnit transform(final LabelAccess labelAccess) {
-		final LinuxLabelTranslationUnit labelTU = this.labelTransformer.transform(labelAccess.getData());
+		final LinuxTranslationUnit labelTU = labelTransformer.transform(labelAccess.getData());
 
 		return createTranslationUnit(labelAccess, labelTU);
 	}
 
-	private LinuxTranslationUnit createTranslationUnit(final LabelAccess labelAccess, final LinuxLabelTranslationUnit labelTU) {
+	private LinuxTranslationUnit createTranslationUnit(final LabelAccess labelAccess, final LinuxTranslationUnit labelTU) {
 		if ((labelTU == null)) {
 			return new LinuxTranslationUnit("UNSPECIFIED LABEL ACCESS");
 		}
 
 		String basePath = labelTU.getBasePath();
 		String moduleName = labelTU.getModuleName();
-		String call = computeCall(labelAccess, labelTU);
+		String call = computeCall(labelAccess);
 		return new LinuxTranslationUnit(basePath, moduleName, call);
 	}
 
-	private String computeCall(final LabelAccess labelAccess, final LinuxLabelTranslationUnit labelTU) {
+	private String computeCall(final LabelAccess labelAccess) {
 
 		if (labelAccess == null
 				|| labelAccess.getData() == null
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java
index 9bae033..e77024f 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxLabelTransformer.java
@@ -14,42 +14,74 @@
 package org.eclipse.app4mc.slg.linux.transformers.sw;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.eclipse.app4mc.amalthea.model.Label;
-import org.eclipse.app4mc.slg.linux.generators.LinuxLabelTranslationUnit;
+import org.eclipse.app4mc.slg.linux.generators.LinuxLabelGenerator;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
-import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
 @Singleton
 public class LinuxLabelTransformer extends LinuxBaseTransformer {
 
-	@Inject private OutputBuffer outputBuffer;
+	// ---------- generic part "def create new transform(...)" ----------
 
-	public LinuxLabelTranslationUnit transform(final Label label) {
-		final ArrayList<?> key = CollectionLiterals.newArrayList(label);
-		final LinuxLabelTranslationUnit _result;
-		synchronized (_createCache_transform) {
-			if (_createCache_transform.containsKey(key)) {
-				return _createCache_transform.get(key);
-			}
-			LinuxLabelTranslationUnit _linuxLabelTranslationUnit = new LinuxLabelTranslationUnit(this.outputBuffer,
-					label);
-			_result = _linuxLabelTranslationUnit;
-			_createCache_transform.put(key, _result);
-		}
-		_init_transform(_result, label);
-		return _result;
+	private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+	public Map<List<Object>, LinuxTranslationUnit> getCache() {
+		return this.transformCache;
 	}
 
-	private final HashMap<ArrayList<?>, LinuxLabelTranslationUnit> _createCache_transform = CollectionLiterals
-			.newHashMap();
+	public LinuxTranslationUnit transform(final Label label) {
+		final List<Object> key = new ArrayList<>(Arrays.asList(label));
+		final LinuxTranslationUnit tu;
 
-	private void _init_transform(final LinuxLabelTranslationUnit it, final Label label) {
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
+			}
+			tu = createTranslationUnit(label);
+			transformCache.put(key, tu);
+		}
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform(tu, label);
+		}
+
+		return tu;
+	}
+
+	// ---------------------------------------------------
+
+	private LinuxTranslationUnit createTranslationUnit(final Label label) {
+		if ((label == null)) {
+			return new LinuxTranslationUnit("UNSPECIFIED LABEL");
+		} else {
+			String basePath = "synthetic_gen";
+			String moduleName = "labels";
+			String call = "burnTicks(<params>)"; // unused
+			return new LinuxTranslationUnit(basePath, moduleName, call);
+		}
+	}
+
+	private void doTransform(final LinuxTranslationUnit tu, final Label label) {
+		genFiles(tu, label);
+	}
+
+	private void genFiles(LinuxTranslationUnit tu, Label label) {
+		if (isSrcFileEmpty(tu)) {
+			srcAppend(tu, "#include \"" + tu.getIncFile() + "\"\n");
+			srcAppend(tu, "#include <stdbool.h>\n\n");
+		}
+
+		incAppend(tu, LinuxLabelGenerator.toH(label));
+		srcAppend(tu, LinuxLabelGenerator.toCpp(label));
 	}
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java
index dcb3bc9..0319096 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRealisticCodeTransformer.java
@@ -14,45 +14,58 @@
 package org.eclipse.app4mc.slg.linux.transformers.sw;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
-import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore;
-import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.slg.linux.generators.LinuxRealisiticSyntheticTranslationUnit;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
-import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
 @Singleton
 public class LinuxRealisticCodeTransformer extends LinuxBaseTransformer {
 
-	@Inject private OutputBuffer outputBuffer;
-	@Inject private CustomObjectsStore customObjsStore;
+	// ---------- generic part "def create new transform(...)" ----------
 
-	public LinuxRealisiticSyntheticTranslationUnit transform() {
-		final ArrayList<?> key = CollectionLiterals.newArrayList();
-		final LinuxRealisiticSyntheticTranslationUnit _result;
-		synchronized (_createCache_transform) {
-			if (_createCache_transform.containsKey(key)) {
-				return _createCache_transform.get(key);
-			}
-			ConfigModel _instance = this.customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
-			LinuxRealisiticSyntheticTranslationUnit _linuxRealisiticSyntheticTranslationUnit = new LinuxRealisiticSyntheticTranslationUnit(
-					this.outputBuffer, _instance);
-			_result = _linuxRealisiticSyntheticTranslationUnit;
-			_createCache_transform.put(key, _result);
-		}
-		_init_transform(_result);
-		return _result;
+	private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+	public Map<List<Object>, LinuxTranslationUnit> getCache() {
+		return this.transformCache;
 	}
 
-	private final HashMap<ArrayList<?>, LinuxRealisiticSyntheticTranslationUnit> _createCache_transform = CollectionLiterals
-			.newHashMap();
+	public LinuxTranslationUnit transform() {
+		final List<Object> key = new ArrayList<>(Arrays.asList());
+		final LinuxTranslationUnit tu;
 
-	private void _init_transform(final LinuxRealisiticSyntheticTranslationUnit it) {
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
+			}
+			tu = createTranslationUnit();
+			transformCache.put(key, tu);
+		}
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform();
+		}
+
+		return tu;
+	}
+
+	// ---------------------------------------------------
+
+	private LinuxTranslationUnit createTranslationUnit() {
+		String basePath = "synthetic_gen";
+		String moduleName = "codesnippets";
+		String call = "<realistic code>"; // unused
+		return new LinuxTranslationUnit(basePath, moduleName, call);
+	}
+
+	private void doTransform() {
+		// nothing to generate
 	}
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
index 9d56cb5..9ebd5bf 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxRunnableTransformer.java
@@ -14,13 +14,27 @@
 package org.eclipse.app4mc.slg.linux.transformers.sw;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
-import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableTranslationUnit;
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.LabelAccess;
+import org.eclipse.app4mc.amalthea.model.LabelAccessEnum;
+import org.eclipse.app4mc.amalthea.model.LabelAccessStatistic;
+import org.eclipse.app4mc.amalthea.model.MinAvgMaxStatistic;
+import org.eclipse.app4mc.amalthea.model.NumericStatistic;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.SingleValueStatistic;
+import org.eclipse.app4mc.amalthea.model.Ticks;
+import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableGenerator;
+import org.eclipse.app4mc.slg.linux.generators.LinuxRunnableGenerator.Calculation;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -28,31 +42,120 @@
 @Singleton
 public class LinuxRunnableTransformer extends LinuxBaseTransformer {
 
-	@Inject private LinuxActivityGraphItemTransformer linuxCallGraphItemTransformer;
-	@Inject private OutputBuffer outputBuffer;
 	@Inject private Properties properties;
 
-	public LinuxRunnableTranslationUnit transform(final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
-		final ArrayList<?> key = CollectionLiterals.newArrayList(runnable);
-		final LinuxRunnableTranslationUnit _result;
-		synchronized (_createCache_transform) {
-			if (_createCache_transform.containsKey(key)) {
-				return _createCache_transform.get(key);
-			}
-			LinuxRunnableTranslationUnit _linuxRunnableTranslationUnit = new LinuxRunnableTranslationUnit(
-					this.outputBuffer, this.linuxCallGraphItemTransformer, runnable, this.properties);
-			_result = _linuxRunnableTranslationUnit;
-			_createCache_transform.put(key, _result);
-		}
-		_init_transform(_result, runnable);
-		return _result;
+	// ---------- generic part "def create new transform(...)" ----------
+
+	private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+	public Map<List<Object>, LinuxTranslationUnit> getCache() {
+		return this.transformCache;
 	}
 
-	private final HashMap<ArrayList<?>, LinuxRunnableTranslationUnit> _createCache_transform = CollectionLiterals
-			.newHashMap();
+	public LinuxTranslationUnit transform(final Runnable runnable) {
+		final List<Object> key = new ArrayList<>(Arrays.asList(runnable));
+		final LinuxTranslationUnit tu;
 
-	private void _init_transform(final LinuxRunnableTranslationUnit it,
-			final org.eclipse.app4mc.amalthea.model.Runnable runnable) {
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
+			}
+			tu = createTranslationUnit(runnable);
+			transformCache.put(key, tu);
+		}
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform(tu, runnable);
+		}
+
+		return tu;
+	}
+
+	// ---------------------------------------------------
+
+	private LinuxTranslationUnit createTranslationUnit(final Runnable runnable) {
+		if ((runnable == null)) {
+			return new LinuxTranslationUnit("UNSPECIFIED RUNNABLE");
+		} else {
+			String basePath = "synthetic_gen";
+			String moduleName = "runnables";
+			String call = runnable.getName() + "()";
+			return new LinuxTranslationUnit(basePath, moduleName, call);
+		}
+	}
+
+	private void doTransform(final LinuxTranslationUnit tu, final Runnable runnable) {
+		genFiles(tu, runnable);
+	}
+
+	private void genFiles(LinuxTranslationUnit tu, final Runnable runnable) {
+		if (isIncFileEmpty(tu)) {
+			incAppend(tu, LinuxRunnableGenerator.snippetIncStart());
+		}
+		if (isSrcFileEmpty(tu)) {
+			srcAppend(tu, LinuxRunnableGenerator.snippetSrcStart());
+		}
+
+		// write header
+		incAppend(tu, "\n//Runnable " + runnable.getName() + "----\n");
+		incAppend(tu, "void " + runnable.getName() + "(char* coreName);\n");
+
+		Calculation calc = new Calculation();
+		calc.ticksSumMap.put("default", Integer.valueOf(0));
+
+		if (runnable != null && runnable.getActivityGraph() != null) {
+			for (ActivityGraphItem item : runnable.getActivityGraph().getItems()) {
+				if (item instanceof Ticks) {
+					Ticks ticks = (Ticks) item;
+					if (ticks.getDefault() != null && ticks.getDefault().getAverage() != null) {
+						calc.ticksSum += ticks.getDefault().getAverage().intValue();
+						calc.ticksSumMap.put("default", calc.ticksSum);
+					}
+
+					Set<ProcessingUnitDefinition> puDefinitions = ticks.getExtended().keySet();
+					for (ProcessingUnitDefinition puDef : puDefinitions) {
+						if (puDef != null) {
+							String puDefName = puDef.getName();
+							if (!calc.ticksSumMap.containsKey(puDefName)) {
+								calc.ticksSumMap.put(puDefName, 0);
+							}
+							calc.ticksSumMap.put(puDefName, calc.ticksSumMap.get(puDefName)
+									+ ticks.getExtended().get(puDef).getAverage().intValue());
+						}
+					}
+				} else if (item instanceof LabelAccess) {
+					LabelAccess la = (LabelAccess) item;
+					Float value = Float
+							.parseFloat(properties.getOrDefault("labelAccessStatisticValueDefault", "1.0F").toString());
+
+					LabelAccessStatistic labelStatistic = la.getStatistic();
+					if (labelStatistic != null) {
+						NumericStatistic labelStatisticValue = labelStatistic.getValue();
+
+						if (labelStatisticValue instanceof SingleValueStatistic) {
+							value = ((SingleValueStatistic) labelStatisticValue).getValue();
+						} else if (labelStatisticValue instanceof MinAvgMaxStatistic) {
+							// TODO: provide a configuration option, to select appropriate value
+							// from labelStatistic (min/max/avg)
+							// right now considering the average value
+							value = ((MinAvgMaxStatistic) labelStatisticValue).getAvg();
+						}
+					}
+
+					if (la.getAccess() == LabelAccessEnum.READ) {
+						calc.readsSum += value.intValue();
+					} else if (la.getAccess() == LabelAccessEnum.WRITE) {
+						calc.writesSum += value.intValue();
+					}
+				}
+			}
+		}
+
+		boolean useExperimental = Boolean.parseBoolean(properties.getProperty("experimentalCodeSnippetMatching"));
+
+		String codeString = LinuxRunnableGenerator.syntheticLoad(useExperimental);
+		srcAppend(tu, LinuxRunnableGenerator.snippetSrcBody(runnable, codeString));
 	}
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
index 809f633..9ee84d2 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTaskTransformer.java
@@ -14,41 +14,131 @@
 package org.eclipse.app4mc.slg.linux.transformers.sw;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 
+import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
+import org.eclipse.app4mc.amalthea.model.Amalthea;
+import org.eclipse.app4mc.amalthea.model.AmaltheaServices;
+import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
+import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
+import org.eclipse.app4mc.amalthea.model.Process;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnit;
+import org.eclipse.app4mc.amalthea.model.ProcessingUnitDefinition;
+import org.eclipse.app4mc.amalthea.model.Runnable;
+import org.eclipse.app4mc.amalthea.model.RunnableCall;
 import org.eclipse.app4mc.amalthea.model.Task;
-import org.eclipse.app4mc.slg.linux.generators.LinuxTaskTranslationUnit;
+import org.eclipse.app4mc.amalthea.model.util.DeploymentUtil;
+import org.eclipse.app4mc.slg.linux.generators.LinuxTaskGenerator;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
-import com.google.inject.Inject;
 import com.google.inject.Singleton;
 
 @Singleton
 public class LinuxTaskTransformer extends LinuxBaseTransformer {
 
-	@Inject private OutputBuffer outputBuffer;
+	// ---------- generic part "def create new transform(...)" ----------
 
-	public LinuxTaskTranslationUnit transform(final Task task) {
-		final ArrayList<?> key = CollectionLiterals.newArrayList(task);
-		final LinuxTaskTranslationUnit _result;
-		synchronized (_createCache_transform) {
-			if (_createCache_transform.containsKey(key)) {
-				return _createCache_transform.get(key);
-			}
-			LinuxTaskTranslationUnit _linuxTaskTranslationUnit = new LinuxTaskTranslationUnit(this.outputBuffer, task);
-			_result = _linuxTaskTranslationUnit;
-			_createCache_transform.put(key, _result);
-		}
-		_init_transform(_result, task);
-		return _result;
+	private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+	public Map<List<Object>, LinuxTranslationUnit> getCache() {
+		return this.transformCache;
 	}
 
-	private final HashMap<ArrayList<?>, LinuxTaskTranslationUnit> _createCache_transform = CollectionLiterals
-			.newHashMap();
+	public LinuxTranslationUnit transform(final Task task) {
+		final List<Object> key = new ArrayList<>(Arrays.asList(task));
+		final LinuxTranslationUnit tu;
 
-	private void _init_transform(final LinuxTaskTranslationUnit it, final Task task) {
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
+			}
+			tu = createTranslationUnit(task);
+			transformCache.put(key, tu);
+		}
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform(tu, task);
+		}
+
+		return tu;
+	}
+
+	// ---------------------------------------------------
+
+	private LinuxTranslationUnit createTranslationUnit(final Task task) {
+		if ((task == null)) {
+			return new LinuxTranslationUnit("UNSPECIFIED TASK");
+		} else {
+			String basePath = "synthetic_gen";
+			String moduleName = "tasks";
+			String call = task.getName() + "()";
+			return new LinuxTranslationUnit(basePath, moduleName, call);
+		}
+	}
+
+	private void doTransform(final LinuxTranslationUnit tu, final Task task) {
+		genFiles(tu, task);
+	}
+
+	private void genFiles(LinuxTranslationUnit tu, final Task task) {
+		final Amalthea root = AmaltheaServices.getContainerOfType(task, Amalthea.class);
+		final Set<ProcessingUnit> assignedCores = DeploymentUtil.getAssignedCoreForProcess(task, root);
+
+		final StringBuilder puDefinition = new StringBuilder("default");
+
+		if (assignedCores != null && !assignedCores.isEmpty()) {
+			puDefinition.delete(0, puDefinition.length());
+
+			ProcessingUnit pu = assignedCores.iterator().next();
+			ProcessingUnitDefinition puDef = pu.getDefinition();
+			String puDefName = (puDef == null) ? null : puDef.getName();
+
+			puDefinition.append(puDefName);
+		}
+
+		final List<String> statements = new ArrayList<>();
+		final List<Process> processedTasks = new ArrayList<>();
+
+		if (task != null && task.getActivityGraph() != null) {
+			for (ActivityGraphItem item : task.getActivityGraph().getItems()) {
+
+				if (item instanceof Group) {
+					for (ActivityGraphItem item2 : ((Group) item).getItems()) {
+						if ((item2 instanceof RunnableCall)) {
+							final Runnable runnable = ((RunnableCall) item2).getRunnable();
+							statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
+						} else if ((item2 instanceof InterProcessTrigger)) {
+							InterProcessStimulus stimulus = ((InterProcessTrigger) item2).getStimulus();
+							LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
+						}
+					}
+				} else if (item instanceof RunnableCall) {
+					final Runnable runnable = ((RunnableCall) item).getRunnable();
+					if ((runnable != null)) {
+						statements.add("run_" + runnable.getName() + "(\"" + puDefinition.toString() + "\");");
+					}
+				} else if (item instanceof InterProcessTrigger) {
+					InterProcessStimulus stimulus = ((InterProcessTrigger) item).getStimulus();
+					LinuxTaskGenerator.handleInterProcessTrigger(statements, processedTasks, stimulus);
+				}
+			}
+		}
+
+		if (isIncFileEmpty(tu)) {
+			incAppend(tu, LinuxTaskGenerator.snippetIncStart());
+		}
+		if (isSrcFileEmpty(tu)) {
+			srcAppend(tu, LinuxTaskGenerator.snippetSrcStart());
+		}
+		srcAppend(tu, LinuxTaskGenerator.toCpp(task, statements));
+		incAppend(tu, LinuxTaskGenerator.toH(task));
 	}
 
 }
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
index 701ed09..651c92c 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksTransformer.java
@@ -16,7 +16,6 @@
 import org.eclipse.app4mc.amalthea.model.Ticks;
 import org.eclipse.app4mc.slg.commons.m2t.AbstractSLGTransformer;
 import org.eclipse.app4mc.slg.linux.generators.LinuxTicksGenerator;
-import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsTranslationUnit;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
 import com.google.inject.Inject;
@@ -29,7 +28,7 @@
 
 	public LinuxTranslationUnit transform(final Ticks ticks) {
 		if ((ticks.getDefault() != null)) {
-			final LinuxTicksUtilsTranslationUnit ticksUtilsTU = ticksUtilsTransformer.transform(ticks.getDefault());
+			final LinuxTranslationUnit ticksUtilsTU = ticksUtilsTransformer.transform(ticks.getDefault());
 
 			return createTranslationUnit(ticks, ticksUtilsTU);
 		}
@@ -37,7 +36,7 @@
 		return null;
 	}
 
-	private LinuxTranslationUnit createTranslationUnit(Ticks ticks, LinuxTicksUtilsTranslationUnit ticksUtilsTU) {
+	private LinuxTranslationUnit createTranslationUnit(Ticks ticks, LinuxTranslationUnit ticksUtilsTU) {
 		if ((ticksUtilsTU == null)) {
 			return new LinuxTranslationUnit("UNSPECIFIED TICKS");			
 		}
diff --git a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java
index 4b030cc..8c40ced 100644
--- a/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java
+++ b/load_generator/linux/plugins/org.eclipse.app4mc.slg.linux/src/org/eclipse/app4mc/slg/linux/transformers/sw/LinuxTicksUtilsTransformer.java
@@ -14,15 +14,17 @@
 package org.eclipse.app4mc.slg.linux.transformers.sw;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
 
 import org.eclipse.app4mc.amalthea.model.IDiscreteValueDeviation;
 import org.eclipse.app4mc.slg.commons.m2t.CustomObjectsStore;
 import org.eclipse.app4mc.slg.config.ConfigModel;
-import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsTranslationUnit;
+import org.eclipse.app4mc.slg.linux.generators.LinuxTicksUtilsGenerator;
 import org.eclipse.app4mc.slg.linux.transformers.LinuxBaseTransformer;
-import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtext.xbase.lib.CollectionLiterals;
+import org.eclipse.app4mc.slg.linux.transformers.LinuxTranslationUnit;
 
 import com.google.inject.Inject;
 import com.google.inject.Singleton;
@@ -30,33 +32,84 @@
 @Singleton
 public class LinuxTicksUtilsTransformer extends LinuxBaseTransformer {
 
-	@Inject private OutputBuffer outputBuffer;
 	@Inject private CustomObjectsStore customObjsStore;
 
-	public LinuxTicksUtilsTranslationUnit transform(final IDiscreteValueDeviation value) {
-		return this.generateIntern(value.getClass());
+	public LinuxTranslationUnit transform(final IDiscreteValueDeviation value) {
+		return transformClass(value.getClass());  // hash according to class not instance
 	}
 
-	public LinuxTicksUtilsTranslationUnit generateIntern(final Object valueClass) {
-		final ArrayList<?> key = CollectionLiterals.newArrayList(valueClass);
-		final LinuxTicksUtilsTranslationUnit _result;
-		synchronized (_createCache_generateIntern) {
-			if (_createCache_generateIntern.containsKey(key)) {
-				return _createCache_generateIntern.get(key);
+	// ---------- generic part "def create new transform(...)" ----------
+
+	private final Map<List<Object>, LinuxTranslationUnit> transformCache = new HashMap<>();
+
+	public Map<List<Object>, LinuxTranslationUnit> getCache() {
+		return this.transformCache;
+	}
+
+	public LinuxTranslationUnit transformClass(final Class<? extends IDiscreteValueDeviation> devClass) {
+		final List<Object> key = new ArrayList<>(Arrays.asList(devClass));
+		final LinuxTranslationUnit tu;
+
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
 			}
-			ConfigModel _instance = this.customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
-			LinuxTicksUtilsTranslationUnit tu = new LinuxTicksUtilsTranslationUnit(
-					this.outputBuffer, _instance, valueClass);
-			_result = tu;
-			_createCache_generateIntern.put(key, _result);
+			tu = createTranslationUnit(devClass);
+			transformCache.put(key, tu);
 		}
-		_init_generateIntern(_result, valueClass);
-		return _result;
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform(tu, devClass);
+		}
+
+		return tu;
 	}
 
-	private final HashMap<ArrayList<?>, LinuxTicksUtilsTranslationUnit> _createCache_generateIntern = CollectionLiterals
-			.newHashMap();
+	// ---------------------------------------------------
 
-	private void _init_generateIntern(final LinuxTicksUtilsTranslationUnit it, final Object valueClass) {
+	private LinuxTranslationUnit createTranslationUnit(final Class<? extends IDiscreteValueDeviation> devClass) {
+		if ((devClass == null)) {
+			return new LinuxTranslationUnit("UNSPECIFIED TICKS");
+		} else {
+			String basePath = "synthetic_gen";
+			String moduleName = "ticksUtils";
+			String call = "burnTicks(<params>)"; // unused
+			return new LinuxTranslationUnit(basePath, moduleName, call);
+		}
 	}
+
+	private void doTransform(final LinuxTranslationUnit tu, final Class<? extends IDiscreteValueDeviation> devClass) {
+		genFiles(tu, devClass);
+	}
+
+	public void genFiles(LinuxTranslationUnit tu, final Class<? extends IDiscreteValueDeviation> devClass) {
+		if (isIncFileEmpty(tu)) {
+			toH(tu);
+		}
+		if (isSrcFileEmpty(tu)) {
+			toCPP(tu);
+		}
+		srcAppend(tu, LinuxTicksUtilsGenerator.generateTicks(devClass));
+		incAppend(tu, LinuxTicksUtilsGenerator.generateTicksDecleration(devClass));
+	}
+
+	private void toCPP(LinuxTranslationUnit tu) {
+		srcAppend(tu, "#include \"" + tu.getIncFile() + "\"\n");
+
+		ConfigModel configModel = customObjsStore.<ConfigModel>getInstance(ConfigModel.class);
+
+		final String ticksCodeSnippet = configModel.getCustomTickImpl().getValue();
+		final String burnTicksBody = configModel.getCustomTickImpl().isEnable() ? ticksCodeSnippet : LinuxTicksUtilsGenerator.burnTicksDefault();
+
+		srcAppend(tu, LinuxTicksUtilsGenerator.burnTicks(burnTicksBody));
+		srcAppend(tu, LinuxTicksUtilsGenerator.burnTicksStatistics(configModel));
+
+	}
+
+	private void toH(LinuxTranslationUnit tu) {
+		incAppend(tu, LinuxTicksUtilsGenerator.burnTicksDecleration());
+		incAppend(tu, LinuxTicksUtilsGenerator.burnTicksStatisticsDecleration());
+	}
+
 }