Updated ROS translation units
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 9806951..0dc2cb1 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
@@ -15,8 +15,6 @@
 
 package org.eclipse.app4mc.slg.linux.transformers.sw;
 
-import java.util.Arrays;
-
 import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
 import org.eclipse.app4mc.amalthea.model.LabelAccess;
 import org.eclipse.app4mc.amalthea.model.Ticks;
@@ -31,17 +29,18 @@
 	@Inject private LinuxTicksTransformer linuxTicksTransformer;
 
 	public LinuxTranslationUnit transform(final ActivityGraphItem graphItem) {
+		if (graphItem == null) {
+			throw new IllegalArgumentException("Unhandled parameter type: null");
+		}
+		
 		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(graphItem).toString());
 		}
+		
+		String warning = "/*[feature " + graphItem.eClass().getName() + " in not supported]";
+		return new LinuxTranslationUnit(warning);
 	}
 
 }
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosAmlGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosAmlGenerator.xtend
index 05610b5..b54dcf1 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosAmlGenerator.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosAmlGenerator.xtend
@@ -15,6 +15,11 @@
 
 class RosAmlGenerator {
 
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
 	static def String toCpp() '''
 		#include "aml.h"
 		#include <mutex>
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendUtilsGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsGenerator.xtend
similarity index 79%
rename from load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendUtilsGenerator.xtend
rename to load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsGenerator.xtend
index aa1729e..e1a1a75 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosChannelSendUtilsGenerator.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsGenerator.xtend
@@ -11,18 +11,23 @@
  *     Robert Bosch GmbH - initial API and implementation
  */
 
-package org.eclipse.app4mc.slg.ros2.transformers
+package org.eclipse.app4mc.slg.ros2.generators
 
 import org.eclipse.app4mc.amalthea.model.ChannelSend
 
 class RosChannelSendUtilsGenerator {
 
-	static def toCPPHead() '''
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
+	static def String toCPPHead() '''
 		#include "channelSendUtils.h"
 		
 	'''
 
-	static def toCPP(ChannelSend cs) '''
+	static def String toCPP(ChannelSend cs) '''
 		
 		void publish_to_«cs.data.name»(rclcpp::Publisher<std_msgs::msg::String>::SharedPtr& publisher) {
 			
@@ -32,7 +37,7 @@
 		}
 	'''
 
-	static def toHeader() '''
+	static def String toHeader() '''
 		#include <string>
 		
 		#include "rclcpp/rclcpp.hpp"
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsTranslationUnit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsTranslationUnit.java
index c09cdbb..b81a9b3 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsTranslationUnit.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosChannelSendUtilsTranslationUnit.java
@@ -18,10 +18,14 @@
 
 import org.eclipse.app4mc.amalthea.model.ChannelSend;
 import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
-import org.eclipse.app4mc.slg.ros2.transformers.RosChannelSendUtilsGenerator;
 import org.eclipse.app4mc.transformation.util.OutputBuffer;
 
 public class RosChannelSendUtilsTranslationUnit extends TranslationUnit {
+	public static final String LIB_NAME = "CHANNELSEND_UTIL";
+	public static final String MODULE_NAME = "channelSendUtils";
+	public static final String MODULE_PATH = "synthetic_gen/" + MODULE_NAME;
+	public static final String MAKEFILE_PATH = MODULE_PATH + "/CMakeLists.txt";
+
 	private ChannelSend cs;
 	private OutputBuffer outputBuffer;
 
@@ -35,29 +39,13 @@
 
 	private static List<String> topic_list = new ArrayList<>();
 
-	public static String getModulePathStatic() {
-		return "synthetic_gen" + "/" + RosChannelSendUtilsTranslationUnit.getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return RosChannelSendUtilsTranslationUnit.getModulePathStatic() + "/" + "CMakeLists.txt";
-	}
-
-	public static String getModuleNameStatic() {
-		return "channelSendUtils";
-	}
-
-	public static String getLibName() {
-		return "CHANNELSEND_UTIL";
-	}
-
 	public String getModuleName() {
-		return getModuleNameStatic();
+		return MODULE_NAME;
 	}
 
 	@Override
 	public String getIncFile() {
-		return (getModuleName() + ".h");
+		return (MODULE_NAME + ".h");
 	}
 
 	public String getExecCall(final String param) {
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsGenerator.xtend
index 7c5a2a8..8b2d0ed 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsGenerator.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsGenerator.xtend
@@ -18,6 +18,11 @@
 
 class RosInterProcessTriggerUtilsGenerator {
 
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
 	static def String toCPPHead() '''
 		#include "interProcessTriggerUtils.h"
 		
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsTranslationUnit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsTranslationUnit.java
index 31e534d..3c127de 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsTranslationUnit.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosInterProcessTriggerUtilsTranslationUnit.java
@@ -15,11 +15,14 @@
 
 import org.eclipse.app4mc.amalthea.model.InterProcessTrigger;
 import org.eclipse.app4mc.slg.commons.m2t.generators.TranslationUnit;
-import org.eclipse.app4mc.slg.ros2.transformers.utils.Utils;
 import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.xtend2.lib.StringConcatenation;
 
 public class RosInterProcessTriggerUtilsTranslationUnit extends TranslationUnit {
+	public static final String LIB_NAME = "INTERPROCESSTRIGGER_UTIL";
+	public static final String MODULE_NAME = "interProcessTriggerUtils";
+	public static final String MODULE_PATH = "synthetic_gen/" + MODULE_NAME;
+	public static final String MAKEFILE_PATH = MODULE_PATH + "/CMakeLists.txt";
+
 	private InterProcessTrigger ip;
 	private OutputBuffer outputBuffer;
 
@@ -30,29 +33,13 @@
 		this.genFiles();
 	}
 
-	public static String getModulePathStatic() {
-		return "synthetic_gen" + "/" + getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getModulePathStatic() + "/" + "CMakeLists.txt";
-	}
-
-	public static String getModuleNameStatic() {
-		return "interProcessTriggerUtils";
-	}
-
-	public static String getLibName() {
-		return "INTERPROCESSTRIGGER_UTIL";
-	}
-
 	public String getModuleName() {
-		return getModuleNameStatic();
+		return MODULE_NAME;
 	}
 
 	@Override
 	public String getIncFile() {
-		return getModuleName() + ".h";
+		return MODULE_NAME + ".h";
 	}
 
 	public String getExecCall(final String param) {
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelGenerator.xtend
index d35f7d6..eaba3c2 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelGenerator.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelGenerator.xtend
@@ -15,6 +15,11 @@
 
 class RosLabelGenerator {
 
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
 	static def String toH(String name, String readCall, String writeCall) '''
 		typedef struct «name»_CacheLine
 		{
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelTranslationUnit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelTranslationUnit.java
index becce25..9813d5d 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelTranslationUnit.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosLabelTranslationUnit.java
@@ -18,36 +18,23 @@
 import org.eclipse.app4mc.transformation.util.OutputBuffer;
 
 public class RosLabelTranslationUnit extends LabelTranslationUnit {
+	public static final String MODULLIB_NAME = "LABELS_LIB";
+	public static final String MODULE_NAME = "labels";
+	public static final String MODULE_PATH = "synthetic_gen/" + MODULE_NAME;
+	public static final String MAKEFILE_PATH = MODULE_PATH + "/CMakeLists.txt";
+
 	public RosLabelTranslationUnit(final OutputBuffer outputBuffer, final Label label) {
 		super(outputBuffer, label);
 	}
 
-	// static helper functions (cannot be put to base class)
-	public static String getModulePathStatic() {
-		return "synthetic_gen" + "/" + getModuleNameStatic();
-	}
-
-	public static String getMakeFilePathStatic() {
-		return getModulePathStatic() + "/" + "CMakeLists.txt";
-	}
-
-	// translation unit specific settings
-	public static String getModuleNameStatic() {
-		return "labels";
-	}
-
-	public static String getLibName() {
-		return "LABELS_LIB";
-	}
-
 	@Override
 	public String getModuleName() {
-		return getModuleNameStatic();
+		return MODULE_NAME;
 	}
 
 	@Override
 	public String getIncFile() {
-		return getModuleName() + ".h";
+		return MODULE_NAME + ".h";
 	}
 
 	@Override
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosRunnableGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosRunnableGenerator.xtend
new file mode 100644
index 0000000..1173798
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosRunnableGenerator.xtend
@@ -0,0 +1,65 @@
+/**
+ * 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.ros2.generators
+
+import org.eclipse.app4mc.amalthea.model.Runnable
+import java.util.HashSet
+import java.util.List
+
+class RosRunnableGenerator {
+
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
+	static def String toH(String call, HashSet<String> includes) {
+		val builder = new StringBuilder()
+
+		includes.forEach [ include |
+			builder.append("#include \"" + include + "\"\n")
+		]
+		builder.append('''void «call»;
+		''')
+
+		builder.toString
+	}
+
+	static def String toCpp(Runnable runnable, HashSet<String> includes, String call, List<String> calls,
+		boolean measure_performance) {
+		val builder = new StringBuilder()
+
+		// write runnable body
+		builder.append("void " + call + "{\n")
+		if (measure_performance) {
+			builder.append('''
+				uint64_t event_list[] = {0x11, 0x13, 0x17}; //CPU CYCLES, MEM ACCESS, L2 Cache Refill
+				int total_events =  sizeof(event_list)/sizeof(event_list[0]);
+				int fd = instrument_start(0,event_list, total_events);
+			''')
+		}
+		calls.forEach [ c |
+			builder.append("\t" + c + ";\n")
+		]
+		if (measure_performance) {
+			builder.append('''
+				instrument_stop(fd, "«runnable.name».log");
+			''')
+		}
+		builder.append("}\n\n")
+
+		builder.toString
+	}
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagGenerator.xtend
index 7c99b81..882eb09 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagGenerator.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTagGenerator.xtend
@@ -20,6 +20,11 @@
 
 class RosTagGenerator {
 
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
 	static def String toCpp(Tag tag, String moduleName, HashSet<String> headers,  List<String> declarations,
 							List<String> inits, List<String> calls, List<String> serviceCallbacks) '''
 		#include <chrono>
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskGenerator.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskGenerator.xtend
new file mode 100644
index 0000000..2b81adf
--- /dev/null
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskGenerator.xtend
@@ -0,0 +1,113 @@
+/**
+ * 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.ros2.generators
+
+import java.util.List
+import java.util.Set
+import org.eclipse.app4mc.amalthea.model.EventStimulus
+import org.eclipse.app4mc.amalthea.model.InterProcessStimulus
+import org.eclipse.app4mc.amalthea.model.PeriodicStimulus
+import org.eclipse.app4mc.amalthea.model.Stimulus
+import org.eclipse.app4mc.slg.ros2.transformers.utils.Utils
+
+class RosTaskGenerator {
+
+	// Suppress default constructor
+	private new() {
+		throw new IllegalStateException("Utility class");
+	}
+
+	static def String getDeclaration(List<Stimulus> stimuli, List<String> publishers, List<String> clientDeclarations) '''
+		«FOR stimulus : stimuli»
+			«IF stimulus instanceof PeriodicStimulus»
+				rclcpp::TimerBase::SharedPtr «(stimulus as PeriodicStimulus).name»_timer_;
+			«ENDIF»
+			«IF stimulus instanceof EventStimulus»
+				rclcpp::Subscription<std_msgs::msg::String>::SharedPtr «(stimulus as EventStimulus).name»_subscription_;
+			«ENDIF»
+			«IF stimulus instanceof InterProcessStimulus»
+				rclcpp::Service<«(stimulus as InterProcessStimulus).name»_service::srv::«Utils.toIdlCompliantName((stimulus as InterProcessStimulus).name + '_service')»>::SharedPtr «(stimulus as InterProcessStimulus).name»_service;
+			«ENDIF»
+		«ENDFOR»
+		«FOR publisher : publishers»
+			rclcpp::Publisher<std_msgs::msg::String>::SharedPtr «publisher»;
+  		«ENDFOR»
+  		«FOR decl: clientDeclarations»
+			«decl»;
+		«ENDFOR»
+	'''
+
+	static def String getInitialisation(String nodeName, List<Stimulus> stimuli, List<String> publishers, List<String> clientInits) '''
+		«FOR stimulus : stimuli»
+			«IF stimulus instanceof PeriodicStimulus»
+				«(stimulus as PeriodicStimulus).name»_timer_ = this->create_wall_timer(
+						«(stimulus as PeriodicStimulus).recurrence.value»«(stimulus as PeriodicStimulus).recurrence.unit», std::bind(&«nodeName»::«(stimulus as PeriodicStimulus).name»_timer_callback, this));
+			«ENDIF»
+			«IF stimulus instanceof EventStimulus»
+				«(stimulus as EventStimulus).name»_subscription_ = this->create_subscription<std_msgs::msg::String>(
+					"«(stimulus as EventStimulus).name»", 10, std::bind(&«nodeName»::«(stimulus as EventStimulus).name»_subscription_callback, this, _1));
+			«ENDIF»
+			«IF stimulus instanceof InterProcessStimulus»
+				«(stimulus as InterProcessStimulus).name»_service = this->create_service<«(stimulus as InterProcessStimulus).name»_service::srv::«Utils.toIdlCompliantName((stimulus as InterProcessStimulus).name + '_service')»>("«(stimulus as InterProcessStimulus).name»_service", &«(stimulus as InterProcessStimulus).name»_service_callback);
+			«ENDIF»
+		«ENDFOR»
+		«FOR publisher : publishers»
+			«publisher» = this->create_publisher<std_msgs::msg::String>("«publisher.replace("_publisher", "")»", 10);
+		«ENDFOR»
+		«FOR init : clientInits»
+			«init»;
+		«ENDFOR»
+	'''
+
+	static def String getServiceCallback(List<Stimulus> stimuli, List<String> stepCalls) '''
+		«FOR stimulus : stimuli»
+			«IF stimulus instanceof InterProcessStimulus»
+				void «(stimulus as InterProcessStimulus).name»_service_callback(const std::shared_ptr<«(stimulus as InterProcessStimulus).name»_service::srv::«Utils.toIdlCompliantName((stimulus as InterProcessStimulus).name + '_service')»::Request> request,
+					std::shared_ptr<«(stimulus as InterProcessStimulus).name»_service::srv::«Utils.toIdlCompliantName((stimulus as InterProcessStimulus).name + '_service')»::Response>      response) {
+				«FOR call : stepCalls»
+					«""»		«call»;
+				«ENDFOR»
+					}
+			«ENDIF»
+
+
+		«ENDFOR»
+	'''
+	
+	static def String getCallback(List<Stimulus> stimuli, List<String> stepCalls) '''
+		«FOR stimulus : stimuli»
+			«IF stimulus instanceof PeriodicStimulus»
+				void «(stimulus as PeriodicStimulus).name»_timer_callback() {
+				«FOR call : stepCalls»
+					«""»	«call»;
+				«ENDFOR»
+				}
+			«ENDIF»
+			«IF stimulus instanceof EventStimulus»
+				void «(stimulus as EventStimulus).name»_subscription_callback(const std_msgs::msg::String::SharedPtr msg) {
+				«FOR call : stepCalls»
+					«""»	«call»;
+				«ENDFOR»
+				}
+			«ENDIF»
+		«ENDFOR»
+	'''
+	
+	static def String getHeaders(Set<String> includes) '''
+		«FOR include : includes»
+			#include "«include»"
+		«ENDFOR»
+	'''
+
+}
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java
index 3ff80ce..d572e49 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/generators/RosTaskTranslationUnit.java
@@ -13,411 +13,166 @@
 
 package org.eclipse.app4mc.slg.ros2.generators;
 
-import java.math.BigInteger;
 import java.util.ArrayList;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
+import java.util.List;
+import java.util.Set;
 import java.util.function.BiConsumer;
-import java.util.function.Consumer;
 
-import org.eclipse.app4mc.amalthea.model.ActivityGraph;
 import org.eclipse.app4mc.amalthea.model.ActivityGraphItem;
 import org.eclipse.app4mc.amalthea.model.Component;
-import org.eclipse.app4mc.amalthea.model.EventStimulus;
 import org.eclipse.app4mc.amalthea.model.Group;
+import org.eclipse.app4mc.amalthea.model.ITaggable;
 import org.eclipse.app4mc.amalthea.model.InterProcessStimulus;
-import org.eclipse.app4mc.amalthea.model.PeriodicStimulus;
+import org.eclipse.app4mc.amalthea.model.Runnable;
 import org.eclipse.app4mc.amalthea.model.RunnableCall;
 import org.eclipse.app4mc.amalthea.model.Stimulus;
 import org.eclipse.app4mc.amalthea.model.Tag;
 import org.eclipse.app4mc.amalthea.model.Task;
-import org.eclipse.app4mc.amalthea.model.TimeUnit;
 import org.eclipse.app4mc.slg.commons.m2t.generators.LabelTranslationUnit;
-import org.eclipse.app4mc.slg.commons.m2t.generators.RunnableTranslationUnit;
 import org.eclipse.app4mc.slg.commons.m2t.generators.TaskTranslationUnit;
 import org.eclipse.app4mc.slg.ros2.transformers.RosInterProcessStimulusTransformer;
 import org.eclipse.app4mc.slg.ros2.transformers.RosLabelTransformer;
 import org.eclipse.app4mc.slg.ros2.transformers.RosRunnableTransformer;
-import org.eclipse.app4mc.slg.ros2.transformers.utils.Utils;
 import org.eclipse.app4mc.transformation.util.OutputBuffer;
-import org.eclipse.emf.common.util.EList;
-import org.eclipse.xtend2.lib.StringConcatenation;
-import org.eclipse.xtext.xbase.lib.Functions.Function1;
-import org.eclipse.xtext.xbase.lib.IterableExtensions;
 
 public class RosTaskTranslationUnit extends TaskTranslationUnit {
-  private RosInterProcessStimulusTransformer ipStimulusTransformer;
-  
-  private Task task;
-  
-  private final LinkedHashSet<String> includes = new LinkedHashSet<>();
-  
-  private final LinkedList<String> initCalls = new LinkedList<>();
-  
-  private final LinkedList<String> stepCalls = new LinkedList<>();
-  
-  private final ArrayList<Stimulus> stimuli = new ArrayList<>();
-  
-  private ArrayList<String> publishers = new ArrayList<>();
-  
-  private ArrayList<String> clientDeclarations = new ArrayList<>();
-  
-  private ArrayList<String> clientInits = new ArrayList<>();
-  
-  public RosTaskTranslationUnit(final OutputBuffer outputBuffer, final RosRunnableTransformer transformerRunnable, final RosLabelTransformer transformerLabel, final RosInterProcessStimulusTransformer ipStimulusTransformer, final Task task, final Component c) {
-    super(outputBuffer, transformerRunnable, transformerLabel, task);
-    this.ipStimulusTransformer = ipStimulusTransformer;
-    this.task = task;
-    this.genFiles();
-  }
-  
-  @Override
-  public String getBasePath() {
-    return "";
-  }
-  
-  @Override
-  public String getModuleName() {
-    return this.task.getName();
-  }
-  
-  @Override
-  public boolean genFiles() {
-    boolean _xblockexpression = false;
-    {
-      ActivityGraph _activityGraph = null;
-      if (this.task!=null) {
-        _activityGraph=this.task.getActivityGraph();
-      }
-      EList<ActivityGraphItem> _items = null;
-      if (_activityGraph!=null) {
-        _items=_activityGraph.getItems();
-      }
-      if (_items!=null) {
-        final Consumer<ActivityGraphItem> _function = (ActivityGraphItem item) -> {
-          if ((item instanceof RunnableCall)) {
-            final org.eclipse.app4mc.amalthea.model.Runnable runnable = ((RunnableCall) item).getRunnable();
-            RunnableTranslationUnit _transform = this.runnableTransformer.transform(runnable);
-            final RosRunnableTranslationUnit tu = ((RosRunnableTranslationUnit) _transform);
-            this.includes.add(tu.getIncFile());
-            final Function1<Tag, Boolean> _function_1 = (Tag tag) -> {
-              return Boolean.valueOf("initialize".equals(tag.getName()));
-            };
-            boolean _isEmpty = IterableExtensions.isEmpty(IterableExtensions.<Tag>filter(((RunnableCall)item).getTags(), _function_1));
-            boolean _not = (!_isEmpty);
-            if (_not) {
-              this.initCalls.add(tu.getNodeCall());
-            } else {
-              this.stepCalls.add(tu.getNodeCall());
-            }
-            this.publishers.addAll(tu.getPublishers());
-            this.clientDeclarations.addAll(tu.getClientDeclarations());
-            this.clientInits.addAll(tu.getClientInits());
-          } else {
-            if ((item instanceof Group)) {
-              final Group group = ((Group) item);
-              final Consumer<ActivityGraphItem> _function_2 = (ActivityGraphItem groupitem) -> {
-                if ((groupitem instanceof RunnableCall)) {
-                  final org.eclipse.app4mc.amalthea.model.Runnable runnable_1 = ((RunnableCall) groupitem).getRunnable();
-                  RunnableTranslationUnit _transform_1 = this.runnableTransformer.transform(((org.eclipse.app4mc.amalthea.model.Runnable) runnable_1));
-                  final RosRunnableTranslationUnit tu_1 = ((RosRunnableTranslationUnit) _transform_1);
-                  this.includes.add(tu_1.getIncFile());
-                  final Function1<Tag, Boolean> _function_3 = (Tag tag) -> {
-                    return Boolean.valueOf("initialize".equals(tag.getName()));
-                  };
-                  boolean _isEmpty_1 = IterableExtensions.isEmpty(IterableExtensions.<Tag>filter(((RunnableCall)groupitem).getTags(), _function_3));
-                  boolean _not_1 = (!_isEmpty_1);
-                  if (_not_1) {
-                    this.initCalls.add(tu_1.getNodeCall());
-                  } else {
-                    this.stepCalls.add(tu_1.getNodeCall());
-                  }
-                }
-              };
-              group.getItems().forEach(_function_2);
-            }
-          }
-        };
-        _items.forEach(_function);
-      }
-      final BiConsumer<ArrayList<?>, LabelTranslationUnit> _function_1 = (ArrayList<?> label, LabelTranslationUnit tu) -> {
-        this.includes.add(tu.getIncFile());
-        this.initCalls.add(tu.getInitCall());
-      };
-      this.labelTransformer.getCache().forEach(_function_1);
-      final Function1<Stimulus, Boolean> _function_2 = (Stimulus stimulus) -> {
-        return Boolean.valueOf((stimulus instanceof InterProcessStimulus));
-      };
-      final Consumer<Stimulus> _function_3 = (Stimulus stimulus) -> {
-        StringConcatenation _builder = new StringConcatenation();
-        String _name = stimulus.getName();
-        _builder.append(_name);
-        _builder.append("_service/srv/");
-        String _name_1 = stimulus.getName();
-        _builder.append(_name_1);
-        _builder.append("_service.hpp");
-        this.includes.add(_builder.toString());
-        this.ipStimulusTransformer.transform(((InterProcessStimulus) stimulus));
-      };
-      IterableExtensions.<Stimulus>filter(IterableExtensions.<Stimulus>toList(this.task.getStimuli()), _function_2).forEach(_function_3);
-      _xblockexpression = this.stimuli.addAll(IterableExtensions.<Stimulus>toList(this.task.getStimuli()));
-    }
-    return _xblockexpression;
-  }
-  
-  public CharSequence getDeclaration() {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      for(final Stimulus stimulus : this.stimuli) {
-        {
-          if ((stimulus instanceof PeriodicStimulus)) {
-            _builder.append("rclcpp::TimerBase::SharedPtr ");
-            String _name = ((PeriodicStimulus) stimulus).getName();
-            _builder.append(_name);
-            _builder.append("_timer_;");
-            _builder.newLineIfNotEmpty();
-          }
-        }
-        {
-          if ((stimulus instanceof EventStimulus)) {
-            _builder.append("rclcpp::Subscription<std_msgs::msg::String>::SharedPtr ");
-            String _name_1 = ((EventStimulus) stimulus).getName();
-            _builder.append(_name_1);
-            _builder.append("_subscription_;");
-            _builder.newLineIfNotEmpty();
-          }
-        }
-        {
-          if ((stimulus instanceof InterProcessStimulus)) {
-            _builder.append("rclcpp::Service<");
-            String _name_2 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_2);
-            _builder.append("_service::srv::");
-            String _name_3 = ((InterProcessStimulus) stimulus).getName();
-            String _plus = (_name_3 + "_service");
-            String _idlCompliantName = Utils.toIdlCompliantName(_plus);
-            _builder.append(_idlCompliantName);
-            _builder.append(">::SharedPtr ");
-            String _name_4 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_4);
-            _builder.append("_service;");
-            _builder.newLineIfNotEmpty();
-          }
-        }
-      }
-    }
-    {
-      for(final String publisher : this.publishers) {
-        _builder.append("rclcpp::Publisher<std_msgs::msg::String>::SharedPtr ");
-        _builder.append(publisher);
-        _builder.append(";");
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    {
-      for(final String decl : this.clientDeclarations) {
-        _builder.append(decl);
-        _builder.append(";");
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    return _builder;
-  }
-  
-  public CharSequence getInitialisation(final String nodeName) {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      for(final Stimulus stimulus : this.stimuli) {
-        {
-          if ((stimulus instanceof PeriodicStimulus)) {
-            String _name = ((PeriodicStimulus) stimulus).getName();
-            _builder.append(_name);
-            _builder.append("_timer_ = this->create_wall_timer(");
-            _builder.newLineIfNotEmpty();
-            _builder.append("\t\t");
-            BigInteger _value = ((PeriodicStimulus) stimulus).getRecurrence().getValue();
-            _builder.append(_value, "\t\t");
-            TimeUnit _unit = ((PeriodicStimulus) stimulus).getRecurrence().getUnit();
-            _builder.append(_unit, "\t\t");
-            _builder.append(", std::bind(&");
-            _builder.append(nodeName, "\t\t");
-            _builder.append("::");
-            String _name_1 = ((PeriodicStimulus) stimulus).getName();
-            _builder.append(_name_1, "\t\t");
-            _builder.append("_timer_callback, this));");
-            _builder.newLineIfNotEmpty();
-          }
-        }
-        {
-          if ((stimulus instanceof EventStimulus)) {
-            String _name_2 = ((EventStimulus) stimulus).getName();
-            _builder.append(_name_2);
-            _builder.append("_subscription_ = this->create_subscription<std_msgs::msg::String>(");
-            _builder.newLineIfNotEmpty();
-            _builder.append("\t");
-            _builder.append("\"");
-            String _name_3 = ((EventStimulus) stimulus).getName();
-            _builder.append(_name_3, "\t");
-            _builder.append("\", 10, std::bind(&");
-            _builder.append(nodeName, "\t");
-            _builder.append("::");
-            String _name_4 = ((EventStimulus) stimulus).getName();
-            _builder.append(_name_4, "\t");
-            _builder.append("_subscription_callback, this, _1));");
-            _builder.newLineIfNotEmpty();
-          }
-        }
-        {
-          if ((stimulus instanceof InterProcessStimulus)) {
-            String _name_5 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_5);
-            _builder.append("_service = this->create_service<");
-            String _name_6 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_6);
-            _builder.append("_service::srv::");
-            String _name_7 = ((InterProcessStimulus) stimulus).getName();
-            String _plus = (_name_7 + "_service");
-            String _idlCompliantName = Utils.toIdlCompliantName(_plus);
-            _builder.append(_idlCompliantName);
-            _builder.append(">(\"");
-            String _name_8 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_8);
-            _builder.append("_service\", &");
-            String _name_9 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_9);
-            _builder.append("_service_callback);");
-            _builder.newLineIfNotEmpty();
-          }
-        }
-      }
-    }
-    {
-      for(final String publisher : this.publishers) {
-        _builder.append(publisher);
-        _builder.append(" = this->create_publisher<std_msgs::msg::String>(\"");
-        String _replace = publisher.replace("_publisher", "");
-        _builder.append(_replace);
-        _builder.append("\", 10);");
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    {
-      for(final String init : this.clientInits) {
-        _builder.append(init);
-        _builder.append(";");
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    return _builder;
-  }
-  
-  public CharSequence getServiceCallback() {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      for(final Stimulus stimulus : this.stimuli) {
-        {
-          if ((stimulus instanceof InterProcessStimulus)) {
-            _builder.append("void ");
-            String _name = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name);
-            _builder.append("_service_callback(const std::shared_ptr<");
-            String _name_1 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_1);
-            _builder.append("_service::srv::");
-            String _name_2 = ((InterProcessStimulus) stimulus).getName();
-            String _plus = (_name_2 + "_service");
-            String _idlCompliantName = Utils.toIdlCompliantName(_plus);
-            _builder.append(_idlCompliantName);
-            _builder.append("::Request> request,");
-            _builder.newLineIfNotEmpty();
-            _builder.append("\t");
-            _builder.append("std::shared_ptr<");
-            String _name_3 = ((InterProcessStimulus) stimulus).getName();
-            _builder.append(_name_3, "\t");
-            _builder.append("_service::srv::");
-            String _name_4 = ((InterProcessStimulus) stimulus).getName();
-            String _plus_1 = (_name_4 + "_service");
-            String _idlCompliantName_1 = Utils.toIdlCompliantName(_plus_1);
-            _builder.append(_idlCompliantName_1, "\t");
-            _builder.append("::Response>      response) {");
-            _builder.newLineIfNotEmpty();
-            {
-              for(final String call : this.stepCalls) {
-                _builder.append("\t\t");
-                _builder.append(call);
-                _builder.append(";");
-                _builder.newLineIfNotEmpty();
-              }
-            }
-            _builder.append("\t");
-            _builder.append("}");
-            _builder.newLine();
-          }
-        }
-        _builder.newLine();
-        _builder.newLine();
-      }
-    }
-    return _builder;
-  }
-  
-  public CharSequence getCallback() {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      for(final Stimulus stimulus : this.stimuli) {
-        {
-          if ((stimulus instanceof PeriodicStimulus)) {
-            _builder.append("void ");
-            String _name = ((PeriodicStimulus) stimulus).getName();
-            _builder.append(_name);
-            _builder.append("_timer_callback() {");
-            _builder.newLineIfNotEmpty();
-            {
-              for(final String call : this.stepCalls) {
-                _builder.append("\t");
-                _builder.append(call);
-                _builder.append(";");
-                _builder.newLineIfNotEmpty();
-              }
-            }
-            _builder.append("}");
-            _builder.newLine();
-          }
-        }
-        {
-          if ((stimulus instanceof EventStimulus)) {
-            _builder.append("void ");
-            String _name_1 = ((EventStimulus) stimulus).getName();
-            _builder.append(_name_1);
-            _builder.append("_subscription_callback(const std_msgs::msg::String::SharedPtr msg) {");
-            _builder.newLineIfNotEmpty();
-            {
-              for(final String call_1 : this.stepCalls) {
-                _builder.append("\t");
-                _builder.append(call_1);
-                _builder.append(";");
-                _builder.newLineIfNotEmpty();
-              }
-            }
-            _builder.append("}");
-            _builder.newLine();
-          }
-        }
-      }
-    }
-    return _builder;
-  }
-  
-  public CharSequence getHeaders() {
-    StringConcatenation _builder = new StringConcatenation();
-    {
-      for(final String include : this.includes) {
-        _builder.append("#include \"");
-        _builder.append(include);
-        _builder.append("\"");
-        _builder.newLineIfNotEmpty();
-      }
-    }
-    return _builder;
-  }
+	private RosInterProcessStimulusTransformer ipStimulusTransformer;
+	private Task task;
+
+	private final Set<String> includes = new LinkedHashSet<>();
+	private final List<String> initCalls = new LinkedList<>();
+	private final List<String> stepCalls = new LinkedList<>();
+	private final List<Stimulus> stimuli = new ArrayList<>();
+	private final List<String> publishers = new ArrayList<>();
+	private final List<String> clientDeclarations = new ArrayList<>();
+	private final List<String> clientInits = new ArrayList<>();
+
+	public RosTaskTranslationUnit(final OutputBuffer outputBuffer, final RosRunnableTransformer transformerRunnable,
+			final RosLabelTransformer transformerLabel, final RosInterProcessStimulusTransformer ipStimulusTransformer,
+			final Task task, final Component c) {
+		super(outputBuffer, transformerRunnable, transformerLabel, task);
+		this.ipStimulusTransformer = ipStimulusTransformer;
+		this.task = task;
+
+		this.genFiles();
+	}
+
+	@Override
+	public String getBasePath() {
+		return "";
+	}
+
+	@Override
+	public String getModuleName() {
+		return this.task.getName();
+	}
+
+	@Override
+	public boolean genFiles() {
+
+
+		if (task != null && task.getActivityGraph() != null) {
+			for (ActivityGraphItem item : task.getActivityGraph().getItems()) {
+
+				if ((item instanceof RunnableCall)) {
+					final RunnableCall runnableCall = (RunnableCall) item;
+					final Runnable runnable = runnableCall.getRunnable();
+
+					RosRunnableTranslationUnit tu = (RosRunnableTranslationUnit) runnableTransformer.transform(runnable);
+					includes.add(tu.getIncFile());
+
+					if (hasTagNamed(runnableCall, "initialize")) {
+						initCalls.add(tu.getNodeCall());
+					} else {
+						stepCalls.add(tu.getNodeCall());
+					}
+
+					// TODO: Make set
+					publishers.addAll(tu.getPublishers());
+					clientDeclarations.addAll(tu.getClientDeclarations());
+					clientInits.addAll(tu.getClientInits());
+					// TODO: add terminate function, if requested
+
+				} else if (item instanceof Group) {
+					final Group group = ((Group) item);
+					for (ActivityGraphItem groupitem : group.getItems()) {
+						if ((groupitem instanceof RunnableCall)) {
+							final RunnableCall runnableCall = (RunnableCall) groupitem;
+							final Runnable runnable = runnableCall.getRunnable();
+							
+							RosRunnableTranslationUnit tu = (RosRunnableTranslationUnit) runnableTransformer.transform(runnable);
+							includes.add(tu.getIncFile());
+							
+							if (hasTagNamed(runnableCall, "initialize")) {
+								initCalls.add((tu).getNodeCall());
+							} else {
+								stepCalls.add((tu).getNodeCall());
+							}
+							//TODO: add terminate function, if requested 
+						}
+					}
+				}
+			}
+		}
+
+		// labels must be initialized before usage, generated labels provide this method
+
+		for (LabelTranslationUnit tu : labelTransformer.getCache().values()) {
+			includes.add(tu.getIncFile());
+			initCalls.add(tu.getInitCall());
+		}
+
+		labelTransformer.getCache().forEach(
+				(BiConsumer<ArrayList<?>, LabelTranslationUnit>) (ArrayList<?> label, LabelTranslationUnit tu) -> {
+
+				});
+
+		// add header for srv file in case of an interprocessstimulus
+		// create .srv file for the messages to be translated
+
+		if (task != null) {
+			for (Stimulus stimulus : task.getStimuli()) {
+				if (stimulus instanceof InterProcessStimulus) {
+					String name = stimulus.getName();
+					includes.add(name + "_service/srv/" + name + "_service.hpp");
+
+					ipStimulusTransformer.transform(((InterProcessStimulus) stimulus));
+				}
+			}
+			
+			stimuli.addAll(task.getStimuli());
+		}
+
+		return true;
+	}
+
+	private boolean hasTagNamed(ITaggable element, String name) {
+		for (Tag tag : element.getTags()) {
+			if (tag.getName().equals(name))
+				return true;
+		}
+		return false;
+	}
+
+	public String getDeclaration() {
+		return RosTaskGenerator.getDeclaration(stimuli, publishers, clientDeclarations);
+	}
+	
+	public String getInitialisation(String nodeName) {
+		return RosTaskGenerator.getInitialisation(nodeName, stimuli, publishers, clientInits);
+	}
+	
+	public String getServiceCallback() {
+		return RosTaskGenerator.getServiceCallback(stimuli, stepCalls);
+	}
+	
+	public String getCallback() {
+		return RosTaskGenerator.getCallback(stimuli, stepCalls);
+	}
+	
+	public String getHeaders() {
+		return RosTaskGenerator.getHeaders(includes);
+	}
 }
diff --git a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend
index 6ad0d0b..574672f 100644
--- a/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend
+++ b/load_generator/ros2/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/ros2/transformers/RosLabelTransformer.xtend
@@ -23,6 +23,8 @@
 
 	@Inject OutputBuffer outputBuffer
 
+	static final String LIB_NAME = "LABELS_LIB"
+
 	override create new RosLabelTranslationUnit(outputBuffer, label)
 		transform(Label label) {
 	}
@@ -30,19 +32,19 @@
 	override getCache() { return this._createCache_transform }
 
 	override createCMake() {
-		outputBuffer.appendTo("OTHER", RosLabelTranslationUnit.makeFilePathStatic, toCMake())
+		outputBuffer.appendTo("OTHER", RosLabelTranslationUnit.MAKEFILE_PATH, toCMake())
 	}
 
 	override String toCMake() '''
-		# «RosLabelTranslationUnit.libName» ################################################################
+		# «LIB_NAME» ################################################################
 		####
-		add_library(«RosLabelTranslationUnit.libName»  STATIC
+		add_library(«LIB_NAME»  STATIC
 		«FOR srcFile : getSrcFiles()»
 			«""»	${CMAKE_CURRENT_LIST_DIR}/_src/«srcFile»
 		«ENDFOR»
 		)
-
-		target_include_directories(«RosLabelTranslationUnit.getLibName()»
+		
+		target_include_directories(«LIB_NAME»
 			    PUBLIC ${CMAKE_CURRENT_LIST_DIR}/_inc
 		)	
 	'''