diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.xtend b/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.xtend
index 23eaa50..d06e8ee 100644
--- a/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.xtend
+++ b/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.xtend
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2020-2022 Robert Bosch GmbH.
+ * Copyright (c) 2020-2023 Robert Bosch GmbH.
  * 
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
 
 import java.util.List
 import org.eclipse.app4mc.amalthea.model.Label
+import org.eclipse.app4mc.slg.commons.m2t.AmaltheaModelUtils
 
 class MicroRosLabelGenerator {
 
@@ -25,9 +26,9 @@
 
 	// ---------- names of generated 'C' functions ----------
 
-	static def String initCall(String labelName) { initCall(labelName, "_CacheLine* array, int array_elements") }
+	static def String initCall(String labelName) '''initialize_«labelName»()'''
 
-	static def String initCall(String labelName, String param) 	'''initialize_«labelName»(«labelName»«param»)'''	
+	// static def String initCall(String labelName, String param) 	'''initialize_«labelName»(«labelName»«param»)'''	
 	static def String readCall(String labelName, String param) 	'''read_«labelName»(«param»)'''	
 	static def String writeCall(String labelName, String param)	'''write_«labelName»(«param»)'''	
 
@@ -54,13 +55,11 @@
 		val name = if (label?.name.isNullOrEmpty) "<undefined label>" else label.name
 
 		'''
-		typedef struct «name»_CacheLine
-		{
-		  struct «name»_CacheLine* ptrCacheLine[8] ;
-		} «name»_CacheLine ;
-		void «initCall(name, "_CacheLine* array, int array_elements")»;
+		extern "C" {
+		void «initCall(name)»;
 		void «readCall(name, "int labelAccessStatistics")»;
 		void «writeCall(name, "int labelAccessStatistics")»;
+		}
 		
 		'''
 	}
@@ -70,77 +69,88 @@
 		val numberOfBytes = if (label?.size === null) 0 else label.size.numberBytes
 
 		'''
-		void initialize_«name»(«name»_CacheLine* array,int array_elements) {
-		  int steps = array_elements / 2 ;
-		  int bottom = 0 ;
-		  int top = steps ;
-		  int i = 0;
-		  for (i = 0 ; i < steps ; i++) {
-		    array[bottom].ptrCacheLine[0] = &array[top] ;
-		    array[top].ptrCacheLine[0] = &array[bottom+1] ;
-		    top++ ;
-		    bottom++ ;
-		  }
-		  array[(array_elements-1)].ptrCacheLine[0] = NULL ;	
+		int «name»[«AmaltheaModelUtils.getLabelArraySize(label)»];
+
+		static bool isIinitialized_«name» = false;
+		void «initCall(name)» {
+			if (!isIinitialized_«name»){
+				int i;
+				for (i=0; i < «AmaltheaModelUtils.getLabelArraySize(label)»; i++){
+					«name»[i] = i+1;
+				}
+				isIinitialized_«name» = true;
+			}
 		}
-		
-		
-		
-		void «readCall(label.name, "int labelAccessStatistics")» {
-			static bool initialized = false;
-				int numberOfBytes = «numberOfBytes»;
-				static «name»_CacheLine* «name»;
-				if(!initialized) {
-					//init
-					«name» = («name»_CacheLine*) malloc(sizeof(«name»_CacheLine) * 17000);
-					initialize_«name»(«name», 17000);
-					initialized = true;
+
+		void «readCall(name, "int labelAccessStatistics")»
+		{
+			debug_printf("  read «name»\n");
+			int numberOfBytes = «numberOfBytes»;
+			int repeat;
+			for (repeat = 0 ; repeat < labelAccessStatistics; repeat++){
+				if(numberOfBytes < 4){
+					numberOfBytes = 4;
 				}
-			
-				static «name»_CacheLine* i = «name»;
-				static int counter = 0;
-			
-				if(counter > 16100) {
-					counter = 0;
-					i = «name»;
+				int arraysize = sizeof(«name») / 4;
+		
+				int leftOverElements=arraysize%10;
+				int arraySizeWith10Multiples=arraysize-leftOverElements;
+				int i = 0;
+				int a = 0;
+				for (i = 0; i < arraySizeWith10Multiples; i = i + 10) {           //iteration with 10 reads
+					a = «name»[i];
+					a = «name»[i+1];
+					a = «name»[i+2];
+					a = «name»[i+3];
+					a = «name»[i+4];
+					a = «name»[i+5];
+					a = «name»[i+6];
+					a = «name»[i+7];
+					a = «name»[i+8];
+					a = «name»[i+9];
 				}
-			
+		
 				int end_value = counter + numberOfBytes;
-			
-				for(; counter < end_value; counter ++) {
-					i = i->ptrCacheLine[0];
+		
+				for(;i<arraysize;i++){
+					a = «name»[i];
 				}
-		
+
+				(void)a;
+			}
 		}
-		
-		
-		
-		void «writeCall(label.name, "int labelAccessStatistics")» {
-			static bool initialized = false;
-						int numberOfBytes = «numberOfBytes»;
-						static «name»_CacheLine* «name»;
-						if(!initialized) {
-							//init
-							«name» = («name»_CacheLine*) malloc(sizeof(«name»_CacheLine) * 17000);
-							initialize_«name»(«name», 17000);
-							initialized = true;
-						}
-					
-						static «name»_CacheLine* i = «name»;
-						static int counter = 0;
-					
-						if(counter > 16100) {
-							counter = 0;
-							i = «name»;
-						}
-					
-						int end_value = counter + numberOfBytes;
-					
-						for(; counter < end_value; counter ++) {
-							i = i->ptrCacheLine[0];
-						}
+
+		void «writeCall(name, "int labelAccessStatistics")»
+		{
+			debug_printf("  write «name»\n");
+			int numberOfBytes = «numberOfBytes»;
+			int repeat;
+			for (repeat = 0 ; repeat < labelAccessStatistics; repeat++){
+				if(numberOfBytes < 4){
+					numberOfBytes = 4;
+				}
+				int arraysize = sizeof(«name») / 4;
+				int leftOverElements=arraysize%10;
+				int arraySizeWith10Multiples=arraysize-leftOverElements;
+				
+				int i = 0;
+				for (i = 0; i < arraySizeWith10Multiples; i = i + 10) {
+					«name»[i]   = 0x800A;
+					«name»[i+1] = 0xAFFE;
+					«name»[i+2] = 0xAFFE;
+					«name»[i+3] = 0xAFFE;
+					«name»[i+4] = 0xAFFE;
+					«name»[i+5] = 0xAFFE;
+					«name»[i+6] = 0xAFFE;
+					«name»[i+7] = 0xAFFE;
+					«name»[i+8] = 0xAFFE;
+					«name»[i+9] = 0xAFFE;
+				}
+				for(;i<arraysize;i++){
+						«name»[i]=0xAFFE;
+				}
+			}
 		}
-		
 		'''
 	}
 
diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/transformers/MicroRosLabelTransformer.java b/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/transformers/MicroRosLabelTransformer.java
index 785d9da..779ec0e 100644
--- a/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/transformers/MicroRosLabelTransformer.java
+++ b/load_generator/plugins/org.eclipse.app4mc.slg.ros2/src/org/eclipse/app4mc/slg/microros/transformers/MicroRosLabelTransformer.java
@@ -1,6 +1,6 @@
 /**
  ********************************************************************************
- * Copyright (c) 2020-2022 Robert Bosch GmbH.
+ * Copyright (c) 2020-2023 Robert Bosch GmbH.
  * 
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -15,52 +15,96 @@
 
 package org.eclipse.app4mc.slg.microros.transformers;
 
+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.amalthea.model.Tag;
 import org.eclipse.app4mc.slg.commons.m2t.transformers.SLGTranslationUnit;
-import org.eclipse.app4mc.slg.commons.m2t.transformers.sw.LabelTransformer;
 import org.eclipse.app4mc.slg.microros.generators.MicroRosLabelGenerator;
+import org.eclipse.app4mc.slg.ros2.transformers.RosBaseTransformer;
+import org.eclipse.app4mc.slg.ros2.transformers.utils.RosModelUtils;
 import org.eclipse.app4mc.transformation.util.OutputBuffer;
 
 import com.google.inject.Inject;
 
-public class MicroRosLabelTransformer extends LabelTransformer {
+public class MicroRosLabelTransformer extends RosBaseTransformer {
 
 	public static final String LIB_NAME = "LABELS_LIB";
-	public static final String BASE_PATH = "MICROROS_SLG/synthetic_gen";
+	public static final String BASE_PATH = "synthetic_gen";
 	public static final String MODULE_NAME = "labels";
 	public static final String MODULE_PATH = BASE_PATH + "/" + MODULE_NAME;
 	public static final String MAKEFILE_PATH = MODULE_PATH + "/CMakeLists.txt";
 
 	@Inject private OutputBuffer outputBuffer;
 
-	@Override
-	protected void genFiles(SLGTranslationUnit tu, Label label) {
-		if (isSrcFileEmpty(tu)) {
+	// ---------- generic part "def create new transform(...)" ----------
 
-			srcAppend(tu,"#include \"" + getIncFile(tu) + "\"\n\n");
-			srcAppend(tu, "#include <stdlib.h>\n");
+	private final Map<List<Object>, SLGTranslationUnit> transformCache = new HashMap<>();
+
+	@Override
+	public Map<List<Object>, SLGTranslationUnit> getCache() {
+		return this.transformCache;
+	}
+
+	public SLGTranslationUnit transform(final Label label, final Tag tag) {
+		final String target = RosModelUtils.getROSTargetName(tag);
+		final List<Object> key = new ArrayList<>(Arrays.asList(label, target));
+		final SLGTranslationUnit tu;
+
+		synchronized (transformCache) {
+			if (transformCache.containsKey(key)) {
+				return transformCache.get(key);
+			}
+			tu = createTranslationUnit(label, target);
+			transformCache.put(key, tu);
 		}
-		incAppend(tu, "#pragma once \n\n");
-		incAppend(tu, MicroRosLabelGenerator.toH(label));
-		srcAppend(tu, MicroRosLabelGenerator.toCpp(label));
+
+		// if translation unit is newly created and valid -> create files
+		if (tu.isValid()) {
+			doTransform(tu, label);
+		}
+
+		return tu;
 	}
 
-	@Override
-	public boolean createCMake() {
-		return outputBuffer.appendTo(
-				"OTHER", MAKEFILE_PATH, MicroRosLabelGenerator.toCMake(LIB_NAME, getSrcFiles()));
-	}
+	// ---------------------------------------------------
 
-	@Override
-	protected SLGTranslationUnit createTranslationUnit(Label label) {
+	protected SLGTranslationUnit createTranslationUnit(Label label, String target) {
 		if ((label == null)) {
 			return new SLGTranslationUnit("UNSPECIFIED LABEL");
 		} else {
-			String basePath = BASE_PATH;
+			String basePath = target + "/" + BASE_PATH;
 			String moduleName = MODULE_NAME;
 			String call = label.getName();
 			return new SLGTranslationUnit(basePath, moduleName, call);
 		}
 	}
 
+	protected void doTransform(final SLGTranslationUnit tu, final Label label) {
+		genFiles(tu, label);
+	}
+
+	protected void genFiles(SLGTranslationUnit tu, Label label) {
+		incAppend(tu, "#pragma once \n\n");
+		incAppend(tu, MicroRosLabelGenerator.toH(label));
+
+		if (isSrcFileEmpty(tu)) {
+			srcAppend(tu, "#include \"" + getIncFile(tu) + "\"\n");
+			srcAppend(tu, "#include <stdlib.h>\n");
+			srcAppend(tu, "#include \"output_console.h\"\n\n");
+		}
+		srcAppend(tu, "#ifdef __cplusplus \n extern \"C\" \n {\n#endif\n\n");
+ 		srcAppend(tu, MicroRosLabelGenerator.toCpp(label));
+		srcAppend(tu, "#ifdef __cplusplus \n }\n#endif\n\n");
+	}
+
+	public boolean createCMake(String target) {
+		return outputBuffer.appendTo(
+				"OTHER", target + "/" + MAKEFILE_PATH, MicroRosLabelGenerator.toCMake(LIB_NAME, getSrcFiles()));
+	}
+
 }
diff --git a/load_generator/plugins/org.eclipse.app4mc.slg.ros2/xtend-gen/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.java b/load_generator/plugins/org.eclipse.app4mc.slg.ros2/xtend-gen/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.java
index 6526769..737daf9 100644
--- a/load_generator/plugins/org.eclipse.app4mc.slg.ros2/xtend-gen/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.java
+++ b/load_generator/plugins/org.eclipse.app4mc.slg.ros2/xtend-gen/org/eclipse/app4mc/slg/microros/generators/MicroRosLabelGenerator.java
@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2020-2022 Robert Bosch GmbH.
+ * Copyright (c) 2020-2023 Robert Bosch GmbH.
  * 
  * This program and the accompanying materials are made
  * available under the terms of the Eclipse Public License 2.0
@@ -15,6 +15,7 @@
 import java.util.List;
 import org.eclipse.app4mc.amalthea.model.DataSize;
 import org.eclipse.app4mc.amalthea.model.Label;
+import org.eclipse.app4mc.slg.commons.m2t.AmaltheaModelUtils;
 import org.eclipse.xtend2.lib.StringConcatenation;
 import org.eclipse.xtext.xbase.lib.StringExtensions;
 
@@ -25,17 +26,10 @@
   }
   
   public static String initCall(final String labelName) {
-    return MicroRosLabelGenerator.initCall(labelName, "_CacheLine* array, int array_elements");
-  }
-  
-  public static String initCall(final String labelName, final String param) {
     StringConcatenation _builder = new StringConcatenation();
     _builder.append("initialize_");
     _builder.append(labelName);
-    _builder.append("(");
-    _builder.append(labelName);
-    _builder.append(param);
-    _builder.append(")");
+    _builder.append("()");
     return _builder.toString();
   }
   
@@ -106,23 +100,10 @@
       }
       final String name = _xifexpression;
       StringConcatenation _builder = new StringConcatenation();
-      _builder.append("typedef struct ");
-      _builder.append(name);
-      _builder.append("_CacheLine");
-      _builder.newLineIfNotEmpty();
-      _builder.append("{");
+      _builder.append("extern \"C\" {");
       _builder.newLine();
-      _builder.append("  ");
-      _builder.append("struct ");
-      _builder.append(name, "  ");
-      _builder.append("_CacheLine* ptrCacheLine[8] ;");
-      _builder.newLineIfNotEmpty();
-      _builder.append("} ");
-      _builder.append(name);
-      _builder.append("_CacheLine ;");
-      _builder.newLineIfNotEmpty();
       _builder.append("void ");
-      String _initCall = MicroRosLabelGenerator.initCall(name, "_CacheLine* array, int array_elements");
+      String _initCall = MicroRosLabelGenerator.initCall(name);
       _builder.append(_initCall);
       _builder.append(";");
       _builder.newLineIfNotEmpty();
@@ -136,6 +117,8 @@
       _builder.append(_writeCall);
       _builder.append(";");
       _builder.newLineIfNotEmpty();
+      _builder.append("}");
+      _builder.newLine();
       _builder.newLine();
       _xblockexpression = _builder.toString();
     }
@@ -170,241 +153,294 @@
       }
       final long numberOfBytes = _xifexpression_1;
       StringConcatenation _builder = new StringConcatenation();
-      _builder.append("void initialize_");
+      _builder.append("int ");
       _builder.append(name);
-      _builder.append("(");
-      _builder.append(name);
-      _builder.append("_CacheLine* array,int array_elements) {");
+      _builder.append("[");
+      long _labelArraySize = AmaltheaModelUtils.getLabelArraySize(label);
+      _builder.append(_labelArraySize);
+      _builder.append("];");
       _builder.newLineIfNotEmpty();
-      _builder.append("  ");
-      _builder.append("int steps = array_elements / 2 ;");
       _builder.newLine();
-      _builder.append("  ");
-      _builder.append("int bottom = 0 ;");
+      _builder.append("static bool isIinitialized_");
+      _builder.append(name);
+      _builder.append(" = false;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("void ");
+      String _initCall = MicroRosLabelGenerator.initCall(name);
+      _builder.append(_initCall);
+      _builder.append(" {");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t");
+      _builder.append("if (!isIinitialized_");
+      _builder.append(name, "\t");
+      _builder.append("){");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t");
+      _builder.append("int i;");
       _builder.newLine();
-      _builder.append("  ");
-      _builder.append("int top = steps ;");
+      _builder.append("\t\t");
+      _builder.append("for (i=0; i < ");
+      long _labelArraySize_1 = AmaltheaModelUtils.getLabelArraySize(label);
+      _builder.append(_labelArraySize_1, "\t\t");
+      _builder.append("; i++){");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i] = i+1;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t");
+      _builder.append("}");
       _builder.newLine();
-      _builder.append("  ");
+      _builder.append("\t\t");
+      _builder.append("isIinitialized_");
+      _builder.append(name, "\t\t");
+      _builder.append(" = true;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t");
+      _builder.append("}");
+      _builder.newLine();
+      _builder.append("}");
+      _builder.newLine();
+      _builder.newLine();
+      _builder.append("void ");
+      String _readCall = MicroRosLabelGenerator.readCall(name, "int labelAccessStatistics");
+      _builder.append(_readCall);
+      _builder.newLineIfNotEmpty();
+      _builder.append("{");
+      _builder.newLine();
+      _builder.append("\t");
+      _builder.append("debug_printf(\"  read ");
+      _builder.append(name, "\t");
+      _builder.append("\\n\");");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t");
+      _builder.append("int numberOfBytes = ");
+      _builder.append(numberOfBytes, "\t");
+      _builder.append(";");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t");
+      _builder.append("int repeat;");
+      _builder.newLine();
+      _builder.append("\t");
+      _builder.append("for (repeat = 0 ; repeat < labelAccessStatistics; repeat++){");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("if(numberOfBytes < 4){");
+      _builder.newLine();
+      _builder.append("\t\t\t");
+      _builder.append("numberOfBytes = 4;");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("}");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("int arraysize = sizeof(");
+      _builder.append(name, "\t\t");
+      _builder.append(") / 4;");
+      _builder.newLineIfNotEmpty();
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("int leftOverElements=arraysize%10;");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("int arraySizeWith10Multiples=arraysize-leftOverElements;");
+      _builder.newLine();
+      _builder.append("\t\t");
       _builder.append("int i = 0;");
       _builder.newLine();
-      _builder.append("  ");
-      _builder.append("for (i = 0 ; i < steps ; i++) {");
-      _builder.newLine();
-      _builder.append("    ");
-      _builder.append("array[bottom].ptrCacheLine[0] = &array[top] ;");
-      _builder.newLine();
-      _builder.append("    ");
-      _builder.append("array[top].ptrCacheLine[0] = &array[bottom+1] ;");
-      _builder.newLine();
-      _builder.append("    ");
-      _builder.append("top++ ;");
-      _builder.newLine();
-      _builder.append("    ");
-      _builder.append("bottom++ ;");
-      _builder.newLine();
-      _builder.append("  ");
-      _builder.append("}");
-      _builder.newLine();
-      _builder.append("  ");
-      _builder.append("array[(array_elements-1)].ptrCacheLine[0] = NULL ;\t");
-      _builder.newLine();
-      _builder.append("}");
-      _builder.newLine();
-      _builder.newLine();
-      _builder.newLine();
-      _builder.newLine();
-      _builder.append("void ");
-      String _readCall = MicroRosLabelGenerator.readCall(label.getName(), "int labelAccessStatistics");
-      _builder.append(_readCall);
-      _builder.append(" {");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t");
-      _builder.append("static bool initialized = false;");
+      _builder.append("\t\t");
+      _builder.append("int a = 0;");
       _builder.newLine();
       _builder.append("\t\t");
-      _builder.append("int numberOfBytes = ");
-      _builder.append(numberOfBytes, "\t\t");
-      _builder.append(";");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t\t");
-      _builder.append("static ");
-      _builder.append(name, "\t\t");
-      _builder.append("_CacheLine* ");
-      _builder.append(name, "\t\t");
-      _builder.append(";");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t\t");
-      _builder.append("if(!initialized) {");
+      _builder.append("for (i = 0; i < arraySizeWith10Multiples; i = i + 10) {           //iteration with 10 reads");
       _builder.newLine();
       _builder.append("\t\t\t");
-      _builder.append("//init");
-      _builder.newLine();
-      _builder.append("\t\t\t");
+      _builder.append("a = ");
       _builder.append(name, "\t\t\t");
-      _builder.append(" = (");
-      _builder.append(name, "\t\t\t");
-      _builder.append("_CacheLine*) malloc(sizeof(");
-      _builder.append(name, "\t\t\t");
-      _builder.append("_CacheLine) * 17000);");
+      _builder.append("[i];");
       _builder.newLineIfNotEmpty();
       _builder.append("\t\t\t");
-      _builder.append("initialize_");
+      _builder.append("a = ");
       _builder.append(name, "\t\t\t");
-      _builder.append("(");
-      _builder.append(name, "\t\t\t");
-      _builder.append(", 17000);");
+      _builder.append("[i+1];");
       _builder.newLineIfNotEmpty();
       _builder.append("\t\t\t");
-      _builder.append("initialized = true;");
-      _builder.newLine();
-      _builder.append("\t\t");
-      _builder.append("}");
-      _builder.newLine();
-      _builder.append("\t");
-      _builder.newLine();
-      _builder.append("\t\t");
-      _builder.append("static ");
-      _builder.append(name, "\t\t");
-      _builder.append("_CacheLine* i = ");
-      _builder.append(name, "\t\t");
-      _builder.append(";");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t\t");
-      _builder.append("static int counter = 0;");
-      _builder.newLine();
-      _builder.append("\t");
-      _builder.newLine();
-      _builder.append("\t\t");
-      _builder.append("if(counter > 16100) {");
-      _builder.newLine();
-      _builder.append("\t\t\t");
-      _builder.append("counter = 0;");
-      _builder.newLine();
-      _builder.append("\t\t\t");
-      _builder.append("i = ");
+      _builder.append("a = ");
       _builder.append(name, "\t\t\t");
-      _builder.append(";");
+      _builder.append("[i+2];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+3];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+4];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+5];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+6];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+7];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+8];");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+9];");
       _builder.newLineIfNotEmpty();
       _builder.append("\t\t");
       _builder.append("}");
       _builder.newLine();
-      _builder.append("\t");
       _builder.newLine();
       _builder.append("\t\t");
       _builder.append("int end_value = counter + numberOfBytes;");
       _builder.newLine();
-      _builder.append("\t");
       _builder.newLine();
       _builder.append("\t\t");
-      _builder.append("for(; counter < end_value; counter ++) {");
+      _builder.append("for(;i<arraysize;i++){");
       _builder.newLine();
       _builder.append("\t\t\t");
-      _builder.append("i = i->ptrCacheLine[0];");
-      _builder.newLine();
+      _builder.append("a = ");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i];");
+      _builder.newLineIfNotEmpty();
       _builder.append("\t\t");
       _builder.append("}");
       _builder.newLine();
       _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("(void)a;");
+      _builder.newLine();
+      _builder.append("\t");
       _builder.append("}");
       _builder.newLine();
-      _builder.newLine();
+      _builder.append("}");
       _builder.newLine();
       _builder.newLine();
       _builder.append("void ");
-      String _writeCall = MicroRosLabelGenerator.writeCall(label.getName(), "int labelAccessStatistics");
+      String _writeCall = MicroRosLabelGenerator.writeCall(name, "int labelAccessStatistics");
       _builder.append(_writeCall);
-      _builder.append(" {");
+      _builder.newLineIfNotEmpty();
+      _builder.append("{");
+      _builder.newLine();
+      _builder.append("\t");
+      _builder.append("debug_printf(\"  write ");
+      _builder.append(name, "\t");
+      _builder.append("\\n\");");
       _builder.newLineIfNotEmpty();
       _builder.append("\t");
-      _builder.append("static bool initialized = false;");
-      _builder.newLine();
-      _builder.append("\t\t\t\t");
       _builder.append("int numberOfBytes = ");
-      _builder.append(numberOfBytes, "\t\t\t\t");
+      _builder.append(numberOfBytes, "\t");
       _builder.append(";");
       _builder.newLineIfNotEmpty();
-      _builder.append("\t\t\t\t");
-      _builder.append("static ");
-      _builder.append(name, "\t\t\t\t");
-      _builder.append("_CacheLine* ");
-      _builder.append(name, "\t\t\t\t");
-      _builder.append(";");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t\t\t\t");
-      _builder.append("if(!initialized) {");
+      _builder.append("\t");
+      _builder.append("int repeat;");
       _builder.newLine();
-      _builder.append("\t\t\t\t\t");
-      _builder.append("//init");
+      _builder.append("\t");
+      _builder.append("for (repeat = 0 ; repeat < labelAccessStatistics; repeat++){");
       _builder.newLine();
-      _builder.append("\t\t\t\t\t");
-      _builder.append(name, "\t\t\t\t\t");
-      _builder.append(" = (");
-      _builder.append(name, "\t\t\t\t\t");
-      _builder.append("_CacheLine*) malloc(sizeof(");
-      _builder.append(name, "\t\t\t\t\t");
-      _builder.append("_CacheLine) * 17000);");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t\t\t\t\t");
-      _builder.append("initialize_");
-      _builder.append(name, "\t\t\t\t\t");
-      _builder.append("(");
-      _builder.append(name, "\t\t\t\t\t");
-      _builder.append(", 17000);");
-      _builder.newLineIfNotEmpty();
-      _builder.append("\t\t\t\t\t");
-      _builder.append("initialized = true;");
+      _builder.append("\t\t");
+      _builder.append("if(numberOfBytes < 4){");
       _builder.newLine();
-      _builder.append("\t\t\t\t");
+      _builder.append("\t\t\t");
+      _builder.append("numberOfBytes = 4;");
+      _builder.newLine();
+      _builder.append("\t\t");
       _builder.append("}");
       _builder.newLine();
-      _builder.append("\t\t\t");
-      _builder.newLine();
-      _builder.append("\t\t\t\t");
-      _builder.append("static ");
-      _builder.append(name, "\t\t\t\t");
-      _builder.append("_CacheLine* i = ");
-      _builder.append(name, "\t\t\t\t");
-      _builder.append(";");
+      _builder.append("\t\t");
+      _builder.append("int arraysize = sizeof(");
+      _builder.append(name, "\t\t");
+      _builder.append(") / 4;");
       _builder.newLineIfNotEmpty();
-      _builder.append("\t\t\t\t");
-      _builder.append("static int counter = 0;");
+      _builder.append("\t\t");
+      _builder.append("int leftOverElements=arraysize%10;");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("int arraySizeWith10Multiples=arraysize-leftOverElements;");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("int i = 0;");
+      _builder.newLine();
+      _builder.append("\t\t");
+      _builder.append("for (i = 0; i < arraySizeWith10Multiples; i = i + 10) {");
       _builder.newLine();
       _builder.append("\t\t\t");
-      _builder.newLine();
-      _builder.append("\t\t\t\t");
-      _builder.append("if(counter > 16100) {");
-      _builder.newLine();
-      _builder.append("\t\t\t\t\t");
-      _builder.append("counter = 0;");
-      _builder.newLine();
-      _builder.append("\t\t\t\t\t");
-      _builder.append("i = ");
-      _builder.append(name, "\t\t\t\t\t");
-      _builder.append(";");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i]   = 0x800A;");
       _builder.newLineIfNotEmpty();
-      _builder.append("\t\t\t\t");
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+1] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+2] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+3] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+4] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+5] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+6] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+7] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+8] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t\t");
+      _builder.append(name, "\t\t\t");
+      _builder.append("[i+9] = 0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t");
       _builder.append("}");
       _builder.newLine();
-      _builder.append("\t\t\t");
+      _builder.append("\t\t");
+      _builder.append("for(;i<arraysize;i++){");
       _builder.newLine();
       _builder.append("\t\t\t\t");
-      _builder.append("int end_value = counter + numberOfBytes;");
+      _builder.append(name, "\t\t\t\t");
+      _builder.append("[i]=0xAFFE;");
+      _builder.newLineIfNotEmpty();
+      _builder.append("\t\t");
+      _builder.append("}");
       _builder.newLine();
-      _builder.append("\t\t\t");
-      _builder.newLine();
-      _builder.append("\t\t\t\t");
-      _builder.append("for(; counter < end_value; counter ++) {");
-      _builder.newLine();
-      _builder.append("\t\t\t\t\t");
-      _builder.append("i = i->ptrCacheLine[0];");
-      _builder.newLine();
-      _builder.append("\t\t\t\t");
+      _builder.append("\t");
       _builder.append("}");
       _builder.newLine();
       _builder.append("}");
       _builder.newLine();
-      _builder.newLine();
       _xblockexpression = _builder.toString();
     }
     return _xblockexpression;
