Merge "Bug 541517: improved usability of tutorials"
diff --git a/build.gradle b/build.gradle
index 12ea6a7..76fb31e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -3,9 +3,10 @@
 }
 
 apply from: "$rootDir/gradle/scmVersion.gradle"
+apply from: "$rootDir/gradle/versions.gradle"
 
 allprojects {
-	apply from: "$rootDir/gradle/versions.gradle"
+	apply plugin: 'base'
 
 	group = 'org.eclipse.etrice'
 	version = scmVersion.version
diff --git a/examples/my.etrice.generator.launch/META-INF/MANIFEST.MF b/examples/my.etrice.generator.launch/META-INF/MANIFEST.MF
index 3136512..25c644b 100644
--- a/examples/my.etrice.generator.launch/META-INF/MANIFEST.MF
+++ b/examples/my.etrice.generator.launch/META-INF/MANIFEST.MF
@@ -15,3 +15,4 @@
  org.eclipse.core.runtime;bundle-version="3.8.0",
  org.eclipse.jdt.launching;bundle-version="3.6.100",
  org.eclipse.etrice.generator.base;bundle-version="2.0.0"
+Automatic-Module-Name: my.etrice.generator.launch
diff --git a/examples/my.etrice.generator/META-INF/MANIFEST.MF b/examples/my.etrice.generator/META-INF/MANIFEST.MF
index 24e0087..45de050 100644
--- a/examples/my.etrice.generator/META-INF/MANIFEST.MF
+++ b/examples/my.etrice.generator/META-INF/MANIFEST.MF
@@ -11,3 +11,4 @@
  org.eclipse.etrice.generator.java;bundle-version="2.0.0",
  com.google.inject;bundle-version="3.0.0"
 Export-Package: my.etrice.generator
+Automatic-Module-Name: my.etrice.generator
diff --git a/examples/org.eclipse.etrice.examples.java/.classpath b/examples/org.eclipse.etrice.examples.java/.classpath
index d092124..a97d6fd 100644
--- a/examples/org.eclipse.etrice.examples.java/.classpath
+++ b/examples/org.eclipse.etrice.examples.java/.classpath
@@ -3,7 +3,7 @@
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="/org.eclipse.etrice.runtime.java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.etrice.modellib.java"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/DynAct1.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/DynAct1.room
index ce94fa6..6de7116 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/DynAct1.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/DynAct1.room
@@ -28,10 +28,9 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation dumpTree(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
-			}
+			Operation dumpTree(msg: string) '''
+				System.out.println(msg);
+				System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());'''
 			
 			StateMachine {
 				Transition init: initial -> CreateOptional2 { }
@@ -39,40 +38,34 @@
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-						"opt.destroyOptionalActor();"
-						"dumpTree(\"after deletion of Optional2\");"
-					}
+					action '''
+						System.out.println(transitionData+"\n");
+						opt.destroyOptionalActor();
+						dumpTree("after deletion of Optional2");'''
 				}
 				Transition tr2: CreateOptional1 -> ReceivedHelloAgain {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-						"opt.destroyOptionalActor();"
-					}
+					action '''
+						System.out.println(transitionData+"\n");
+						opt.destroyOptionalActor();'''
 				}
 				State CreateOptional2 {
-					entry {
-						"dumpTree(\"before creation of Optional2\");"
-						"opt.createOptionalActor(\"Optional2\", getThread());"
-						"p0.sayHello();"
-						"dumpTree(\"after creation of Optional2\");"
-					}
+					entry '''
+						dumpTree("before creation of Optional2");
+						opt.createOptionalActor("Optional2", getThread());
+						p0.sayHello();
+						dumpTree("after creation of Optional2");'''
 				}
 				State CreateOptional1 {
-					entry {
-						"opt.createOptionalActor(\"Optional1\", getThread());"
-						"p0.sayHello();"
-						"dumpTree(\"after creation of Optional1\");"
-					}
+					entry '''
+						opt.createOptionalActor("Optional1", getThread());
+						p0.sayHello();
+						dumpTree("after creation of Optional1");'''
 				}
 				State ReceivedHelloAgain {
-					entry {
-						"System.out.println(\"Done, enter 'quit' to exit\"); "
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit"); '''
 				}
 			}
 		}
@@ -130,16 +123,13 @@
 					triggers {
 						<hello: hlp>
 					}
-					action {
-						"System.out.println(\"helper said \"+txt);"
-						"p0.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
+					action '''
+						System.out.println("helper said "+transitionData);
+						p0.hello("this is AC1, instance "+getInstancePath());'''
 				}
 				State Ready
 				State AskHelper {
-					entry {
-						"hlp.sayHello();"
-					}
+					entry '''hlp.sayHello();'''
 				}
 			}
 		}
@@ -170,9 +160,7 @@
 					triggers {
 						<sayHello: p0>
 					}
-					action {
-						"p0.hello(\"this is AC3, instance \"+getInstancePath());"
-					}
+					action '''p0.hello("this is AC3, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -185,7 +173,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1.launch
index 1d81912..102cf31 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1.launch
@@ -1,16 +1,23 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
+<booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
-<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java}"/>
+<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors1}/genmodel.rim"/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="true"/>
 <booleanAttribute key="MSC" value="false"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors1/DynAct1.room}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
+<booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="true"/>
+<booleanAttribute key="UseTranslation" value="true"/>
 <booleanAttribute key="Verbose" value="false"/>
 <stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${workspace}"/>
 <listAttribute key="org.eclipse.debug.ui.favoriteGroups">
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1_sys.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1_sys.launch
index b7fa7bb..20ae2f9 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1_sys.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors1/gen_DynAct1_sys.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
-<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java}"/>
+<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors1}/genmodel._sysrim"/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors1/DynAct1.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="true"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/DynAct2.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/DynAct2.room
index bcc0be5..c9d71e0 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/DynAct2.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/DynAct2.room
@@ -31,68 +31,55 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation printMemory(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(\"memory,\"+(counter++)+\",\"+Runtime.getRuntime().freeMemory());"
-			}
+			Operation printMemory(msg: string) '''
+				System.out.println(msg);
+				System.out.println("memory,"+(counter++)+","+Runtime.getRuntime().freeMemory());'''
 			
 			StateMachine {
 				Transition init: initial -> CreateOptional2 {
-					action {
-						"long lDateTime = new java.util.Date().getTime();"
-						"System.out.println(\"begin: \" + lDateTime);"
-						"printMemory(\"initial\");"
-					}
+					action '''
+						long lDateTime = new java.util.Date().getTime();
+						System.out.println("begin: " + lDateTime);
+						printMemory("initial");'''
 				}
 				Transition tr0: CreateOptional2 -> CreateOptional1 {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-						"opt.destroyOptionalActor();"
-						"printMemory(\"after deletion of Optional2\");"
-					}
-				}
+					action '''
+						System.out.println(transitionData+"\n");
+						opt.destroyOptionalActor();
+						printMemory("after deletion of Optional2");''' }
 				Transition tr2: CreateOptional1 -> cp cp0 {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-						"opt.destroyOptionalActor();"
-						"printMemory(\"after deletion of Optional1\");"
-					}
-				}
+					action '''
+						System.out.println(transitionData+"\n");
+						opt.destroyOptionalActor();
+						printMemory("after deletion of Optional1");''' }
 				Transition tr1: cp cp0 -> CreateOptional2
 				Transition tr3: cp cp0 -> Done {
-					cond {
-						"counter>1200"
-					}
-					action {
-						"long lDateTime = new java.util.Date().getTime();"
-						"System.out.println(\"end: \" + lDateTime);"
-					}
+					cond '''counter>1200'''
+					action '''
+						long lDateTime = new java.util.Date().getTime();
+						System.out.println("end: " + lDateTime);'''
 				}
 				ChoicePoint cp0
 				State CreateOptional2 {
-					entry {
-						"opt.createOptionalActor(\"Optional2\", getThread());"
-						"p0.sayHello();"
-						"printMemory(\"after creation of Optional2\");"
-					}
+					entry '''
+						opt.createOptionalActor("Optional2", getThread());
+						p0.sayHello();
+						printMemory("after creation of Optional2");'''
 				}
 				State CreateOptional1 {
-					entry {
-						"opt.createOptionalActor(\"Optional1\", getThread());"
-						"p0.sayHello();"
-						"printMemory(\"after creation of Optional1\");"
-					}
+					entry '''
+						opt.createOptionalActor("Optional1", getThread());
+						p0.sayHello();
+						printMemory("after creation of Optional1");'''
 				}
 				State Done {
-					entry {
-						"System.out.println(\"Done, enter 'quit' to exit\"); "
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit"); '''
 				}
 			}
 		}
@@ -142,9 +129,7 @@
 					triggers {
 						<sayHello: p0>
 					}
-					action {
-						"p0.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
+					action '''p0.hello("this is AC1, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -176,9 +161,7 @@
 					triggers {
 						<sayHello: p0>
 					}
-					action {
-						"p0.hello(\"this is AC3, instance \"+getInstancePath());"
-					}
+					action '''p0.hello("this is AC3, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -191,7 +174,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/gen_DynAct2.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/gen_DynAct2.launch
index 34afbb7..b70ad39 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/gen_DynAct2.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors2/gen_DynAct2.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
 <stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="false"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors2/DynAct2.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/DynAct3.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/DynAct3.room
index b52973e..ebd1a72 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/DynAct3.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/DynAct3.room
@@ -28,10 +28,9 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation dumpTree(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
-			}
+			Operation dumpTree(msg: string) '''
+				System.out.println(msg);
+				System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());'''
 			
 			StateMachine {
 				Transition init: initial -> CreateOptional2 { }
@@ -39,79 +38,58 @@
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-					}
-				}
+					action '''System.out.println(transitionData+"\n");''' }
 				Transition tr2: CreateOptional1 -> ReceivedHelloAgain {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-					}
-				}
+					action '''System.out.println(transitionData+"\n");''' }
 				Transition tr1: ReceivedHelloAgain -> Destroy0 {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-					}
-				}
+					action '''System.out.println(transitionData+"\n");''' }
 				Transition tr3: Destroy0 -> Destroy1Create2 {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-					}
-				}
+					action '''System.out.println(transitionData+"\n");''' }
 				Transition tr4: Destroy1Create2 -> Done {
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-					}
-				}
+					action '''System.out.println(transitionData+"\n");''' }
 				State CreateOptional2 {
-					entry {
-						"dumpTree(\"before creation of Optional2\");"
-						"optarray.createOptionalActor(\"Optional2\", getThread());"
-						"dumpTree(\"after creation of Optional2\");"
-						"p0.sayHello();"
-					}
+					entry '''
+						dumpTree("before creation of Optional2");
+						optarray.createOptionalActor("Optional2", getThread());
+						dumpTree("after creation of Optional2");
+						p0.sayHello();'''
 				}
 				State CreateOptional1 {
-					entry {
-						"optarray.createOptionalActor(\"Optional1\", getThread());"
-						"p0.sayHello();"
-						"dumpTree(\"after creation of Optional1\");"
-					}
+					entry '''
+						optarray.createOptionalActor("Optional1", getThread());
+						p0.sayHello();
+						dumpTree("after creation of Optional1");'''
 				}
 				State ReceivedHelloAgain
 				State Destroy0 {
-					entry {
-						"optarray.destroyOptionalActor(0);"
-						"dumpTree(\"after deletion of Optional2\");"
-						"p0.sayHello();"
-					}
+					entry '''
+						optarray.destroyOptionalActor(0);
+						dumpTree("after deletion of Optional2");
+						p0.sayHello();'''
 				}
 				State Destroy1Create2 {
-					entry {
-						"optarray.destroyOptionalActor(1);"
-						"dumpTree(\"after deletion of Optional1\");"
-						""
-						"optarray.createOptionalActor(\"Optional2\", getThread());"
-						"dumpTree(\"after second creation of Optional2\");"
-						"p0.sayHello();"
-					}
+					entry '''
+						optarray.destroyOptionalActor(1);
+						dumpTree("after deletion of Optional1");
+						
+						optarray.createOptionalActor("Optional2", getThread());
+						dumpTree("after second creation of Optional2");
+						p0.sayHello();'''
 				}
 				State Done {
-					entry {
-						"System.out.println(\"Done, enter 'quit' to exit\"); "
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit"); '''
 				}
 			}
 		}
@@ -169,16 +147,12 @@
 					triggers {
 						<hello: hlp>
 					}
-					action {
-						"System.out.println(\"helper said \"+txt);"
-						"p0.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
-				}
+					action '''
+						System.out.println("helper said "+transitionData);
+						p0.hello("this is AC1, instance "+getInstancePath());''' }
 				State Ready
 				State AskHelper {
-					entry {
-						"hlp.sayHello();"
-					}
+					entry '''hlp.sayHello();'''
 				}
 			}
 		}
@@ -209,9 +183,7 @@
 					triggers {
 						<sayHello: p0>
 					}
-					action {
-						"p0.hello(\"this is AC3, instance \"+getInstancePath());"
-					}
+					action '''p0.hello("this is AC3, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -224,7 +196,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/gen_DynAct3.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/gen_DynAct3.launch
index 6874f24..0b3d374 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/gen_DynAct3.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors3/gen_DynAct3.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
 <stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors3/DynAct3.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/DynAct4.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/DynAct4.room
index db2edb9..db9f710 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/DynAct4.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/DynAct4.room
@@ -39,10 +39,7 @@
 					triggers {
 						<hello: opt>
 					}
-					action {
-						"System.out.println(\"controller received \"+txt);"
-					}
-				}
+					action '''System.out.println("controller received "+transitionData);''' }
 				Transition tr2: createOpt1 -> UnexpectedError {
 					triggers {
 						<error: wrk>
@@ -54,25 +51,17 @@
 					}
 				}
 				State createOpt1 {
-					entry {
-						"wrk.create(\"Optional1\");"
-					}
+					entry '''wrk.create("Optional1");'''
 				}
 				State SendHello {
-					entry {
-						"opt.sayHello();"
-					}
+					entry '''opt.sayHello();'''
 				}
 				State TryCreateInvalid {
-					entry {
-						"wrk.create(\"Optional\");"
-					}
+					entry '''wrk.create("Optional");'''
 				}
 				State UnexpectedError
 				State ExpectedError {
-					entry {
-						"System.out.println(\"Done, enter 'quit' to exit\"); "
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit"); '''
 				}
 			}
 		}
@@ -90,10 +79,9 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation dumpTree(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
-			}
+			Operation dumpTree(msg: string) '''
+				System.out.println(msg);
+				System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());'''
 			
 			StateMachine {
 				Transition init: initial -> Ready { }
@@ -101,13 +89,11 @@
 					triggers {
 						<create: fct>
 					}
-					action {
-						"if (optRef.createOptionalActor(ac, getThread()))"
-						"\tfct.ok();"
-						"else"
-						"\tfct.error();"
-					}
-				}
+					action '''
+						if (optRef.createOptionalActor(transitionData, getThread()))
+							fct.ok();
+						else
+							fct.error();''' }
 				State Ready
 			}
 		}
@@ -165,16 +151,12 @@
 					triggers {
 						<hello: hlp>
 					}
-					action {
-						"System.out.println(\"helper said \"+txt);"
-						"p0.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
-				}
+					action '''
+						System.out.println("helper said "+transitionData);
+						p0.hello("this is AC1, instance "+getInstancePath());''' }
 				State Ready
 				State AskHelper {
-					entry {
-						"hlp.sayHello();"
-					}
+					entry '''hlp.sayHello();'''
 				}
 			}
 		}
@@ -205,9 +187,7 @@
 					triggers {
 						<sayHello: p0>
 					}
-					action {
-						"p0.hello(\"this is AC3, instance \"+getInstancePath());"
-					}
+					action '''p0.hello("this is AC3, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -220,13 +200,13 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 	
 	ProtocolClass PWorker {
 		incoming {
-			Message create(ac: string)
+			Message create(string)
 		}
 		outgoing {
 			Message ok()
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/gen_DynAct4.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/gen_DynAct4.launch
index 2304f3a..e9c9f88 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/gen_DynAct4.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors4/gen_DynAct4.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
 <stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors4/DynAct4.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/DynAct5.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/DynAct5.room
index ccfc961..437b4a3 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/DynAct5.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/DynAct5.room
@@ -28,10 +28,9 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation dumpTree(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
-			}
+			Operation dumpTree(msg: string) '''
+				System.out.println(msg);
+				System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());'''
 			
 			StateMachine {
 				Transition init: initial -> CreateOptional { }
@@ -39,22 +38,17 @@
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"System.out.println(txt+\"\\n\");"
-						"opt.destroyOptionalActor();"
-						"dumpTree(\"after deletion of Optional2\");"
-					}
-				}
+					action '''
+						System.out.println(transitionData+"\n");
+						opt.destroyOptionalActor();
+						dumpTree("after deletion of Optional2");''' }
 				State CreateOptional {
-					entry {
-						"opt.createOptionalActor(\"Optional\", getThread());"
-						"p0.sayHello();"
-					}
+					entry '''
+						opt.createOptionalActor("Optional", getThread());
+						p0.sayHello();'''
 				}
 				State Done {
-					entry {
-						"System.out.println(\"Done, enter 'quit' to exit\"); "
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit"); '''
 				}
 			}
 		}
@@ -76,9 +70,7 @@
 					triggers {
 						<sayHello: p0>
 					}
-					action {
-						"p0.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
+					action '''p0.hello("this is AC1, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -91,7 +83,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/gen_DynAct5.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/gen_DynAct5.launch
index f8da464..211fd75 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/gen_DynAct5.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors5/gen_DynAct5.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
 <stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors5/DynAct5.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/DynAct6.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/DynAct6.room
index 22fba96..5f5da04 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/DynAct6.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/DynAct6.room
@@ -28,10 +28,9 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation dumpTree(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
-			}
+			Operation dumpTree(msg: string) '''
+				System.out.println(msg);
+				System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());'''
 			
 			StateMachine {
 				Transition init: initial -> CreateOptional2 { }
@@ -39,23 +38,20 @@
 					triggers {
 						<hello: p0>
 					}
-					action {
-						"dumpTree(\"after received hello\");"
-						""
-						"System.out.println(\"received \"+txt);"
-						"System.out.println(\"Done, enter \'quit\' to exit\");"
-					}
-				}
+					action '''
+						dumpTree("after received hello");
+						
+						System.out.println("received "+transitionData);
+						System.out.println("Done, enter 'quit' to exit");''' }
 				State CreateOptional2 {
-					entry {
-						"opt.createOptionalActor(\"Optional2\", getThread());"
-						"dumpTree(\"after creation of Optional2\");"
-						""
-						"// at this point the port isn\'t connected since"
-						"// the init message isn\'t processed yet"
-						"// - so no peer port exists"
-						"p0.sayHello();"
-					}
+					entry '''
+						opt.createOptionalActor("Optional2", getThread());
+						dumpTree("after creation of Optional2");
+						
+						// at this point the port isn't connected since
+						// the init message isn't processed yet
+						// - so no peer port exists
+						p0.sayHello();'''
 				}
 				State Done
 			}
@@ -97,9 +93,7 @@
 			StateMachine {
 				Transition init: initial -> Ready { }
 				State Ready {
-					entry {
-						"p0.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
+					entry '''p0.hello("this is AC1, instance "+getInstancePath());'''
 				}
 			}
 		}
@@ -128,9 +122,7 @@
 			StateMachine {
 				Transition init: initial -> Ready { }
 				State Ready {
-					entry {
-						"nestedOpt.createOptionalActor(\"Optional1\", getThread());"
-					}
+					entry '''nestedOpt.createOptionalActor("Optional1", getThread());'''
 				}
 			}
 		}
@@ -142,7 +134,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 }
\ No newline at end of file
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/gen_DynAct6.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/gen_DynAct6.launch
index 3ed6d29..f166fdf 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/gen_DynAct6.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors6/gen_DynAct6.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
-<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java}"/>
+<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors6}/genmodel.rim"/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors6/DynAct6.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="true"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/DynAct7.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/DynAct7.room
index 141bad1..98cb7cc 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/DynAct7.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/DynAct7.room
@@ -41,10 +41,7 @@
 					triggers {
 						<hello: pin>
 					}
-					action {
-						"System.out.println(\"Controller received: \"+txt);"
-					}
-				}
+					action '''System.out.println("Controller received: "+transitionData);''' }
 				Transition tr2: Destroy -> CreateAgain {
 					triggers {
 						<done: pcont>
@@ -59,39 +56,24 @@
 					triggers {
 						<hello: pin>
 					}
-					action {
-						"System.out.println(\"Controller received: \"+txt);"
-					}
-				}
+					action '''System.out.println("Controller received: "+transitionData);''' }
 				State CreateOptionals {
-					entry {
-						"pcont.createOpts();"
-					}
+					entry '''pcont.createOpts();'''
 				}
 				State Sending {
-					entry {
-						"pout.sayHello();"
-					}
+					entry '''pout.sayHello();'''
 				}
 				State Done {
-					entry {
-						"System.out.println(\"Done, enter \'quit\' to exit\");"
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit");'''
 				}
 				State Destroy {
-					entry {
-						"pcont.destroyOpts();"
-					}
+					entry '''pcont.destroyOpts();'''
 				}
 				State CreateAgain {
-					entry {
-						"pcont.createOpts();"
-					}
+					entry '''pcont.createOpts();'''
 				}
 				State SendAgain {
-					entry {
-						"pout.sayHello();"
-					}
+					entry '''pout.sayHello();'''
 				}
 			}
 		}
@@ -113,32 +95,29 @@
 		}
 		Behavior {
 			// this method prints the passed message and then dumps the object tree consisting of actors and ports
-			Operation dumpTree(msg: string) {
-				"System.out.println(msg);"
-				"System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());"
-			}
+			Operation dumpTree(msg: string) '''
+				System.out.println(msg);
+				System.out.println(((org.eclipse.etrice.runtime.java.messaging.RTObject)getRoot()).toStringRecursive());'''
 			StateMachine {
 				Transition init: initial -> Ready { }
 				Transition tr0: Ready -> Ready {
 					triggers {
 						<createOpts: fct>
 					}
-					action {
-						"opt1.createOptionalActor(\"Optional1\", getThread());"
-						"opt2.createOptionalActor(\"Optional2\", getThread());"
-						"dumpTree(\"after creation of op1 and opt2\");"
-						"fct.done();"
-					}
+					action '''
+						opt1.createOptionalActor("Optional1", getThread());
+						opt2.createOptionalActor("Optional2", getThread());
+						dumpTree("after creation of op1 and opt2");
+						fct.done();'''
 				}
 				Transition tr1: Ready -> Ready {
 					triggers {
 						<destroyOpts: fct>
 					}
-					action {
-						"opt1.destroyOptionalActor();"
-						"opt2.destroyOptionalActor();"
-						"fct.done();"
-					}
+					action '''
+						opt1.destroyOptionalActor();
+						opt2.destroyOptionalActor();
+						fct.done();'''
 				}
 				State Ready
 			}
@@ -187,9 +166,7 @@
 					triggers {
 						<sayHello: pin>
 					}
-					action {
-						"pout.hello(\"this is AC1, instance \"+getInstancePath());"
-					}
+					action '''pout.hello("this is AC1, instance "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -212,11 +189,10 @@
 					triggers {
 						<hello: pin>
 					}
-					action {
-						"System.out.println(\"AC2 received \"+txt);"
-						""
-						"pout.hello(\"AC2: forwarding \"+txt);"
-					}
+					action '''
+						System.out.println("AC2 received "+transitionData);
+						
+						pout.hello("AC2: forwarding "+transitionData);'''
 				}
 				State Ready
 			}
@@ -228,7 +204,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/gen_DynAct7.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/gen_DynAct7.launch
index fbdd8cb..6010d2d 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/gen_DynAct7.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors7/gen_DynAct7.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
-<stringAttribute key="GenModelPath" value="${workspace_loc:/org.eclipse.etrice.examples.java}"/>
+<stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors7/DynAct7.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/DynAct8.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/DynAct8.room
index df471f1..6c010b6 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/DynAct8.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/DynAct8.room
@@ -20,13 +20,10 @@
 
 	ActorClass Container {
 		Structure {
-			usercode1 {
-				"import java.io.File;"
-			}
-			usercode2 {
-				"private static final String FIRST_OPT_OBJ = \"firstOpt.obj\";"
-				"private static final String SECOND_OPT_OBJ = \"secondOpt.obj\";"
-			}
+			usercode1 '''import java.io.File;'''
+			usercode2 '''
+				private static final String FIRST_OPT_OBJ = "firstOpt.obj";
+				private static final String SECOND_OPT_OBJ = "secondOpt.obj";'''
 			conjugated Port op: PStep
 			conjugated Port opa [*]: PStep
 			optional ActorRef opt: Optional
@@ -35,89 +32,67 @@
 			Binding opa and optarr.fct
 		}
 		Behavior {
-			Operation clean() {
-				"File f = new File(FIRST_OPT_OBJ);"
-				"if (f.exists())"
-				"\tf.delete();"
-			}
+			Operation clean() '''
+				File f = new File(FIRST_OPT_OBJ);
+				if (f.exists())
+					f.delete();'''
 			StateMachine {
 				Transition init: initial -> Init { }
 				Transition tr0: Init -> DestroyAndCreate {
 					triggers {
 						<hello: op>
 					}
-					action {
-						"System.out.println(\"received \"+txt);"
-					}
-				}
+					action '''System.out.println("received "+transitionData);''' }
 				Transition tr1: DestroyAndCreate -> DestroyAndRestore {
 					triggers {
 						<hello: op>
 					}
-					action {
-						"System.out.println(\"received \"+txt);"
-					}
-				}
+					action '''System.out.println("received "+transitionData);''' }
 				Transition tr2: DestroyAndRestore -> LoadInArray {
 					triggers {
 						<hello: op>
 					}
-					action {
-						"System.out.println(\"received \"+txt);"
-					}
-				}
+					action '''System.out.println("received "+transitionData);''' }
 				Transition tr3: LoadInArray -> ReceivedHello {
 					triggers {
 						<hello: opa>
 					}
-					action {
-						"System.out.println(\"received \"+txt);"
-					}
-				}
+					action '''System.out.println("received "+transitionData);''' }
 				Transition tr4: ReceivedHello -> Done {
 					triggers {
 						<hello: opa>
 					}
-					action {
-						"System.out.println(\"received \"+txt);"
-					}
-				}
+					action '''System.out.println("received "+transitionData);''' }
 				State Init {
-					entry {
-						"clean();"
-						"FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, \"Optional1\");"
-						"op.step();"
-						"op.step();"
-						"op.sayHello();"
-					}
+					entry '''
+						clean();
+						FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, "Optional1");
+						op.step();
+						op.step();
+						op.sayHello();'''
 				}
 				State DestroyAndCreate {
-					entry {
-						"FilePersistor.saveAndDestroy(opt, FIRST_OPT_OBJ);"
-						"FilePersistor.createAndLoad(opt, getThread(), SECOND_OPT_OBJ, \"Optional2\");"
-						"op.step();"
-						"op.step();"
-						"op.sayHello();"
-					}
+					entry '''
+						FilePersistor.saveAndDestroy(opt, FIRST_OPT_OBJ);
+						FilePersistor.createAndLoad(opt, getThread(), SECOND_OPT_OBJ, "Optional2");
+						op.step();
+						op.step();
+						op.sayHello();'''
 				}
 				State DestroyAndRestore {
-					entry {
-						"FilePersistor.saveAndDestroy(opt, SECOND_OPT_OBJ);"
-						"FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, \"Optional1\");"
-						"op.sayHello();"
-					}
+					entry '''
+						FilePersistor.saveAndDestroy(opt, SECOND_OPT_OBJ);
+						FilePersistor.createAndLoad(opt, getThread(), FIRST_OPT_OBJ, "Optional1");
+						op.sayHello();'''
 				}
 				State Done {
-					entry {
-						"System.out.println(\"Done, enter 'quit' to exit\");"
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit");'''
 				}
 				State LoadInArray {
-					entry {
-						"FilePersistor.createAndLoad(optarr, getThread(), FIRST_OPT_OBJ, \"Optional1\");"
-						"FilePersistor.createAndLoad(optarr, getThread(), SECOND_OPT_OBJ, \"Optional2\");"
-						"opa.sayHello();"
-					}
+					entry '''
+						FilePersistor.createAndLoad(optarr, getThread(), FIRST_OPT_OBJ, "Optional1");
+						FilePersistor.createAndLoad(optarr, getThread(), SECOND_OPT_OBJ, "Optional2");
+						opa.sayHello();'''
 				}
 				State ReceivedHello
 			}
@@ -173,38 +148,29 @@
 					triggers {
 						<step: fct>
 					}
-					action {
-						"dp.step();"
-					}
+					action '''dp.step();'''
 				}
 				Transition tr1: Step2 -> Step3 {
 					triggers {
 						<step: fct>
 					}
-					action {
-						"dp.step();"
-					}
+					action '''dp.step();'''
 				}
 				Transition tr2: my tp0 -> my tp0 {
 					triggers {
 						<sayHello: fct>
 					}
-					action {
-						"fct.hello(getClassName()+\", state=\"+stateStrings[getState()]+\", path= \"+getInstancePath());"
-					}
+					action '''fct.hello(getClassName()+", state="+stateStrings[getState()]+", path= "+getInstancePath());'''
 				}
 				handler TransitionPoint tp0
 				State Step1 {
-					entry {
-						"ival = 1;"
-						"sval = 2;"
-						"bval = 3;"
-					}
+					entry '''
+						ival = 1;
+						sval = 2;
+						bval = 3;'''
 				}
 				State Step2 {
-					entry {
-						"ival = 123;"
-					}
+					entry '''ival = 123;'''
 				}
 				State Step3 {
 					subgraph {
@@ -213,27 +179,19 @@
 							triggers {
 								<step: fct>
 							}
-							action {
-								"dp.step();"
-							}
+							action '''dp.step();'''
 						}
 						Transition tr1: StepB -> StepC {
 							triggers {
 								<step: fct>
 							}
-							action {
-								"dp.step();"
-							}
+							action '''dp.step();'''
 						}
 						State StepA {
-							entry {
-								"sval = 456;"
-							}
+							entry '''sval = 456;'''
 						}
 						State StepB {
-							entry {
-								"bval = 13;"
-							}
+							entry '''bval = 13;'''
 						}
 						State StepC
 					}
@@ -306,9 +264,7 @@
 					triggers {
 						<sayHello: fct>
 					}
-					action {
-						"fct.hello(getClassName()+\", state=\"+stateStrings[getState()]+\", path= \"+getInstancePath());"
-					}
+					action '''fct.hello(getClassName()+", state="+stateStrings[getState()]+", path= "+getInstancePath());'''
 				}
 				State Ready
 			}
@@ -321,7 +277,7 @@
 			Message sayHello()
 		}
 		outgoing {
-			Message hello(txt: string)
+			Message hello(string)
 		}
 	}
 
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/gen_DynAct8.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/gen_DynAct8.launch
index 517e190..202420f 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/gen_DynAct8.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors8/gen_DynAct8.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
 <stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors8/DynAct8.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/DynAct9.room b/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/DynAct9.room
index 62f9880..dd95864 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/DynAct9.room
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/DynAct9.room
@@ -28,9 +28,7 @@
 			StateMachine {
 				Transition init: initial -> Running { }
 				State Running {
-					entry {
-						"pp.createOptionalActor(\"PingPong\", getThread());"
-					}
+					entry '''pp.createOptionalActor("PingPong", getThread());'''
 				}
 			}
 		}
@@ -60,14 +58,10 @@
 					}
 				}
 				State SendingPing {
-					entry {
-						"receiver.ping();"
-					}
+					entry '''receiver.ping();'''
 				}
 				State ReceivedPong {
-					entry {
-						"System.out.println(\"Done, enter \'quit\' to exit\");"
-					}
+					entry '''System.out.println("Done, enter 'quit' to exit");'''
 				}
 			}
 		}
@@ -96,14 +90,10 @@
 				}
 				State WaitingForPing
 				State WaitingForAWhile {
-					entry {
-						"timing.startTimeout(1000);"
-					}
+					entry '''timing.startTimeout(1000);'''
 				}
 				State SentPong {
-					entry {
-						"sender.pong();"
-					}
+					entry '''sender.pong();'''
 				}
 			}
 		}
diff --git a/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/gen_DynAct9.launch b/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/gen_DynAct9.launch
index 9e00f69..d3a09d6 100644
--- a/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/gen_DynAct9.launch
+++ b/examples/org.eclipse.etrice.examples.java/model/dynamicactors9/gen_DynAct9.launch
@@ -1,15 +1,19 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <launchConfiguration type="org.eclipse.etrice.generator.launch.java.launchConfigurationType">
+<booleanAttribute key="DataLogging" value="false"/>
 <booleanAttribute key="DataObj" value="false"/>
 <booleanAttribute key="Debug" value="false"/>
 <booleanAttribute key="GenDocumentation" value="false"/>
 <booleanAttribute key="GenInstanceDiagram" value="false"/>
 <stringAttribute key="GenModelPath" value=""/>
+<booleanAttribute key="GenerateDepsWithinProject" value="true"/>
 <booleanAttribute key="Lib" value="false"/>
 <booleanAttribute key="MSC" value="true"/>
+<stringAttribute key="MainMethodName" value="main"/>
 <listAttribute key="ModelFiles">
 <listEntry value="${workspace_loc:/org.eclipse.etrice.examples.java/model/dynamicactors9/DynAct9.etmap}"/>
 </listAttribute>
+<booleanAttribute key="OldStyleTransitionData" value="false"/>
 <booleanAttribute key="OverrideDirectories" value="false"/>
 <booleanAttribute key="Persist" value="false"/>
 <booleanAttribute key="SaveGenModel" value="false"/>
diff --git a/examples/org.eclipse.etrice.tutorials.java/.classpath b/examples/org.eclipse.etrice.tutorials.java/.classpath
index cc9822b..c975f7a 100644
--- a/examples/org.eclipse.etrice.tutorials.java/.classpath
+++ b/examples/org.eclipse.etrice.tutorials.java/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.etrice.modellib.java"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.etrice.runtime.java"/>
diff --git a/examples/org.eclipse.etrice.tutorials.java/.project b/examples/org.eclipse.etrice.tutorials.java/.project
index 64b37c4..83b58e7 100644
--- a/examples/org.eclipse.etrice.tutorials.java/.project
+++ b/examples/org.eclipse.etrice.tutorials.java/.project
@@ -24,6 +24,5 @@
 	<natures>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 	</natures>
 </projectDescription>
diff --git a/examples/org.eclipse.etrice.tutorials.java/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.etrice.tutorials.java/.settings/org.eclipse.jdt.core.prefs
index f322036..50d2ca5 100644
--- a/examples/org.eclipse.etrice.tutorials.java/.settings/org.eclipse.jdt.core.prefs
+++ b/examples/org.eclipse.etrice.tutorials.java/.settings/org.eclipse.jdt.core.prefs
@@ -1,9 +1,9 @@
-#Mon Sep 19 09:33:05 CEST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
@@ -78,4 +78,5 @@
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/examples/org.eclipse.etrice.tutorials.simulators.trafficlight.example/.classpath b/examples/org.eclipse.etrice.tutorials.simulators.trafficlight.example/.classpath
index 80d796d..c52753f 100644
--- a/examples/org.eclipse.etrice.tutorials.simulators.trafficlight.example/.classpath
+++ b/examples/org.eclipse.etrice.tutorials.simulators.trafficlight.example/.classpath
@@ -2,7 +2,7 @@
 <classpath>
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="/org.eclipse.etrice.runtime.java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.etrice.modellib.java"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.classpath b/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.classpath
index 18d70f0..fceb480 100644
--- a/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.classpath
+++ b/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.settings/org.eclipse.jdt.core.prefs b/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.settings/org.eclipse.jdt.core.prefs
index a23aa28..87b7a7a 100644
--- a/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.settings/org.eclipse.jdt.core.prefs
+++ b/examples/org.eclipse.etrice.tutorials.simulators.trafficlight/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,13 @@
-#Sat Jun 16 13:47:44 CEST 2012
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/features/org.eclipse.etrice.cdt-integration.feature/feature.xml b/features/org.eclipse.etrice.cdt-integration.feature/feature.xml
index 8c0880e..550b6a2 100644
--- a/features/org.eclipse.etrice.cdt-integration.feature/feature.xml
+++ b/features/org.eclipse.etrice.cdt-integration.feature/feature.xml
@@ -15,7 +15,7 @@
    
  -->
 <feature
-      id="org.eclipse.etrice.cdt-integration.feature"
+      id="org.eclipse.etrice.cdt_integration.feature"
       label="%featureName"
       version="2.0.0.qualifier"
       provider-name="%providerName"
@@ -46,6 +46,11 @@
       <import plugin="org.eclipse.cdt.managedbuilder.core" version="8.2.1" match="greaterOrEqual"/>
       <import plugin="org.eclipse.equinox.common" version="3.6.200" match="greaterOrEqual"/>
       <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.ant.launching"/>
+      <import feature="org.eclipse.cdt" version="8.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ant.core"/>
+      <import plugin="org.eclipse.ant.ui"/>
+      <import plugin="org.eclipse.core.externaltools"/>
    </requires>
 
    <plugin
diff --git a/gradle/scmVersion.gradle b/gradle/scmVersion.gradle
index 71726d5..b416d4e 100644
--- a/gradle/scmVersion.gradle
+++ b/gradle/scmVersion.gradle
@@ -9,6 +9,10 @@
 
 apply plugin: pl.allegro.tech.build.axion.release.ReleasePlugin
 
+if(properties.get('build.type') == 'N') {
+	ext.set('release.forceSnapshot', true)
+}
+
 scmVersion {
  	tag {
 		prefix = 'v'
diff --git a/plugins/org.eclipse.etrice.abstractexec.behavior/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.abstractexec.behavior/META-INF/MANIFEST.MF
index 8e07fe8..75235e8 100644
--- a/plugins/org.eclipse.etrice.abstractexec.behavior/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.abstractexec.behavior/META-INF/MANIFEST.MF
@@ -16,3 +16,4 @@
 Bundle-Activator: org.eclipse.etrice.abstractexec.behavior.Activator
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.etrice.abstractexec.behavior
+Automatic-Module-Name: org.eclipse.etrice.abstractexec.behavior
diff --git a/plugins/org.eclipse.etrice.abstractexec.behavior/src/org/eclipse/etrice/abstractexec/behavior/ProposalGenerator.java b/plugins/org.eclipse.etrice.abstractexec.behavior/src/org/eclipse/etrice/abstractexec/behavior/ProposalGenerator.java
index b3fe07e..077f27f 100644
--- a/plugins/org.eclipse.etrice.abstractexec.behavior/src/org/eclipse/etrice/abstractexec/behavior/ProposalGenerator.java
+++ b/plugins/org.eclipse.etrice.abstractexec.behavior/src/org/eclipse/etrice/abstractexec/behavior/ProposalGenerator.java
@@ -78,7 +78,7 @@
 			Set<EObject> messages = new HashSet<EObject>();
 			for (CommonTrigger t : node.getCaughtTriggers()) {
 				if (t.getIfitem().equals(port)) {
-					messages.add((EObject)t.getMsg());
+					messages.add(t.getMsg());
 				}
 			}
 			
diff --git a/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF
index 09ef6d5..7ec592d 100644
--- a/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.common.ui/META-INF/MANIFEST.MF
@@ -35,3 +35,4 @@
  org.eclipse.etrice.core.common.ui.linking,
  org.eclipse.etrice.core.common.ui.quickfix
 Bundle-Activator: org.eclipse.etrice.core.common.ui.ETriceCoreCommonActivator
+Automatic-Module-Name: org.eclipse.etrice.core.common.ui
diff --git a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/hover/KeywordHoverProvider.java b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/hover/KeywordHoverProvider.java
index b938f1c..4df362c 100644
--- a/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/hover/KeywordHoverProvider.java
+++ b/plugins/org.eclipse.etrice.core.common.ui/src/org/eclipse/etrice/core/common/ui/hover/KeywordHoverProvider.java
@@ -58,6 +58,7 @@
 			Keyword keyword = (Keyword) element;
 			String html = contentProvider.getHTMLContent(keyword.getValue());
 			if (html != null) {
+				// TODO: in Xtext 2.15 replace with StringBuilder
 				StringBuffer buffer = new StringBuffer(html);
 				HTMLPrinter.insertPageProlog(buffer, 0, getKeywordStyleSheet());
 				HTMLPrinter.addPageEpilog(buffer);
diff --git a/plugins/org.eclipse.etrice.core.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.common/META-INF/MANIFEST.MF
index 5f68100..9f854a0 100644
--- a/plugins/org.eclipse.etrice.core.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.common/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
  org.eclipse.emf.codegen.ecore;resolution:=optional,
  org.eclipse.emf.mwe.utils;resolution:=optional,
  org.eclipse.emf.mwe2.launch;resolution:=optional,
- org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional,
+ org.objectweb.asm;bundle-version="[5.0.0,7.0.0)";resolution:=optional,
  org.eclipse.emf.ecore,
  org.eclipse.emf.common,
  org.antlr.runtime,
@@ -42,4 +42,5 @@
  org.eclipse.etrice.core.common.serializer,
  org.eclipse.etrice.core.common.services,
  org.eclipse.etrice.core.common.validation
+Automatic-Module-Name: org.eclipse.etrice.core.common
 
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/scoping/StandardModelLocator.java b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/scoping/StandardModelLocator.java
index 10e0683..8533217 100644
--- a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/scoping/StandardModelLocator.java
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/scoping/StandardModelLocator.java
@@ -37,7 +37,7 @@
  */
 public class StandardModelLocator implements IModelLocator {
 
-	private static final String CLASSPATH = "classpath:/";
+	private static final String CLASSPATH = "classpath";
 	private static final Map<String, String> env = System.getenv();
 
 	/**
@@ -63,7 +63,7 @@
 			URIConverter converter = resource==null? null : resource.getResourceSet().getURIConverter();
 			URI canonical = getCanonicalFileURI(resolve, converter);
 			// TODO handle non-file URIs more generically
-			if(canonical != null && (canonical.isFile() || canonical.isArchive() || canonical.isPlatform() || canonical.scheme() == "classpath")) {
+			if(canonical != null && (canonical.isFile() || canonical.isArchive() || canonical.isPlatform() || canonical.scheme() == CLASSPATH)) {
 				resolve = canonical.toString();
 			}
 			else {
@@ -203,7 +203,7 @@
 	 *         exists, or false if platUri is mapped to a different URI
 	 *         than fileUri.
 	 */
-	private boolean updateURIMapEntry(Resource res, URI platUri, URI fileUri) {
+	boolean updateURIMapEntry(Resource res, URI platUri, URI fileUri) {
 		// map the absolute file uri to a platform resource path
 		if(res == null) return false;
 		Map<URI, URI> uriMap = res.getResourceSet().getURIConverter()
@@ -260,7 +260,7 @@
 	 *         if the URI is not a platform URI, or if the Eclipse WorkspaceRoot
 	 *         cannot be accessed. Otherwise true.
 	 */
-	private boolean existsInPlatform(URI uri) {
+	boolean existsInPlatform(URI uri) {
 		if(!EMFPlugin.IS_ECLIPSE_RUNNING)
 			return false;
 		
@@ -287,7 +287,7 @@
 	 * @return false if the URI does not point to an existing file resource or
 	 *         if the URI is not a file URI. Otherwise true.
 	 */
-	private boolean existsInFileSys(URI uri) {
+	boolean existsInFileSys(URI uri) {
 		if (!uri.isFile())
 			return false;
 		java.io.File extFile = new File(uri.toFileString());
@@ -301,7 +301,7 @@
 			uri = URI.createURI(uriString);
 		} catch(IllegalArgumentException e1) {
 		}
-		if(uri == null || !(uri.isFile() || uri.isArchive() || uri.isPlatform() || uri.scheme() == "classpath")) {
+		if(uri == null || !(uri.isFile() || uri.isArchive() || uri.isPlatform() || uri.scheme() == CLASSPATH)) {
 			// try file path
 			uri = URI.createFileURI(uriString);
 		}
diff --git a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/validation/ValidationHelpers.xtend b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/validation/ValidationHelpers.xtend
index 1125c9c..29f2c93 100644
--- a/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/validation/ValidationHelpers.xtend
+++ b/plugins/org.eclipse.etrice.core.common/src/org/eclipse/etrice/core/common/validation/ValidationHelpers.xtend
@@ -27,7 +27,7 @@
  */
 class ValidationHelpers {
 
-	public static class NamedObject {
+	static class NamedObject {
 		@Property String name
 		@Property EObject obj
 		@Property EStructuralFeature feature
@@ -39,7 +39,7 @@
 		}
 	}
 
-	public static class NamedObjectList extends ArrayList<NamedObject> {
+	static class NamedObjectList extends ArrayList<NamedObject> {
 		def addAll(List<? extends EObject> items, EStructuralFeature feature) {
 			items.forEach[this.add(new NamedObject(it.eGet(feature) as String, it, feature))]
 		}
diff --git a/plugins/org.eclipse.etrice.core.config.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.config.ui/META-INF/MANIFEST.MF
index d70612d..41d1492 100644
--- a/plugins/org.eclipse.etrice.core.config.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.config.ui/META-INF/MANIFEST.MF
@@ -30,3 +30,4 @@
  org.eclipse.etrice.core.ui.quickfix,
  org.eclipse.etrice.core.ui.contentassist.antlr.internal
 Bundle-Activator: org.eclipse.etrice.core.ui.internal.ConfigActivator
+Automatic-Module-Name: org.eclipse.etrice.core.config.ui
diff --git a/plugins/org.eclipse.etrice.core.config/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.config/META-INF/MANIFEST.MF
index f155f7f..5085894 100644
--- a/plugins/org.eclipse.etrice.core.config/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.config/META-INF/MANIFEST.MF
@@ -39,3 +39,4 @@
  org.eclipse.etrice.core.scoping,
  org.eclipse.etrice.core.generator,
  org.eclipse.etrice.core.formatting
+Automatic-Module-Name: org.eclipse.etrice.core.config
diff --git a/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/ImplPostprocesser.xtend b/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/ImplPostProcessor.xtend
similarity index 98%
rename from plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/ImplPostprocesser.xtend
rename to plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/ImplPostProcessor.xtend
index 73e718f..9f251cf 100644
--- a/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/ImplPostprocesser.xtend
+++ b/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/ImplPostProcessor.xtend
@@ -19,7 +19,7 @@
 
 import static extension org.eclipse.etrice.core.common.postprocessing.PostprocessingHelpers.*
 
-class ImplPostProcessing {
+class ImplPostProcessor {
 	
 	def process(GeneratedMetamodel metamodel) {
 		val configPackage = metamodel.EPackage
diff --git a/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/PostprocessorController.java b/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/PostprocessorController.java
index d7c44d9..da3198b 100644
--- a/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/PostprocessorController.java
+++ b/plugins/org.eclipse.etrice.core.config/src/org/eclipse/etrice/core/postprocessing/PostprocessorController.java
@@ -19,6 +19,6 @@
 public class PostprocessorController {
 	public static void process(GeneratedMetamodel metamodel){
 		new DocuPostprocessor().process(metamodel);
-		new ImplPostProcessing().process(metamodel);
+		new ImplPostProcessor().process(metamodel);
 	}
 }
diff --git a/plugins/org.eclipse.etrice.core.etmap.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.etmap.ui/META-INF/MANIFEST.MF
index 43adbc6..6b2c0aa 100644
--- a/plugins/org.eclipse.etrice.core.etmap.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.etmap.ui/META-INF/MANIFEST.MF
@@ -28,3 +28,4 @@
  org.eclipse.etrice.core.etmap.ui.internal,
  org.eclipse.etrice.core.etmap.ui.quickfix
 Bundle-Activator: org.eclipse.etrice.core.etmap.ui.internal.ETMapActivator
+Automatic-Module-Name: org.eclipse.etrice.core.etmap.ui
diff --git a/plugins/org.eclipse.etrice.core.etmap/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.etmap/META-INF/MANIFEST.MF
index c829633..79a524e 100644
--- a/plugins/org.eclipse.etrice.core.etmap/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.etmap/META-INF/MANIFEST.MF
@@ -40,4 +40,5 @@
  org.eclipse.etrice.core.etmap.services,
  org.eclipse.etrice.core.etmap.util,
  org.eclipse.etrice.core.etmap.validation
+Automatic-Module-Name: org.eclipse.etrice.core.etmap
 
diff --git a/plugins/org.eclipse.etrice.core.etphys.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.etphys.ui/META-INF/MANIFEST.MF
index 7d5a4b3..cb6e6ff 100644
--- a/plugins/org.eclipse.etrice.core.etphys.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.etphys.ui/META-INF/MANIFEST.MF
@@ -25,3 +25,4 @@
  org.eclipse.etrice.core.etphys.ui.quickfix,
  org.eclipse.etrice.core.etphys.ui.contentassist.antlr.internal
 Bundle-Activator: org.eclipse.etrice.core.etphys.ui.internal.ETPhysActivator
+Automatic-Module-Name: org.eclipse.etrice.core.etphys.ui
diff --git a/plugins/org.eclipse.etrice.core.etphys/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.etphys/META-INF/MANIFEST.MF
index 9381264..867c164 100644
--- a/plugins/org.eclipse.etrice.core.etphys/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.etphys/META-INF/MANIFEST.MF
@@ -34,4 +34,5 @@
  org.eclipse.etrice.core.etphys.serializer,
  org.eclipse.etrice.core.etphys.services,
  org.eclipse.etrice.core.etphys.validation
+Automatic-Module-Name: org.eclipse.etrice.core.etphys
 
diff --git a/plugins/org.eclipse.etrice.core.fsm.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.fsm.ui/META-INF/MANIFEST.MF
index 44bc27f..d43f3fa 100644
--- a/plugins/org.eclipse.etrice.core.fsm.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.fsm.ui/META-INF/MANIFEST.MF
@@ -29,3 +29,4 @@
  org.eclipse.etrice.core.fsm.ui.labeling,
  org.eclipse.etrice.core.fsm.ui.quickfix
 Bundle-Activator: org.eclipse.etrice.core.fsm.ui.internal.FSMActivator
+Automatic-Module-Name: org.eclipse.etrice.core.fsm.ui
diff --git a/plugins/org.eclipse.etrice.core.fsm/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.fsm/META-INF/MANIFEST.MF
index dff4fc3..fb03894 100644
--- a/plugins/org.eclipse.etrice.core.fsm/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.fsm/META-INF/MANIFEST.MF
@@ -18,7 +18,7 @@
  org.eclipse.emf.ecore,
  org.eclipse.emf.common,
  org.antlr.runtime,
- org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional,
+ org.objectweb.asm;bundle-version="[5.0.1,7.0.0)";resolution:=optional,
  com.google.guava;bundle-version="8.0.0",
  org.eclipse.xtext.xbase.lib
 Import-Package: org.apache.log4j,
@@ -38,4 +38,5 @@
  org.eclipse.etrice.core.fsm.services,
  org.eclipse.etrice.core.fsm.util,
  org.eclipse.etrice.core.fsm.validation
+Automatic-Module-Name: org.eclipse.etrice.core.fsm
 
diff --git a/plugins/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore b/plugins/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore
index 419bacb..940eec9 100644
--- a/plugins/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore
+++ b/plugins/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore
@@ -78,7 +78,7 @@
         <details key="body" value="return (this instanceof &lt;%org.eclipse.etrice.core.fsm.fSM.SimpleState%>)? ((SimpleState)this).getName() :(this instanceof &lt;%org.eclipse.etrice.core.fsm.fSM.RefinedState%>)? (((RefinedState)this).getTarget()==null? &quot;&quot;:((RefinedState)this).getTarget().getName()) :&quot;&quot;;"/>
       </eAnnotations>
     </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
@@ -180,7 +180,7 @@
         <details key="documentation" value="&lt;br>By this name the choice point is referred to in the model.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
@@ -188,7 +188,7 @@
     </eStructuralFeatures>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="TransitionBase" eSuperTypes="#//StateGraphItem">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend
index 1a807c8..a7be983 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/formatting2/FSMFormatter.xtend
@@ -23,14 +23,12 @@
 import org.eclipse.etrice.core.fsm.fSM.ProtocolSemantics
 import org.eclipse.etrice.core.fsm.fSM.State
 import org.eclipse.etrice.core.fsm.fSM.StateGraph
-import org.eclipse.etrice.core.fsm.fSM.Transition
+import org.eclipse.etrice.core.fsm.fSM.TransitionBase
 import org.eclipse.etrice.core.fsm.fSM.Trigger
 import org.eclipse.etrice.core.fsm.fSM.TriggeredTransition
 import org.eclipse.etrice.core.fsm.services.FSMGrammarAccess
 import org.eclipse.xtext.formatting2.IFormattableDocument
 import org.eclipse.xtext.formatting2.regionaccess.ISemanticRegion
-import org.eclipse.etrice.core.fsm.fSM.RefinedTransition
-import org.eclipse.etrice.core.fsm.fSM.TransitionBase
 
 class FSMFormatter extends BaseFormatter {
 	
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/scoping/FSMScopeProvider.xtend b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/scoping/FSMScopeProvider.xtend
index ae5fce6..9f7606a 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/scoping/FSMScopeProvider.xtend
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/scoping/FSMScopeProvider.xtend
@@ -250,9 +250,9 @@
 	def private QualifiedName getStatePath(State bs) {
 		val EObject parent = bs.eContainer.eContainer
 		if (parent instanceof SimpleState)
-			return getStatePath(parent as SimpleState).append(bs.name)
+			return getStatePath(parent).append(bs.name)
 		else if (parent instanceof RefinedState) {
-			val State target = (parent as RefinedState).target
+			val State target = parent.target
 			if (target!==null)
 				return getStatePath(target).append(bs.name)
 		}
diff --git a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtilXtend.xtend b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtilXtend.xtend
index 54bcac8..840e82d 100644
--- a/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtilXtend.xtend
+++ b/plugins/org.eclipse.etrice.core.fsm/src/org/eclipse/etrice/core/fsm/validation/FSMValidationUtilXtend.xtend
@@ -32,12 +32,12 @@
 class FSMValidationUtilXtend {
 
 
-	public static class Result {
-		private boolean ok;
-		private String msg;
-		private EObject source;
-		private EStructuralFeature feature;
-		private int index;
+	static class Result {
+		boolean ok;
+		String msg;
+		EObject source;
+		EStructuralFeature feature;
+		int index;
 
 		def static FSMValidationUtilXtend.Result ok() {
 			return new FSMValidationUtilXtend.Result(true, "", null, null, 0);
@@ -109,7 +109,7 @@
 		var parent = obj.eContainer
 		while (parent!==null) {
 			if (parent instanceof StateGraph) {
-				return parent as StateGraph
+				return parent
 			}
 			parent = parent.eContainer
 		}
diff --git a/plugins/org.eclipse.etrice.core.genmodel.fsm/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.genmodel.fsm/META-INF/MANIFEST.MF
index a76efaf..2d28991 100644
--- a/plugins/org.eclipse.etrice.core.genmodel.fsm/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.genmodel.fsm/META-INF/MANIFEST.MF
@@ -19,3 +19,4 @@
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
 Bundle-Localization: plugin
+Automatic-Module-Name: org.eclipse.etrice.core.genmodel.fsm
diff --git a/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/BasicFsmGenBuilder.xtend b/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/BasicFsmGenBuilder.xtend
index 7123acb..fdca736 100644
--- a/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/BasicFsmGenBuilder.xtend
+++ b/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/BasicFsmGenBuilder.xtend
@@ -39,7 +39,7 @@
 	protected extension FSMHelpers fsmHelpers
 	
 	protected val factory = FsmGenFactory.eINSTANCE
-	private var int inheritanceLevel = 0
+	var int inheritanceLevel = 0
 	
 	new(FSMHelpers fsmHelpers) {
 		this.fsmHelpers = fsmHelpers
diff --git a/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/FsmGenExtensions.xtend b/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/FsmGenExtensions.xtend
index 0560b15..71debe1 100644
--- a/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/FsmGenExtensions.xtend
+++ b/plugins/org.eclipse.etrice.core.genmodel.fsm/src/org/eclipse/etrice/core/genmodel/fsm/FsmGenExtensions.xtend
@@ -36,103 +36,103 @@
 
 class FsmGenExtensions {
 	
-	public static def dispatch getName(Node nd) {
+	static def dispatch getName(Node nd) {
 		nd.stateGraphNode.name
 	}
 	
-	public static def dispatch getName(Link l) {
+	static def dispatch getName(Link l) {
 		l.transition.name
 	}
 	
-	public static def getStateNodes(Graph g) {
+	static def getStateNodes(Graph g) {
 		g.nodes.filter[stateGraphNode instanceof State]
 	}
 	
-	public static def getAllNodes(Graph g) {
+	static def getAllNodes(Graph g) {
 		g.eAllContents.filter(typeof(Node))
 	}
 	
-	public static def getAllStateNodes(Graph g) {
+	static def getAllStateNodes(Graph g) {
 		g.allNodes.filter[stateGraphNode instanceof State]
 	}
 	
-	public static def getChoicePointNodes(Graph g) {
+	static def getChoicePointNodes(Graph g) {
 		g.nodes.filter[stateGraphNode instanceof ChoicePoint]
 	}
 	
-	public static def getAllChoicePointNodes(Graph g) {
+	static def getAllChoicePointNodes(Graph g) {
 		g.allNodes.filter[stateGraphNode instanceof ChoicePoint]
 	}
 	
-	public static def getTrPointNodes(Graph g) {
+	static def getTrPointNodes(Graph g) {
 		g.nodes.filter[stateGraphNode instanceof TrPoint]
 	}
 	
-	public static def getAllTrPointNodes(Graph g) {
+	static def getAllTrPointNodes(Graph g) {
 		g.allNodes.filter[stateGraphNode instanceof TrPoint]
 	}
 	
-	public static def getTransitionPointNodes(Graph g) {
+	static def getTransitionPointNodes(Graph g) {
 		g.nodes.filter[stateGraphNode instanceof TransitionPoint]
 	}
 	
-	public static def getAllTransitionPointNodes(Graph g) {
+	static def getAllTransitionPointNodes(Graph g) {
 		g.allNodes.filter[stateGraphNode instanceof TransitionPoint]
 	}
 	
-	public static def getEntryPointNodes(Graph g) {
+	static def getEntryPointNodes(Graph g) {
 		g.nodes.filter[stateGraphNode instanceof EntryPoint]
 	}
 	
-	public static def getAllEntryPointNodes(Graph g) {
+	static def getAllEntryPointNodes(Graph g) {
 		g.allNodes.filter[stateGraphNode instanceof EntryPoint]
 	}
 	
-	public static def getExitPointNodes(Graph g) {
+	static def getExitPointNodes(Graph g) {
 		g.nodes.filter[stateGraphNode instanceof ExitPoint]
 	}
 	
-	public static def getAllExitPointNodes(Graph g) {
+	static def getAllExitPointNodes(Graph g) {
 		g.allNodes.filter[stateGraphNode instanceof ExitPoint]
 	}
 	
-	public static def getStates(Graph g) {
+	static def getStates(Graph g) {
 		g.stateNodes.map[stateGraphNode].filter(typeof(State))
 	}
 	
-	public static def getAllStates(Graph g) {
+	static def getAllStates(Graph g) {
 		g.allStateNodes.map[stateGraphNode].filter(typeof(State))
 	}
 	
-	public static def getChoicePoints(Graph g) {
+	static def getChoicePoints(Graph g) {
 		g.choicePointNodes.map[stateGraphNode].filter(typeof(ChoicePoint))
 	}
 	
-	public static def getTrPoints(Graph g) {
+	static def getTrPoints(Graph g) {
 		g.trPointNodes.map[stateGraphNode].filter(typeof(TrPoint))
 	}
 	
-	public static def getInitialTransition(Graph g) {
+	static def getInitialTransition(Graph g) {
 		g.links.map[transition].filter(typeof(InitialTransition)).head
 	}
 	
-	public static def getAllLinks(Graph g) {
+	static def getAllLinks(Graph g) {
 		g.eAllContents.filter(typeof(Link))
 	}
 	
-	public static def getAllInitialTranisitionLinks(Graph g) {
+	static def getAllInitialTranisitionLinks(Graph g) {
 		g.allLinks.filter[transition instanceof InitialTransition]
 	}
 	
-	public static def getAllTriggeredTranisitionLinks(Graph g) {
+	static def getAllTriggeredTranisitionLinks(Graph g) {
 		g.allLinks.filter[transition instanceof TriggeredTransition]
 	}
 	
-	public static def getAllContinuationTranisitionLinks(Graph g) {
+	static def getAllContinuationTranisitionLinks(Graph g) {
 		g.allLinks.filter[transition instanceof ContinuationTransition]
 	}
 	
-	public static def getAllCPBranchTranisitionLinks(Graph g) {
+	static def getAllCPBranchTranisitionLinks(Graph g) {
 		g.allLinks.filter[transition instanceof CPBranchTransition]
 	}
 	
@@ -144,7 +144,7 @@
 	 * 
      * @see #isChainHead(Link))
 	 */
-	public static def getAllChainHeads(Graph g) {
+	static def getAllChainHeads(Graph g) {
 		g.allLinks.filter[isChainHead]
 	}
 	
@@ -154,7 +154,7 @@
 	 * 
      * @see #isChainHead(TransitionBase))
 	 */
-	public static def isChainHead(Link l) {
+	static def isChainHead(Link l) {
 		l.transition.isChainHead
 	}
 	
@@ -164,7 +164,7 @@
 	 * @param l a link
 	 * @return {@code true} if this transition is of one of the above types
 	 */
-	public static def boolean isChainHead(TransitionBase t) {
+	static def boolean isChainHead(TransitionBase t) {
 		if (t instanceof RefinedTransition) {
 			t.target.isChainHead
 		}
@@ -175,19 +175,19 @@
 		}
 	}
 	
-	public static def getOutgoingTriggeredTransitionLinks(Node s) {
+	static def getOutgoingTriggeredTransitionLinks(Node s) {
 		s.outgoing.filter[transition instanceof TriggeredTransition]
 	}
 	
-	public static def getOutgoingTriggeredTransitions(Node s) {
+	static def getOutgoingTriggeredTransitions(Node s) {
 		s.getOutgoingTriggeredTransitionLinks.map[transition].filter(typeof(TriggeredTransition))
 	}
 	
-	public static def getOutgoingTransitionsHierarchically(Node s) {
+	static def getOutgoingTransitionsHierarchically(Node s) {
 		s.getOutgoingLinksHierarchically.map[transition]
 	}
 	
-	public static def getOutgoingLinksHierarchically(Node s) {
+	static def getOutgoingLinksHierarchically(Node s) {
 		val result = newArrayList
 		
 		var current = s
@@ -205,26 +205,26 @@
 		return result
 	}
 	
-	public static def isTopLevel(Graph g) {
+	static def isTopLevel(Graph g) {
 		if (g!==null) {
 			g.eContainer instanceof GraphContainer
 		}
 		else true
 	}
 	
-	public static def isEmpty(Graph g) {
+	static def isEmpty(Graph g) {
 		g===null || (g.nodes.empty && g.links.empty)
 	}
 	
-	public static def isLeaf(Node n) {
+	static def isLeaf(Node n) {
 		n.subgraph===null
 	}
 	
-	public static def isTopLevel(Node n) {
+	static def isTopLevel(Node n) {
 		n.graph.isTopLevel
 	}
 	
-	public static def getParentState(Node n) {
+	static def getParentState(Node n) {
 		if (n.isTopLevel) {
 			null
 		}
@@ -233,7 +233,7 @@
 		}
 	}
 	
-	public static def getChoicepointDefaultBranch(Node n) {
+	static def getChoicepointDefaultBranch(Node n) {
 		if (!(n.stateGraphNode instanceof ChoicePoint)) {
 			return null
 		}
@@ -241,7 +241,7 @@
 		return n.outgoing.filter[transition instanceof ContinuationTransition].head
 	}
 	
-	public static def getParentState(Link l) {
+	static def getParentState(Link l) {
 		if (l.graph.isTopLevel) {
 			null
 		}
@@ -250,7 +250,7 @@
 		}
 	}
 	
-	public static def isHandler(Link l) {
+	static def isHandler(Link l) {
 		val sourceNode = l.source.stateGraphNode
 		if (sourceNode instanceof TransitionPoint) {
 			sourceNode.isHandler
@@ -260,7 +260,7 @@
 		}
 	}
 	
-	public static def List<DetailCode> getAllDetailCodes(Graph graph) {
+	static def List<DetailCode> getAllDetailCodes(Graph graph) {
 		val detailCodes = <DetailCode>newArrayList
 		
 		if (graph!==null) {
@@ -276,7 +276,7 @@
 		return detailCodes
 	}
 	
-	public static def getLinkFor(GraphContainer gc, TransitionBase t) {
+	static def getLinkFor(GraphContainer gc, TransitionBase t) {
 		gc.graph.allLinks.findFirst[transition===t]
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.core.genmodel/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.genmodel/META-INF/MANIFEST.MF
index 4a53a69..e6d5554 100644
--- a/plugins/org.eclipse.etrice.core.genmodel/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.genmodel/META-INF/MANIFEST.MF
@@ -22,3 +22,4 @@
  org.eclipse.emf.ecore.xmi;visibility:=reexport,
  org.eclipse.etrice.generator.base;bundle-version="2.0.0"
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.core.genmodel
diff --git a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/util/RoomCrossReferencer.java b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/util/RoomCrossReferencer.java
index fbc45f5..152683b 100644
--- a/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/util/RoomCrossReferencer.java
+++ b/plugins/org.eclipse.etrice.core.genmodel/src/org/eclipse/etrice/core/genmodel/util/RoomCrossReferencer.java
@@ -110,7 +110,7 @@
 			getReferencedClassesAndModels(dataClasses, enumClasses, protocolClasses,
 					actorClasses, models);
 
-			protocolClasses.remove((ProtocolClass) rc);
+			protocolClasses.remove(rc);
 		}
 		return protocolClasses;
 	}
diff --git a/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF
index d593980..e875da7 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.room.ui/META-INF/MANIFEST.MF
@@ -38,3 +38,4 @@
  org.eclipse.etrice.core.ui.quickfix,
  org.eclipse.etrice.core.ui.util
 Bundle-Activator: org.eclipse.etrice.core.ui.RoomUiActivator
+Automatic-Module-Name: org.eclipse.etrice.core.room.ui
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/editor/RoomEditor.java b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/editor/RoomEditor.java
index 245b450..8819b3e 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/editor/RoomEditor.java
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/editor/RoomEditor.java
@@ -94,4 +94,12 @@
 		return super.getAdapter(key);
 
 	}
+	// TODO: with Xtext 2.15 replace with implementation below
+//	public <T> T getAdapter(Class<T> key) {
+//	if (key.equals(IContextProvider.class)) {
+//		return key.cast(new SelectedModelHelpProvider(this));
+//	}
+//	return super.getAdapter(key);
+//
+//}
 }
diff --git a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/util/UIExpressionUtil.xtend b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/util/UIExpressionUtil.xtend
index ea60f78..2caf978 100644
--- a/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/util/UIExpressionUtil.xtend
+++ b/plugins/org.eclipse.etrice.core.room.ui/src/org/eclipse/etrice/core/ui/util/UIExpressionUtil.xtend
@@ -53,7 +53,7 @@
 		val fsmGenBuilderFactory = RoomUiModule.injector.getInstance(ExtendedFsmGenBuilderFactory)
 		Map<ModelComponent, GraphContainer> cache = newHashMap
 		
-		def public GraphContainer get(ModelComponent mc) {
+		def GraphContainer get(ModelComponent mc) {
 			if(!cache.containsKey(mc)) {
 				val builder = fsmGenBuilderFactory.create()
 				val gc = builder.createTransformedModel(mc)
@@ -76,7 +76,7 @@
 		val exprProvider = RoomUiModule.getInjector().getInstance(DetailExpressionProvider) => [ prov |
 			if(ctx instanceof DetailCode) {
 				prov.owner = ctx.eContainer
-				prov.reference = ctx.eContainmentFeature as EReference
+				prov.reference = ctx.eContainmentFeature
 			} else {
 				prov.owner = ctx
 				prov.reference = ref		
diff --git a/plugins/org.eclipse.etrice.core.room/.project b/plugins/org.eclipse.etrice.core.room/.project
index 93b7fb9..4fca370 100644
--- a/plugins/org.eclipse.etrice.core.room/.project
+++ b/plugins/org.eclipse.etrice.core.room/.project
@@ -41,6 +41,5 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 	</natures>
 </projectDescription>
diff --git a/plugins/org.eclipse.etrice.core.room/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.core.room/META-INF/MANIFEST.MF
index 7c73ad2..9dd44b4 100644
--- a/plugins/org.eclipse.etrice.core.room/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.core.room/META-INF/MANIFEST.MF
@@ -39,3 +39,4 @@
  org.eclipse.etrice.core.serializer,
  org.eclipse.etrice.core.services,
  org.eclipse.etrice.core.validation
+Automatic-Module-Name: org.eclipse.etrice.core.room
diff --git a/plugins/org.eclipse.etrice.core.room/src-gen/org/eclipse/etrice/core/Room.ecore b/plugins/org.eclipse.etrice.core.room/src-gen/org/eclipse/etrice/core/Room.ecore
index 84e498b..dcaf5d9 100644
--- a/plugins/org.eclipse.etrice.core.room/src-gen/org/eclipse/etrice/core/Room.ecore
+++ b/plugins/org.eclipse.etrice.core.room/src-gen/org/eclipse/etrice/core/Room.ecore
@@ -10,14 +10,14 @@
         <details key="documentation" value="&lt;br>The model name is a dot separated fully qualified name and is&#xD;&#xA;used to provide a name space. The generators may use that also&#xD;&#xA;to place the generated code into separate directories.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="imports" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Import"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Import"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is a list of all imported models.&#xD;&#xA;"/>
@@ -68,7 +68,7 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotationTypes" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//AnnotationType"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//AnnotationType"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="RoomClass">
@@ -80,7 +80,7 @@
         <details key="documentation" value="&lt;br>By this name the actor class is referred to in the model.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
@@ -92,7 +92,7 @@
       <details key="documentation" value="&lt;br>This class is the super class of the structural classes&#xD;&#xA;&lt;ul>&#xD;&#xA;  &lt;li>{@link ActorContainerClass}&lt;/li>&#xD;&#xA;  &lt;li>{@link LogicalSystem}&lt;/li>&#xD;&#xA;&lt;/ul>&#xD;&#xA;"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is a list of structure class annotations.&#xD;&#xA;"/>
@@ -121,19 +121,19 @@
         <details key="documentation" value="&lt;br>This is a list of all interface SPPs.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode1" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode1" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode2" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode2" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode3" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode3" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
@@ -196,7 +196,7 @@
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
       <details key="documentation" value="&lt;br>A primitive type describes a type like int, char, float&#xD;&#xA;and can represent the type with a certain precision&#xD;&#xA;in the target language&#xD;&#xA;"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EEnum platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//LiteralType">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EEnum ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//LiteralType">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is one of the basic variable types.&#xD;&#xA;"/>
       </eAnnotations>
@@ -248,7 +248,7 @@
         <details key="documentation" value="&lt;br>The name of the literal.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="literal" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//IntLiteral"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="literal" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//IntLiteral"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The value of the literal. It is associated with a target type which defaults to&#xD;&#xA;{@code int} and can be set explicitly using the {@link EnumerationType#getPrimitiveType()}&#xD;&#xA;"/>
@@ -280,25 +280,25 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is a list of data class annotations.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode1" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode1" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode2" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode2" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode3" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode3" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
@@ -344,7 +344,7 @@
         <details key="documentation" value="&lt;br>This is an optional default value literal.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
@@ -372,13 +372,13 @@
         <details key="documentation" value="&lt;br>This is an optional return type of the operation.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="detailCode" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="detailCode" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is the operation body written in code generator target language.&#xD;&#xA;"/>
@@ -411,7 +411,7 @@
       </eAnnotations>
     </eOperations>
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="detailCode" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="detailCode" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EEnum" name="CommunicationType">
@@ -424,7 +424,7 @@
       <details key="documentation" value="&lt;br>The super class of&#xD;&#xA;&lt;ul>&#xD;&#xA;  &lt;li>{@link ProtocolClass}&lt;/li>&#xD;&#xA;  &lt;li>{@link CompoundProtocolClass}&lt;/li>&#xD;&#xA;&lt;/ul>&#xD;&#xA;"/>
     </eAnnotations>
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is a list of protocol class annotations.&#xD;&#xA;"/>
@@ -445,19 +445,19 @@
         <details key="documentation" value="&lt;br>The base class from which all messages are inherited.&#xD;&#xA;The port classes and the semantics are not inherited.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode1" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode1" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode2" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode2" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode3" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode3" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
@@ -487,7 +487,7 @@
         <details key="documentation" value="&lt;br>This is the optional conjugate port class specification.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="semantics" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//ProtocolSemantics"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="semantics" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//ProtocolSemantics"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is the optional semantics specification for this protocol.&#xD;&#xA;"/>
@@ -541,9 +541,9 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
@@ -554,7 +554,7 @@
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
       <details key="documentation" value="&lt;br>A port class can be specified to customize the behavior of a {@link ProtocolClass}.&#xD;&#xA;There can be one for regular ports and another one for conjugate ports independently.&#xD;&#xA;&#xD;&#xA;&lt;p>&#xD;&#xA;Port classes can be used to define attributes and operations and message handlers&#xD;&#xA;(or interceptors).&#xD;&#xA;&lt;/p>&#xD;&#xA;"/>
     </eAnnotations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="userCode" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>The user code is treated in a generator dependent way.&#xD;&#xA;"/>
@@ -588,7 +588,7 @@
         <details key="documentation" value="&lt;br>This is the message that is handled.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="detailCode" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="detailCode" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//DetailCode"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is the handler code written in code generator target language.&#xD;&#xA;"/>
@@ -605,7 +605,7 @@
       <details key="documentation" value="&lt;br>Is a handler (or interceptor) for outgoing messages. In the generated code the&#xD;&#xA;message is available. It is derived from {@link MessageHandler}.&#xD;&#xA;"/>
     </eAnnotations>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ActorClass" eSuperTypes="#//ActorContainerClass platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//ModelComponent">
+  <eClassifiers xsi:type="ecore:EClass" name="ActorClass" eSuperTypes="#//ActorContainerClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//ModelComponent">
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
       <details key="documentation" value="&lt;br>Together with {@link ProtocolClass} and {@link DataClass} one of&#xD;&#xA;the main class types of the ROOM language.&#xD;&#xA;&#xD;&#xA;&lt;p>&#xD;&#xA;The actor class in ROOM has three compartments which aren't represented as separate model objects.&#xD;&#xA;To understand to which compartment an attribute or reference belongs to here is a list&#xD;&#xA;&lt;ul>&#xD;&#xA;  &lt;li>Interface: everything which is visible from the outside from a model point of view&#xD;&#xA;  &lt;ul>&#xD;&#xA;    &lt;li>{@link #getInterfacePorts}: a list of all interface {@link Port}s&lt;/li>&#xD;&#xA;    &lt;li>{@link ActorContainerClass#getServiceProvisionPoints()}: a list of all interface {@link SPP}s&lt;/li>&#xD;&#xA;  &lt;/ul>&#xD;&#xA;  &lt;li>Structure: all internal structural aspects of an actor class&lt;/li>&#xD;&#xA;  &lt;ul>&#xD;&#xA;    &lt;li>{@link #getUserCode1}-3: user defined code with generator dependent meaning&lt;/li>&#xD;&#xA;    &lt;li>{@link #getInternalPorts}: a list of all internal end {@link Port}s&lt;/li>&#xD;&#xA;    &lt;li>{@link #getExternalPorts}: a list of all {@link ExternalPort}s (the interface ports that&#xD;&#xA;       are end ports, not relay ports&lt;/li>&#xD;&#xA;    &lt;li>{@link #getServiceImplementations}: a list of all {@link ServiceImplementation}s&lt;/li>&#xD;&#xA;    &lt;li>{@link #getServiceAccessPoints}: a list of all {@link SAP}s used by this actor class&lt;/li>&#xD;&#xA;    &lt;li>{@link #getAttributes}: a list of all actor class {@link Attribute}s&lt;/li>&#xD;&#xA;    &lt;li>{@link #getActorRefs}: a list of all referenced actor classes (an {@link ActorRef}&#xD;&#xA;       has the meaning of a composition)&lt;/li>&#xD;&#xA;    &lt;li>{@link #getBindings}: a list of all port {@link Binding}s of this actor class&lt;/li>&#xD;&#xA;    &lt;li>{@link #getConnections}: a list of all {@link LayerConnection}s&lt;/li>&#xD;&#xA;  &lt;/ul>&#xD;&#xA;  &lt;li>Behavior: the behavioral aspects of an actor class&lt;/li>&#xD;&#xA;  &lt;ul>&#xD;&#xA;    &lt;li>{@link #getOperations}: a list of {@link Operation}s&lt;/li>&#xD;&#xA;    &lt;li>{@link #getStateMachine}: the {@link StateGraph state machine} definition&lt;/li>&#xD;&#xA;  &lt;/ul>&#xD;&#xA;&lt;/ul>&#xD;&#xA;&lt;/p>&#xD;&#xA;"/>
     </eAnnotations>
@@ -634,12 +634,12 @@
         <details key="body" value="return getName();&#xD;&#xA;"/>
       </eAnnotations>
     </eOperations>
-    <eOperations name="getAbstractInterfaceItems" upperBound="-1" eType="ecore:EClass http://www.eclipse.org/etrice/core/fsm/FSM#//AbstractInterfaceItem">
+    <eOperations name="getAbstractInterfaceItems" upperBound="-1" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//AbstractInterfaceItem">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="body" value="return new &lt;%org.eclipse.emf.common.util.BasicEList%>&lt;AbstractInterfaceItem>(new &lt;%org.eclipse.etrice.core.room.util.RoomHelpers%>().getInterfaceItems(this));&#xD;&#xA;"/>
       </eAnnotations>
     </eOperations>
-    <eOperations name="getAllAbstractInterfaceItems" upperBound="-1" eType="ecore:EClass http://www.eclipse.org/etrice/core/fsm/FSM#//AbstractInterfaceItem">
+    <eOperations name="getAllAbstractInterfaceItems" upperBound="-1" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//AbstractInterfaceItem">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="body" value="return new &lt;%org.eclipse.emf.common.util.BasicEList%>&lt;AbstractInterfaceItem>(new &lt;%org.eclipse.etrice.core.room.util.RoomHelpers%>().getAllInterfaceItems(this));&#xD;&#xA;"/>
       </eAnnotations>
@@ -650,7 +650,7 @@
         <details key="documentation" value="&lt;br>This is a list containing all ports of the actor interface.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="structureDocu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="structureDocu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation of the actor structure.&#xD;&#xA;"/>
@@ -686,14 +686,14 @@
         <details key="documentation" value="&lt;br>This is a list containing all ports of the actor interface that are end ports.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorDocu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorDocu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation of the actor behavior.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="behaviorAnnotations" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is a list of annotations to the actor behavior.&#xD;&#xA;"/>
@@ -708,7 +708,7 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="structors" upperBound="-1"
         eType="#//ClassStructor" containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="InterfaceItem" eSuperTypes="platform:/resource/org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//AbstractInterfaceItem">
+  <eClassifiers xsi:type="ecore:EClass" name="InterfaceItem" eSuperTypes="../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//AbstractInterfaceItem">
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
       <details key="documentation" value="&lt;br>This is a concrete sub class of an {@link AbstractInterfaceItem}.&#xD;&#xA;&#xD;&#xA;It is the super class of&#xD;&#xA;&lt;ul>&#xD;&#xA;  &lt;li>{@link Port}&lt;/li>&#xD;&#xA;  &lt;li>{@link SAP}&lt;/li>&#xD;&#xA;  &lt;li>{@link SPP}&lt;/li>&#xD;&#xA;&lt;/ul>&#xD;&#xA;"/>
     </eAnnotations>
@@ -717,7 +717,7 @@
         <details key="body" value="if (this instanceof &lt;%org.eclipse.etrice.core.room.Port%>)&#xD;&#xA;&#x9;return ((Port) this).getProtocol();&#xD;&#xA;else if (this instanceof &lt;%org.eclipse.etrice.core.room.SAP%>)&#xD;&#xA;&#x9;return ((SAP) this).getProtocol();&#xD;&#xA;else if (this instanceof &lt;%org.eclipse.etrice.core.room.SPP%>)&#xD;&#xA;&#x9;return ((SPP) this).getProtocol();&#xD;&#xA;return null;&#xD;&#xA;"/>
       </eAnnotations>
     </eOperations>
-    <eOperations name="getSemantics" eType="ecore:EClass http://www.eclipse.org/etrice/core/fsm/FSM#//ProtocolSemantics">
+    <eOperations name="getSemantics" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.fsm/model/generated/FSM.ecore#//ProtocolSemantics">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="body" value="if (getGeneralProtocol() instanceof &lt;%org.eclipse.etrice.core.room.ProtocolClass%>)&#xD;&#xA;&#x9;return ((ProtocolClass)getGeneralProtocol()).getSemantics();&#xD;&#xA;else&#xD;&#xA;&#x9;return null;&#xD;&#xA;"/>
       </eAnnotations>
@@ -737,7 +737,7 @@
         <details key="body" value="if (getGeneralProtocol() instanceof ProtocolClass)&#xD;&#xA;    return ((ProtocolClass) getGeneralProtocol()).getCommType() == &lt;%org.eclipse.etrice.core.room.CommunicationType%>.EVENT_DRIVEN;&#xD;&#xA;else&#xD;&#xA;    return false;&#xD;&#xA;"/>
       </eAnnotations>
     </eOperations>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
@@ -770,7 +770,7 @@
       </eAnnotations>
     </eStructuralFeatures>
     <eStructuralFeatures xsi:type="ecore:EReference" name="annotations" upperBound="-1"
-        eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
+        eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Annotation"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ExternalPort">
@@ -838,7 +838,7 @@
         <details key="documentation" value="&lt;br>By this name the actor container reference is referred to in the model.&#xD;&#xA;"/>
       </eAnnotations>
     </eStructuralFeatures>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass platform:/resource/org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="docu" eType="ecore:EClass ../../../../../../org.eclipse.etrice.core.common/src-gen/org/eclipse/etrice/core/common/Base.ecore#//Documentation"
         containment="true">
       <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
         <details key="documentation" value="&lt;br>This is an optional documentation.&#xD;&#xA;"/>
diff --git a/plugins/org.eclipse.etrice.dctools.fsm/src/org/eclipse/etrice/dctools/fsm/ast/nodes/DCAstBracketNode.xtend b/plugins/org.eclipse.etrice.dctools.fsm/src/org/eclipse/etrice/dctools/fsm/ast/nodes/DCAstBracketNode.xtend
index 19aa9ef..89cfdcf 100644
--- a/plugins/org.eclipse.etrice.dctools.fsm/src/org/eclipse/etrice/dctools/fsm/ast/nodes/DCAstBracketNode.xtend
+++ b/plugins/org.eclipse.etrice.dctools.fsm/src/org/eclipse/etrice/dctools/fsm/ast/nodes/DCAstBracketNode.xtend
@@ -73,5 +73,5 @@
 		println(indent + "DCAstBracketNode " + this.toString)
 	}
 	
-	override def String getText() { toString }
+	override String getText() { toString }
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.dctools/src/org/eclipse/etrice/dctools/GenModelAccess.xtend b/plugins/org.eclipse.etrice.dctools/src/org/eclipse/etrice/dctools/GenModelAccess.xtend
index 46f38af..4ecb95f 100644
--- a/plugins/org.eclipse.etrice.dctools/src/org/eclipse/etrice/dctools/GenModelAccess.xtend
+++ b/plugins/org.eclipse.etrice.dctools/src/org/eclipse/etrice/dctools/GenModelAccess.xtend
@@ -23,7 +23,7 @@
 
 class GenModelAccess {
 	
-	private ExtendedFsmGenBuilderFactory fsmGenBuilderFactory
+	ExtendedFsmGenBuilderFactory fsmGenBuilderFactory
 	
 	Map<ModelComponent, GraphContainer> cache = newHashMap
 	
@@ -32,11 +32,11 @@
 		this.fsmGenBuilderFactory = fsmGenBuilderFactory
 	}
 	
-	def public clearCache() {
+	def clearCache() {
 		cache.clear
 	}
 	
-	def public GraphContainer get(ModelComponent mc) {
+	def GraphContainer get(ModelComponent mc) {
 		if(!cache.containsKey(mc)) {
 			val builder = fsmGenBuilderFactory.create(new NullDiagnostician)
 			val gc = builder.createTransformedModel(mc)
diff --git a/plugins/org.eclipse.etrice.doc/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.doc/META-INF/MANIFEST.MF
index bcd289f..68fc1dd 100644
--- a/plugins/org.eclipse.etrice.doc/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.doc/META-INF/MANIFEST.MF
@@ -12,3 +12,4 @@
 Bundle-Activator: org.eclipse.etrice.doc.ETriceHelp
 Export-Package: org.eclipse.etrice.doc
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.doc
diff --git a/plugins/org.eclipse.etrice.etunit.converter/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.etunit.converter/META-INF/MANIFEST.MF
index f4a5f32..bbee733 100644
--- a/plugins/org.eclipse.etrice.etunit.converter/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.etunit.converter/META-INF/MANIFEST.MF
@@ -15,3 +15,4 @@
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.emf.ecore.xmi;visibility:=reexport
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.etunit.converter
diff --git a/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF
index 39990f5..39e95a4 100644
--- a/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.expressions.ui/META-INF/MANIFEST.MF
@@ -16,4 +16,5 @@
  org.eclipse.etrice.expressions.ui.contentassist,
  org.eclipse.etrice.expressions.ui.highlight
 Bundle-Vendor: Eclipse eTrice
+Automatic-Module-Name: org.eclipse.etrice.expressions.ui
 
diff --git a/plugins/org.eclipse.etrice.generator.base/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.base/META-INF/MANIFEST.MF
index 18d19c1..ab1a0da 100644
--- a/plugins/org.eclipse.etrice.generator.base/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.base/META-INF/MANIFEST.MF
@@ -19,3 +19,4 @@
  org.eclipse.etrice.generator.base.setup,
  org.eclipse.etrice.generator.base.validation
 Bundle-Name: Base Generator
+Automatic-Module-Name: org.eclipse.etrice.generator.base
diff --git a/plugins/org.eclipse.etrice.generator.c/.project b/plugins/org.eclipse.etrice.generator.c/.project
index 0bbb721..1b71c22 100644
--- a/plugins/org.eclipse.etrice.generator.c/.project
+++ b/plugins/org.eclipse.etrice.generator.c/.project
@@ -40,6 +40,5 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 	</natures>
 </projectDescription>
diff --git a/plugins/org.eclipse.etrice.generator.c/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.c/META-INF/MANIFEST.MF
index 875e4a5..f339524 100644
--- a/plugins/org.eclipse.etrice.generator.c/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.c/META-INF/MANIFEST.MF
@@ -22,3 +22,4 @@
 Export-Package: org.eclipse.etrice.generator.c,
  org.eclipse.etrice.generator.c.gen,
  org.eclipse.etrice.generator.c.setup
+Automatic-Module-Name: org.eclipse.etrice.generator.c
diff --git a/plugins/org.eclipse.etrice.generator.c/build.gradle b/plugins/org.eclipse.etrice.generator.c/build.gradle
index 0f35e76..f2ade81 100644
--- a/plugins/org.eclipse.etrice.generator.c/build.gradle
+++ b/plugins/org.eclipse.etrice.generator.c/build.gradle
@@ -1,5 +1,9 @@
 apply plugin: 'application'
 
+configurations {
+	archive
+}
+
 dependencies {
 	compile project(':plugins:org.eclipse.etrice.core.room')
 	compile project(':plugins:org.eclipse.etrice.core.etphys')
@@ -15,6 +19,10 @@
 	compile "org.eclipse.xtext:org.eclipse.xtext:$versions.xtext"
 }
 
+artifacts {
+	archive distZip
+}
+
 mainClassName = 'org.eclipse.etrice.generator.c.Main'
 
 distTar.enabled = false
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/CExtensions.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/CExtensions.xtend
index b1aa47f..43f1244 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/CExtensions.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/CExtensions.xtend
@@ -40,10 +40,10 @@
 import org.eclipse.etrice.core.room.RoomClass
 import org.eclipse.etrice.core.room.RoomModel
 import org.eclipse.etrice.core.room.util.RoomHelpers
+import org.eclipse.etrice.generator.c.Main
+import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper
 import org.eclipse.etrice.generator.generic.ILanguageExtension
 import org.eclipse.xtext.util.Pair
-import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper
-import org.eclipse.etrice.generator.c.Main
 
 @Singleton
 class CExtensions implements ILanguageExtension {
@@ -54,7 +54,7 @@
 
 	override String getTypedDataDefinition(EObject msg) {
 	    if (msg instanceof Message) {
-    		generateArglistAndTypedData((msg as Message).data).get(TypedDataKind.DECLARATION_AND_INITIALIZATION.ordinal)
+    		generateArglistAndTypedData(msg.data).get(TypedDataKind.DECLARATION_AND_INITIALIZATION.ordinal)
 	    }
 	    else {
 	        ""
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend
index ebb1976..cc3f0fd 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/Initialization.xtend
@@ -68,7 +68,7 @@
 			DataClass:
 				'''
 					{
-						«FOR subA : (aType as DataClass).allAttributes SEPARATOR ','»
+						«FOR subA :aType.allAttributes SEPARATOR ','»
 							«initAttributeArray(instance, path.union(subA))»
 						«ENDFOR»
 					}'''
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/MainGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/MainGen.xtend
index 428b307..7bf1c88 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/MainGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/MainGen.xtend
@@ -36,7 +36,7 @@
 		prepFS.prepare
 		for (e: resource.contents){
 			if (e instanceof Root) {
-				doGenerate(e as Root)
+				doGenerate(e)
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend
index a1aadf3..3edaff6 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/NodeGen.xtend
@@ -43,11 +43,11 @@
 import org.eclipse.etrice.generator.base.io.IGeneratorFileIO
 import org.eclipse.etrice.generator.base.logging.ILogger
 import org.eclipse.etrice.generator.c.Main
+import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper
 import org.eclipse.etrice.generator.fsm.base.IntelligentSeparator
 import org.eclipse.etrice.generator.generic.ProcedureHelpers
 import org.eclipse.etrice.generator.generic.RoomExtensions
 import org.eclipse.etrice.generator.generic.TypeHelpers
-import org.eclipse.etrice.generator.c.setup.GeneratorOptionsHelper
 
 @Singleton
 class NodeGen {
@@ -388,7 +388,7 @@
 				/* nothing to do */
 			«ELSE»
 				«FOR pi:ai.orderedIfItemInstances»
-					«IF pi.protocol.getPortClass(pi.conjugated)?.attributes?.size > 0»
+					«IF pi.portClassAttributesSize > 0»
 						static «pi.protocol.getPortClassName(pi.conjugated)»_var «pi.path.pathName»_var«IF pi.replicated»[«pi.peers.size»]«ENDIF»={
 							«FOR Integer i:1.. if(pi.peers.size==0)1 else pi.peers.size SEPARATOR ', '»
 								«attrInitGenAddon.generateAttributeInit(pi, pi.interfaceItem.portClass.attributes)»
@@ -410,6 +410,16 @@
 
 	'''
 	}
+	
+	private def int getPortClassAttributesSize(InterfaceItemInstance pi) {
+		val attribs = pi.protocol.getPortClass(pi.conjugated)?.attributes
+		if (attribs===null) {
+			0
+		}
+		else {
+			attribs.size
+		}
+	}
 
 	def private genActorInstanceInitializer(Root root, ActorInstance ai) {
 		val instName = ai.path.pathName
@@ -810,7 +820,7 @@
 			while (iter.hasNext) {
 				val obj = iter.next
 				if (obj instanceof PortInstance) {
-					val pi = obj as PortInstance
+					val pi = obj
 					if (!pi.port.relay) {
 						// only data driven
 						if (pi.protocol.commType==CommunicationType::DATA_DRIVEN) {
diff --git a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend
index 1a1e470..901ccf7 100644
--- a/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.c/src/org/eclipse/etrice/generator/c/gen/StateMachineGen.xtend
@@ -69,7 +69,7 @@
 	/**
 	 * @param generateImplementation NOT used
 	 */
-	override public genExtra(GraphContainer gc, boolean generateImplementation) {
+	override genExtra(GraphContainer gc, boolean generateImplementation) {
 		val mc = gc.component
 		val allStates = gc.graph.allStateNodes.map[stateGraphNode].filter(typeof(State)).toList
 		val states = allStates.getLeafStatesLast
@@ -93,7 +93,7 @@
 		'''
 	}
 
-	override public stateType() {
+	override stateType() {
 		"etInt16"
 	}
 
@@ -106,7 +106,7 @@
 			((void)trigger__et);	/* avoids unused warning */
 		'''
 	}
-	override public unreachableReturn() {
+	override unreachableReturn() {
 		"/* return NO_STATE; // required by CDT but detected as unreachable by JDT because of while (true) */"
 	}
 
diff --git a/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF
index ac386c6..e62e4d4 100644
--- a/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.config/META-INF/MANIFEST.MF
@@ -17,4 +17,5 @@
  com.google.guava;bundle-version="8.0.0",
  org.eclipse.xtext.xbase.lib;bundle-version="2.6.0"
 Export-Package: org.eclipse.etrice.generator.config
+Automatic-Module-Name: org.eclipse.etrice.generator.config
 
diff --git a/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend b/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend
index c9a5cef..01a36c9 100644
--- a/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend
+++ b/plugins/org.eclipse.etrice.generator.config/src/org/eclipse/etrice/generator/config/DataConfiguration.xtend
@@ -100,7 +100,7 @@
 	// dynamic
 	override getPollingTimerUser(SubSystemInstance subsystem) {
 		val dynConf = subsystem.config?.dynConfig
-		if (dynConf == null)
+		if (dynConf === null)
 			0
 		else
 			dynConf.polling
@@ -108,7 +108,7 @@
 
 	override getUserCode1(SubSystemInstance subsystem) {
 		var dynConfig = subsystem.config?.dynConfig
-		return if (dynConfig?.filePath != null)
+		return if (dynConfig?.filePath !== null)
 			"import org.eclipse.etrice.runtime.java.config.ConfigSourceFile;" // TODO JH make lang independent
 		else
 			dynConfig?.userCode1
@@ -116,7 +116,7 @@
 
 	override getUserCode2(SubSystemInstance subsystem) {
 		var dynConfig = subsystem.config?.dynConfig
-		return if (dynConfig?.filePath != null) '''new ConfigSourceFile("«dynConfig.filePath»")''' else
+		return if (dynConfig?.filePath !== null) '''new ConfigSourceFile("«dynConfig.filePath»")''' else
 			dynConfig?.userCode2
 	}
 
@@ -137,7 +137,7 @@
 	}
 
 	override hasVariableService(SubSystemInstance subsystem) {
-		subsystem.config?.dynConfig != null
+		subsystem.config?.dynConfig !== null
 	}
 
 	def private toStringExpr(ConfigValueArray literal) {
diff --git a/plugins/org.eclipse.etrice.generator.cpp/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.cpp/META-INF/MANIFEST.MF
index ef9eb9c..f25a857 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.cpp/META-INF/MANIFEST.MF
@@ -21,3 +21,4 @@
 Export-Package: org.eclipse.etrice.generator.cpp,
  org.eclipse.etrice.generator.cpp.gen,
  org.eclipse.etrice.generator.cpp.setup
+Automatic-Module-Name: org.eclipse.etrice.generator.cpp
diff --git a/plugins/org.eclipse.etrice.generator.cpp/build.gradle b/plugins/org.eclipse.etrice.generator.cpp/build.gradle
index 14b1fa3..f6ce27b 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/build.gradle
+++ b/plugins/org.eclipse.etrice.generator.cpp/build.gradle
@@ -1,5 +1,9 @@
 apply plugin: 'application'
 
+configurations {
+	archive
+}
+
 dependencies {
 	compile project(':plugins:org.eclipse.etrice.core.room')
 	compile project(':plugins:org.eclipse.etrice.core.etphys')
@@ -14,6 +18,10 @@
 	compile "org.eclipse.xtext:org.eclipse.xtext:$versions.xtext"
 }
 
+artifacts {
+	archive distZip
+}
+
 mainClassName = 'org.eclipse.etrice.generator.cpp.Main'
 
 distTar.enabled = false
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ConfigGenAddon.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ConfigGenAddon.xtend
index 0319798..0991f4d 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ConfigGenAddon.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ConfigGenAddon.xtend
@@ -43,13 +43,13 @@
 	
 	// For SubSystemClassGen
 	
-	def public genActorInstanceConfig(ActorInstance ai, String aiVariableName){'''
+	def genActorInstanceConfig(ActorInstance ai, String aiVariableName){'''
 			«FOR a : ai.actorClass.allAttributes»
 				«applyInstanceConfig(ai, aiVariableName, new ArrayList<Attribute>().union(a))»
 			«ENDFOR»
 			«FOR pi : ai.orderedIfItemInstances»
 				«var attribs = getPortClass(pi.interfaceItem)?.attributes»
-				«IF attribs != null»
+				«IF attribs !== null»
 					«FOR a : attribs»
 						«applyInstanceConfig(pi, aiVariableName+"."+invokeGetter(pi.name, null), new ArrayList<Attribute>().union(a))»
 					«ENDFOR»
@@ -77,7 +77,7 @@
 		// TODO-Enum
 		if(aType.primitive){
 			var value = typeHelpers.getAttrInstanceConfigValue(path, instance)
-			if(value == null)
+			if(value === null)
 				''''''
 			else if(a.size == 0 || aType.characterType)
 				'''«invokes».«a.name.invokeSetter(null, (aType as PrimitiveType).toValueLiteral(value))»;'''
@@ -100,7 +100,7 @@
 	
 	// For ActorClassGen
 	
-	def public genDynConfigGetterSetter(ActorClass ac){'''
+	def genDynConfigGetterSetter(ActorClass ac){'''
 		«FOR a : dataConfigExt.getDynConfigReadAttributes(ac)»
 			public «a.type.type.typeName»«IF a.size>0»[]«ENDIF» get«a.name.toFirstUpper»(){
 				if(lock_«a.name» == null)
@@ -130,7 +130,7 @@
 		«ENDFOR»
 	'''}
 	
-	def public genMinMaxConstants(ActorClass ac){
+	def genMinMaxConstants(ActorClass ac){
 		var result = '''
 			«FOR a : ac.attributes»
 				«genMinMaxConstantsRec(ac, a.name, new ArrayList<Attribute>().union(a))»
@@ -159,10 +159,10 @@
 		{
 			var aType = (path.last.type.type as PrimitiveType)
 			'''
-				«IF (temp = dataConfigExt.getAttrClassConfigMinValue(ac, path)) != null»
+				«IF (temp = dataConfigExt.getAttrClassConfigMinValue(ac, path)) !== null»
 					public static «aType.minMaxType» MIN_«varNamePath» = «aType.toValueLiteral(temp)»;
 				«ENDIF»
-				«IF (temp = dataConfigExt.getAttrClassConfigMaxValue(ac, path)) != null»
+				«IF (temp = dataConfigExt.getAttrClassConfigMaxValue(ac, path)) !== null»
 					public static «aType.minMaxType» MAX_«varNamePath» = «aType.toValueLiteral(temp)»;
 				«ENDIF»
 			'''
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/DataClassGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/DataClassGen.xtend
index d34e537..1cb3808 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/DataClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/DataClassGen.xtend
@@ -56,7 +56,7 @@
 		«generateIncludeGuardBegin(dc, '')»
 
 		#include "common/etDatatypesCpp.hpp"
-		«IF dc.base!=null»#include "«dc.base.path»«dc.base.name».h"«ENDIF»
+		«IF dc.base!==null»#include "«dc.base.path»«dc.base.name».h"«ENDIF»
 		«FOR classes : root.getReferencedDataClasses(dc)»
 			#include "«classes.path»«classes.name».h"
 		«ENDFOR»
@@ -72,7 +72,7 @@
 
 		«dc.generateNamespaceBegin»
 
-		class «dc.name»«IF dc.base!=null» : public «dc.base.name»«ENDIF» {
+		class «dc.name»«IF dc.base!==null» : public «dc.base.name»«ENDIF» {
 
 		public:
 			«helpers.userCode(dc.userCode2)»
@@ -143,7 +143,7 @@
 		«dc.name»& «dc.name»::operator=(const «dc.name»& rhs)
 		{
 			if (this == &rhs) { return *this; };
-			«IF dc.base!=null»«dc.base.name»::operator=(rhs);«ENDIF»
+			«IF dc.base!==null»«dc.base.name»::operator=(rhs);«ENDIF»
 			«FOR attr : dc.attributes»
 				this->«attr.name» = rhs.«attr.name»;
 			«ENDFOR»
@@ -160,7 +160,7 @@
 		val extension initHelper = initHelper
 		var initList = <CharSequence>newArrayList
 
-		if(dataClass.base != null) initList += dataClass.base.name + '()'
+		if(dataClass.base !== null) initList += dataClass.base.name + '()'
 		initList += dataClass.attributes.map['''«name»(«initializerListValue»)''']
 
 		initList.generateCtorInitializerList
@@ -170,7 +170,7 @@
 		val extension initHelper = initHelper
 		var initList = <CharSequence>newArrayList
 
-		if(dataClass.base != null) initList += dataClass.base.name + '(rhs)'
+		if(dataClass.base !== null) initList += dataClass.base.name + '(rhs)'
 		initList += dataClass.attributes.map['''«name»(rhs.«name»)''']
 
 		initList.generateCtorInitializerList
@@ -180,7 +180,7 @@
 		val extension initHelper = initHelper
 		var initList = <CharSequence>newArrayList
 
-		if(dataClass.base != null)
+		if(dataClass.base !== null)
 			initList += '''«dataClass.base.name»(«dataClass.base.allAttributes.map[name].join(', ')»)'''
 		initList += dataClass.attributes.map['''«name»(«name»)''']
 
@@ -222,7 +222,7 @@
 	def deepCopy(DataClass _dc) {
 		var result = ""
 		var dc = _dc
-		while (dc!=null) {
+		while (dc!==null) {
 			result = deepCopy(dc.attributes).toString + result
 			dc = dc.base
 		}
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/Initialization.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/Initialization.xtend
index 9131665..ded45f7 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/Initialization.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/Initialization.xtend
@@ -40,7 +40,7 @@
 	 *  Generate array and struct initialization
 	 */
 	def genExtraInitializers(Iterable<Attribute> attributes) {
-		val extraInitAttrs = attributes.filter[initializerListValue == null && initValue != null && initValue.startsWith('{')]
+		val extraInitAttrs = attributes.filter[initializerListValue === null && initValue !== null && initValue.startsWith('{')]
 		if(extraInitAttrs.empty) return ''
 		'''
 			// extra initialization
@@ -57,12 +57,12 @@
 
 	def String getInitializerListValue(Attribute attribute) {
 		val initValue = attribute.initValue
-		return if(initValue != null && initValue.startsWith('{')) null else initValue
+		return if(initValue !== null && initValue.startsWith('{')) null else initValue
 	}
 
 	def protected getInitValue(Attribute attribute) {
 		switch it : attribute {
-			case defaultValueLiteral != null: defaultValueLiteral
+			case defaultValueLiteral !== null: defaultValueLiteral
 			case type.ref: languageExt.nullPointer
 			default: languageExt.defaultValue(type.type)
 		}
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/MainGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/MainGen.xtend
index f5c5bcf..eda8112 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/MainGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/MainGen.xtend
@@ -35,7 +35,7 @@
 		prepFS.prepare
 		for (e: resource.contents){
 			if (e instanceof Root) {
-				doGenerate(e as Root)
+				doGenerate(e)
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend
index bea5854..da7cbef 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeGen.xtend
@@ -54,7 +54,7 @@
 		for (nr : ETMapUtil::getNodeRefs()) {
 			for (instpath : ETMapUtil::getSubSystemInstancePaths(nr)) {
 				val ssi = root.getInstance(instpath) as SubSystemInstance
-				if (ssi!=null && ssi.subSystemClass.validGenerationLocation) {
+				if (ssi!==null && ssi.subSystemClass.validGenerationLocation) {
 					val wired = sscc2wired.get(ssi.subSystemClass)
 					val path = ssi.subSystemClass.getPath
 
@@ -71,7 +71,7 @@
 
 	def generateHeaderFile(Root root, SubSystemInstance comp, WiredSubSystemClass wired, Collection<PhysicalThread> usedThreads) {
 		val cc = comp.subSystemClass
-		val models = root.getReferencedModels(cc)
+//		val models = root.getReferencedModels(cc)
 		val nr = ETMapUtil::getNodeRef(comp)
 		val clsname = nr.getCppClassName(comp)
 		val threads = nr.type.threads.filter(t|usedThreads.contains(t))
@@ -170,7 +170,7 @@
 
 	def generateSourceFile(Root root, SubSystemInstance comp, WiredSubSystemClass wired, Collection<PhysicalThread> usedThreads) {
 		val cc = comp.subSystemClass
-		val models = root.getReferencedModels(cc)
+//		val models = root.getReferencedModels(cc)
 		val nr = ETMapUtil::getNodeRef(comp)
 		val clsname = nr.getCppClassName(comp)
 		val threads = nr.type.threads.filter(t|usedThreads.contains(t))
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeRunnerGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeRunnerGen.xtend
index 4ae9987..575cb51 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeRunnerGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/NodeRunnerGen.xtend
@@ -39,7 +39,7 @@
 		for (nr : ETMapUtil::getNodeRefs()) {
 			for (instpath : ETMapUtil::getSubSystemInstancePaths(nr)) {
 				val ssi = root.getInstance(instpath) as SubSystemInstance
-				if (ssi!=null && ssi.subSystemClass.validGenerationLocation) {
+				if (ssi!==null && ssi.subSystemClass.validGenerationLocation) {
 					val filepath = ssi.subSystemClass.getPath
 					fileIO.generateFile("generating SubSystemRunner declaration", filepath + nr.getCppClassName(ssi)+"Runner.h", root.generateHeaderFile(ssi))
 					fileIO.generateFile("generating SubSystemRunner implementation", filepath + nr.getCppClassName(ssi)+"Runner.cpp", root.generateSourceFile(ssi))
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend
index 9cb81b5..815e4c1 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/ProtocolClassGen.xtend
@@ -529,17 +529,14 @@
 
 	override getMessageID(Message msg, InterfaceItem item) {
 		if (item instanceof Port) {
-			var p = item as Port;
-			var direction = if (p.isConjugated())"OUT_" else "IN_"
-			return enumInUse(p.getProtocol().getName(), direction+msg.getName())
+			var direction = if (item.isConjugated())"OUT_" else "IN_"
+			return enumInUse(item.getProtocol().getName(), direction+msg.getName())
 		}
 		else if (item instanceof SAP) {
-			var sap = item as SAP;
-			return enumInUse(sap.getProtocol().getName(), "OUT_"+msg.getName())
+			return enumInUse(item.getProtocol().getName(), "OUT_"+msg.getName())
 		}
 		else if (item instanceof SPP) {
-			var spp = item as SPP;
-			return enumInUse(spp.getProtocol().getName(), "IN_"+msg.getName())
+			return enumInUse(item.getProtocol().getName(), "IN_"+msg.getName())
 		}
 
 		return "unknown interface item";
diff --git a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/StateMachineGen.xtend b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/StateMachineGen.xtend
index 6cbb9d3..9d0344a 100644
--- a/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/StateMachineGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.cpp/src/org/eclipse/etrice/generator/cpp/gen/StateMachineGen.xtend
@@ -78,7 +78,7 @@
 			'''
 	}
 
-	override public stateType() {
+	override stateType() {
 		"etInt16"
 	}
 
diff --git a/plugins/org.eclipse.etrice.generator.doc/.project b/plugins/org.eclipse.etrice.generator.doc/.project
index 8c086ee..f606afe 100644
--- a/plugins/org.eclipse.etrice.generator.doc/.project
+++ b/plugins/org.eclipse.etrice.generator.doc/.project
@@ -30,6 +30,5 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 	</natures>
 </projectDescription>
diff --git a/plugins/org.eclipse.etrice.generator.doc/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.doc/META-INF/MANIFEST.MF
index fda0f2f..3437cb2 100644
--- a/plugins/org.eclipse.etrice.generator.doc/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.doc/META-INF/MANIFEST.MF
@@ -24,3 +24,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.generator.doc;uses:="org.eclipse.etrice.generator.base",
  org.eclipse.etrice.generator.doc.gen
+Automatic-Module-Name: org.eclipse.etrice.generator.doc
diff --git a/plugins/org.eclipse.etrice.generator.doc/build.gradle b/plugins/org.eclipse.etrice.generator.doc/build.gradle
index f9280e8..32bcd95 100644
--- a/plugins/org.eclipse.etrice.generator.doc/build.gradle
+++ b/plugins/org.eclipse.etrice.generator.doc/build.gradle
@@ -1,3 +1,9 @@
+apply plugin: 'application'
+
+configurations {
+	archive
+}
+
 dependencies {
 	compile project(':plugins:org.eclipse.etrice.core.etmap')
 	compile project(':plugins:org.eclipse.etrice.core.genmodel')
@@ -6,4 +12,12 @@
 	compile project(':plugins:org.eclipse.etrice.generator.fsm')
 	
 	compile "org.eclipse.xtend:org.eclipse.xtend.lib:$versions.xtext"
-}
\ No newline at end of file
+}
+
+artifacts {
+	archive distZip
+}
+
+mainClassName = 'org.eclipse.etrice.generator.doc.Main'
+
+distTar.enabled = false
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/Main.java b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/Main.java
index fdeb850..ac103df 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/Main.java
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/Main.java
@@ -25,7 +25,6 @@
 import org.eclipse.etrice.generator.doc.gen.InstanceDiagramGen;
 import org.eclipse.etrice.generator.doc.gen.MainGen;
 import org.eclipse.etrice.generator.doc.setup.GeneratorModule;
-import org.eclipse.etrice.generator.doc.setup.DocGeneratorOptions;
 
 import com.google.inject.Inject;
 
@@ -47,24 +46,13 @@
 	protected InstanceDiagramGen instanceDiagramGenerator;
 	
 	protected int runGenerator(List<Resource> resources, Arguments arguments, IGeneratorFileIO fileIO, ILogger logger) {
-
 		Root genModel = createGeneratorModel(resources, arguments, logger);
 		if (diagnostician.isFailed() || genModel==null) {
 			logger.logError("errors during build of generator model");
 			return GENERATOR_ERROR;
 		}
 		
-		logger.logInfo("-- starting code generation");
-		mainGenerator.doGenerate(genModel.eResource());
-		
-		if (arguments.get(DocGeneratorOptions.GEN_INST_DIAG)) {
-			instanceDiagramGenerator.doGenerate(genModel);
-		}
-		
-		if (diagnostician.isFailed()) {
-			logger.logError("errors during code generation");
-			return GENERATOR_ERROR;
-		}
+		mainGenerator.doGenerate(genModel, arguments, fileIO);
 		
 		return GENERATOR_OK;
 	}
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/AsciiDocGen.xtend b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/AsciiDocGen.xtend
new file mode 100644
index 0000000..9348710
--- /dev/null
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/AsciiDocGen.xtend
@@ -0,0 +1,482 @@
+/*******************************************************************************
+ * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ * 
+ * CONTRIBUTORS:
+ * 		Thomas Jung, Thomas Schuetz (initial contribution)
+ * 
+ *******************************************************************************/
+
+package org.eclipse.etrice.generator.doc.gen
+
+import com.google.inject.Inject
+import com.google.inject.Singleton
+import java.util.List
+import org.eclipse.etrice.core.common.base.Documentation
+import org.eclipse.etrice.core.fsm.fSM.State
+import org.eclipse.etrice.core.genmodel.etricegen.Root
+import org.eclipse.etrice.core.room.ActorClass
+import org.eclipse.etrice.core.room.Attribute
+import org.eclipse.etrice.core.room.CompoundProtocolClass
+import org.eclipse.etrice.core.room.DataClass
+import org.eclipse.etrice.core.room.EnumerationType
+import org.eclipse.etrice.core.room.LogicalSystem
+import org.eclipse.etrice.core.room.Port
+import org.eclipse.etrice.core.room.ProtocolClass
+import org.eclipse.etrice.core.room.RoomClass
+import org.eclipse.etrice.core.room.RoomModel
+import org.eclipse.etrice.core.room.StandardOperation
+import org.eclipse.etrice.core.room.SubSystemClass
+import org.eclipse.etrice.core.room.util.RoomHelpers
+import org.eclipse.etrice.generator.base.io.IGeneratorFileIO
+import org.eclipse.etrice.generator.fsm.base.CodegenHelpers
+import org.eclipse.etrice.core.room.GeneralProtocolClass
+import org.eclipse.emf.ecore.EObject
+import org.eclipse.xtext.documentation.IEObjectDocumentationProvider
+import org.eclipse.etrice.core.fsm.fSM.StateGraph
+
+@Singleton
+class AsciiDocGen {
+
+	@Inject extension RoomHelpers
+	@Inject extension CodegenHelpers
+	@Inject extension IEObjectDocumentationProvider
+	
+	def doGenerate(Root root, IGeneratorFileIO fileIO, boolean includeImages) {
+		val packages = root.models.groupBy[name].entrySet.map[new RoomPackage(key, value)].sortBy[name]
+		fileIO.generateFile("doc.adoc", generateSingleDoc(packages, includeImages))
+	}
+	
+	def generateSingleDoc(Iterable<RoomPackage> packages, boolean includeImages) '''
+		= Model Documentation
+		generated by eTrice
+		{docdatetime}
+		:toc: left
+		:toclevels: 2
+		:table-caption!:
+		«IF !packages.empty»
+			
+			.Room Packages
+			«FOR pkg: packages»
+			* «crossReference(pkg.name)»
+			«ENDFOR»
+		«ENDIF»
+		«FOR pkg: packages»
+			
+			«generatePackageDoc(pkg)»
+			«FOR en: pkg.enumerationTypes»
+				
+				«en.generateEnumerationDoc»
+			«ENDFOR»
+			«FOR dc: pkg.dataClasses»
+				
+				«dc.generateDataDoc»
+			«ENDFOR»
+			«FOR pc: pkg.protocolClasses»
+				
+				«pc.generateProtocolDoc»
+			«ENDFOR»
+			«FOR sys: pkg.systems»
+				
+				«sys.generateLogicalSystemDoc(includeImages)»
+			«ENDFOR»
+			«FOR subSys: pkg.subSystemClasses»
+				
+				«subSys.generateSubSystemDoc(includeImages)»
+			«ENDFOR»
+			«FOR ac: pkg.actorClasses»
+				
+				«ac.generateActorDoc(includeImages)»
+			«ENDFOR»
+		«ENDFOR»
+	'''
+	
+	def private generatePackageDoc(RoomPackage pkg) {
+		'''
+		«defineAnchor(pkg.name)»
+		== «pkg.name»
+		«IF !pkg.systems.empty»
+			
+			.Logical System Classes
+			|===
+			| Name | Description
+			«FOR s : pkg.systems»
+				
+				| «crossReference(s)»
+				| «s.shortDocText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+		«IF !pkg.subSystemClasses.empty»
+			
+			.Subsystem Classes
+			|===
+			| Name | Description
+			«FOR s : pkg.subSystemClasses»
+				
+				| «crossReference(s)»
+				| «s.shortDocText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+		«IF !pkg.protocolClasses.empty»
+			
+			.ProtocolClasses
+			|===
+			| Name | Description
+			«FOR c : pkg.protocolClasses»
+				
+				| «crossReference(c)»
+				| «c.shortDocText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+		«IF !pkg.enumerationTypes.empty»
+			
+			.Enumeration Types
+			|===
+			| Name | Description
+			«FOR e : pkg.enumerationTypes»
+				
+				| «crossReference(e)»
+				| «e.shortDocText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+		«IF !pkg.dataClasses.empty»
+			
+			.Data Classes
+			|===
+			| Name | Description
+			«FOR c : pkg.dataClasses»
+				
+				| «crossReference(c)»
+				| «c.shortDocText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+		«IF !pkg.actorClasses.empty»
+			
+			.Actor Classes
+			|===
+			| Name | Description
+			«FOR c : pkg.actorClasses»
+				
+				| «crossReference(c)»
+				| «c.shortDocText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+	'''
+	}
+	
+	def private generateLogicalSystemDoc(LogicalSystem system, boolean includeImages) {
+		'''
+		«defineAnchor(system)»
+		=== «system.name»
+		
+		«system.docText»
+		«IF includeImages»
+			
+			«includeImage(system.name + "_instanceTree.jpg")»
+		«ENDIF»
+		'''
+	}
+	
+	def private generateSubSystemDoc(SubSystemClass ssc, boolean includeImages) '''
+		«defineAnchor(ssc)»
+		=== «ssc.name»
+		
+		«ssc.docText»
+		«IF includeImages»
+			
+			«includeImage(ssc.name + "_structure.jpg")»
+		«ENDIF»
+	'''
+	
+	def private generateEnumerationDoc(EnumerationType en) '''
+		«defineAnchor(en)»
+		=== «en.name»
+		
+		«en.docText»
+		
+		«IF en.primitiveType !== null»
+			The literals of this enumeration are based on PrimitiveType «en.primitiveType.name».
+		«ELSE»
+			The literals of this enumeration are of type int.
+		«ENDIF»
+		
+		.Literals
+		|===
+		| Name | Value | Hex Value | Binary Value
+		«FOR lit: en.literals»
+			
+			| «lit.name»
+			| «lit.literalValue»
+			| 0x«Long.toHexString(lit.literalValue)»
+			| «Long.toBinaryString(lit.literalValue)»
+		«ENDFOR»
+		|===
+	'''
+	
+	def private generateDataDoc(DataClass dc) '''
+		«defineAnchor(dc)»
+		=== «dc.name»
+		
+		«dc.docText»
+		
+		«dc.attributes.generateAttributesDoc»
+		«IF !dc.operations.empty»
+			
+			«dc.operations.generateOperationsDoc»
+		«ENDIF»
+	'''
+	
+	def private dispatch generateProtocolDoc(ProtocolClass pc) '''
+		«defineAnchor(pc)»
+		=== «pc.name»
+		
+		«pc.docText»
+		«IF !pc.allIncomingMessages.empty»
+			
+			.Incoming Messages
+			|===
+			| Message | Type | Description
+			«FOR ims : pc.allIncomingMessages»
+				
+				| «ims.name»
+				| «IF ims.data !== null»«ims.data.refType.type.name»«ELSE»void«ENDIF»
+				| «ims.docText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+		«IF !pc.allOutgoingMessages.empty»
+			
+			.Outgoing Messages
+			|===
+			| Message | Type | Description
+			«FOR oms : pc.allOutgoingMessages»
+				
+				| «oms.name»
+				| «IF oms.data !== null»«oms.data.refType.type.name»«ELSE»void«ENDIF»
+				| «oms.docText»
+			«ENDFOR»
+			|===
+		«ENDIF»
+	'''
+	
+	def private dispatch generateProtocolDoc(CompoundProtocolClass pc) '''
+		«defineAnchor(pc)»
+		=== «pc.name»
+		
+		«pc.docText»
+		
+		.Sub Protocols
+		|===
+		| Name | Protocol
+		«FOR sub : pc.subProtocols»
+			
+			| «sub.name»
+			| «sub.protocol.name»
+		«ENDFOR»
+		|===
+	'''
+	
+	def private generateActorDoc(ActorClass ac, boolean includeImages) '''
+		«defineAnchor(ac)»
+		=== «ac.name»
+		
+		«ac.docText»
+		
+		==== Structure
+		«IF includeImages»
+			
+			«includeImage(ac.name + "_structure.jpg")»
+		«ENDIF»
+		«IF !ac.allPorts.empty»
+			
+			«generatePortDoc(ac)»
+		«ENDIF»
+		«IF !ac.attributes.empty»
+			
+			«ac.attributes.generateAttributesDoc»
+		«ENDIF»
+		«IF ac.hasNonEmptyStateMachine || !ac.operations.empty || ac.isBehaviorAnnotationPresent("BehaviorManual")»
+			
+			==== Behavior
+			«IF !ac.operations.empty»
+				
+				«ac.operations.generateOperationsDoc»
+			«ENDIF»
+			«IF ac.isBehaviorAnnotationPresent("BehaviorManual")»
+				
+				The behavior for ActorClass «ac.name» is implemented manually.
+			«ELSEIF ac.hasNonEmptyStateMachine»
+				
+				«generateFsmDoc(ac, includeImages)»
+			«ENDIF»
+		«ENDIF»
+	'''
+
+	def private generateFsmDoc(ActorClass ac, boolean includeImages) '''
+		.State Machine
+		Top Level State::
+		«generateStateGraphDoc(ac, ac.stateMachine, includeImages, 1)»
+	'''
+	
+	def private CharSequence generateStateGraphDoc(ActorClass ac, StateGraph stateGraph, boolean includeImages, int depth) {
+		val statePath = if(stateGraph.eContainer instanceof State) "_" + (stateGraph.eContainer as State).genStatePathName else ""
+		'''
+			«IF includeImages»
+				«includeImage(ac.name + statePath + "_behavior.jpg")»
+			«ENDIF»
+			«FOR state: stateGraph.states»
+				«state.name»::«fill(':', depth)»
+					«state.docText»
+					«IF !state.leaf»
+						«generateStateGraphDoc(ac, state.subgraph, includeImages, depth + 1)»
+					«ENDIF»
+			«ENDFOR»
+		'''
+	}
+	
+	def private String generatePortDoc(ActorClass ac) '''
+		.Ports
+		|===
+		| Name | Protocol | Type | Kind | Multiplicity | Description
+		«FOR at : ac.allPorts»
+			
+			| «at.name»
+			| «at.protocol.name»
+			| «at.type»
+			| «at.kind»
+			| «at.multAsText»
+			| «at.docText»
+		«ENDFOR»
+		|===
+	'''
+	
+	def private generateAttributesDoc(List<Attribute> attributes) '''
+		.Attributes
+		|===
+		| Name | Type | Description
+		«FOR at : attributes»
+			
+			| «at.name»
+			| «at.type.type.name»
+			| «at.docText»
+		«ENDFOR»	
+		|===
+	'''
+	
+	def private generateOperationsDoc(List<StandardOperation> operations) '''
+		.Operations
+		|===
+		| Name | Return type | Arguments | Description
+		«FOR op : operations SEPARATOR '\n'»
+			
+			|«op.name»
+			| «IF op.returnType !== null»«op.returnType.type.name»«ELSE»void«ENDIF»
+			| «FOR pa : op.arguments SEPARATOR ", "»«pa.name»: «pa.refType.type.name»«ENDFOR»
+			| «op.docText»
+		«ENDFOR»
+		|===
+	'''
+	
+	def private getType(Port p) {
+		if (p.conjugated) "conjugated" else "regular"
+	}
+	
+	def private getKind(Port p) {
+		if (p.internal) "internal"
+		else if (p.external) "external"
+		else if (p.relay) "relay"
+		else "?"
+	}
+	
+	def private String getMultAsText(Port p) {
+		if(p.multiplicity == -1) "*"
+		else p.multiplicity.toString
+	}
+	
+	def private getDocText(EObject object) {
+		val eClass = object.eClass;
+		val feature = eClass.getEStructuralFeature("docu")
+		if(feature !== null) {
+			val docu = object.eGet(feature) as Documentation
+			if(docu !== null) {
+				return String.join('\n', docu.lines)
+			}
+		}
+		
+		val docu = object.documentation
+		if(docu !== null) docu else ""
+	}
+	
+	def private getShortDocText(EObject object) {
+		val docText = object.docText
+		val index = docText.indexOf('\n')
+		if(index != -1) docText.subSequence(0, index) else docText
+	}
+	
+	def private includeImage(String filename) {
+		'''image:«filename»[]'''
+	}
+	
+	def private static crossReference(RoomClass rc) {
+		crossReference(rc.anchor)
+	}
+	
+	def private static crossReference(CharSequence anchor) {
+		'''<<«anchor»>>'''
+	}
+	
+	def private static defineAnchor(RoomClass rc) {
+		defineAnchor(rc.anchor)
+	}
+	
+	def private static defineAnchor(CharSequence anchor) {
+		'''[[«anchor»]]'''
+	}
+	
+	def private static getAnchor(RoomClass rc) {
+		'''«(rc.eContainer as RoomModel).name».«rc.name»'''
+	}
+	
+	def private static String fill(char c, int length) {
+		val builder = new StringBuilder(length)
+		for(var i = 0; i < length; i++) {
+			builder.append(c)
+		}
+		builder.toString
+	}
+		
+	private static class RoomPackage {
+		
+		public final String name
+		public final Iterable<LogicalSystem> systems
+		public final Iterable<SubSystemClass> subSystemClasses
+		public final Iterable<GeneralProtocolClass> protocolClasses
+		public final Iterable<EnumerationType> enumerationTypes
+		public final Iterable<DataClass> dataClasses
+		public final Iterable<ActorClass> actorClasses
+		
+		private new(String name, Iterable<RoomModel> models) {
+			this.name = name
+			
+			systems = models.map[it.systems].flatten.sortBy[name]
+			subSystemClasses = models.map[it.subSystemClasses].flatten.sortBy[name]
+			protocolClasses = models.map[it.protocolClasses].flatten.sortBy[name]
+			enumerationTypes = models.map[it.enumerationTypes].flatten.sortBy[name]
+			dataClasses = models.map[it.dataClasses].flatten.sortBy[name]
+			actorClasses = models.map[it.actorClasses].flatten.sortBy[name]
+		}
+		
+	}
+	
+}
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/DocGen.xtend b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/DocGen.xtend
deleted file mode 100644
index 989debf..0000000
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/DocGen.xtend
+++ /dev/null
@@ -1,614 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2011 protos software gmbh (http://www.protos.de).
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License 2.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-2.0/
- *
- * SPDX-License-Identifier: EPL-2.0
- * 
- * CONTRIBUTORS:
- * 		Thomas Jung, Thomas Schuetz (initial contribution)
- * 
- *******************************************************************************/
-
-package org.eclipse.etrice.generator.doc.gen
-
-import com.google.inject.Inject
-import com.google.inject.Singleton
-import java.io.File
-import java.util.List
-import java.util.Set
-import org.eclipse.etrice.core.common.base.Documentation
-import org.eclipse.etrice.core.common.base.util.RelativePathHelpers
-import org.eclipse.etrice.core.fsm.fSM.State
-import org.eclipse.etrice.core.genmodel.etricegen.Root
-import org.eclipse.etrice.core.room.ActorClass
-import org.eclipse.etrice.core.room.Attribute
-import org.eclipse.etrice.core.room.CompoundProtocolClass
-import org.eclipse.etrice.core.room.DataClass
-import org.eclipse.etrice.core.room.EnumerationType
-import org.eclipse.etrice.core.room.LogicalSystem
-import org.eclipse.etrice.core.room.Port
-import org.eclipse.etrice.core.room.ProtocolClass
-import org.eclipse.etrice.core.room.RoomClass
-import org.eclipse.etrice.core.room.RoomModel
-import org.eclipse.etrice.core.room.StandardOperation
-import org.eclipse.etrice.core.room.SubSystemClass
-import org.eclipse.etrice.core.room.util.RoomHelpers
-import org.eclipse.etrice.generator.fsm.base.CodegenHelpers
-import org.eclipse.etrice.generator.base.logging.ILogger
-import org.eclipse.etrice.generator.base.io.IGeneratorFileIO
-
-@Singleton
-class DocGen {
-
-	@Inject extension RoomHelpers
-	@Inject extension CodegenHelpers
-	@Inject IGeneratorFileIO fileIO
-	@Inject ILogger logger
-	
-	final val IMGDIR_DEFAULT = "./images"
-	final val IMGWIDTH_DEFAULT = "1.0\\textwidth"
-	
-	static class DocGenContext {
-		val Root root
-		val RoomModel model
-		
-		new(Root r, RoomModel m) {
-			root = r
-			model = m
-		}
-		
-	}
-	
-	def doGenerate(Root root) {
-		for (model: root.models) {
-			val ctx = new DocGen.DocGenContext(root,model)
-			var file = model.name+".tex"
-			val Set<RoomModel> referencedModels = newHashSet
-			logger.logInfo("generating LaTeX documentation: '"+file+"'")
-			
-			// Save documentation fragments for RoomModel children
-			model.systems.forEach[generateDoc(ctx).saveAs(model.name+docFragmentName)]
-			model.systems.forEach[referencedModels.addAll(root.getReferencedModels(it))]
-			model.subSystemClasses.forEach[generateDoc(ctx).saveAs(model.name+docFragmentName)]
-			model.subSystemClasses.forEach[referencedModels.addAll(root.getReferencedModels(it))]
-			model.protocolClasses.forEach[generateDoc(ctx).saveAs(model.name+docFragmentName)]
-			model.protocolClasses.forEach[referencedModels.addAll(root.getReferencedModels(it))]
-			model.enumerationTypes.forEach[generateDoc(ctx).saveAs(model.name+docFragmentName)]
-			model.enumerationTypes.forEach[referencedModels.addAll(root.getReferencedModels(it))]
-			model.dataClasses.forEach[generateDoc(ctx).saveAs(model.name+docFragmentName)]
-			model.dataClasses.forEach[referencedModels.addAll(root.getReferencedModels(it))]
-			model.actorClasses.forEach[generateDoc(ctx).saveAs(model.name+docFragmentName)]
-			model.actorClasses.forEach[referencedModels.addAll(root.getReferencedModels(it))]
-			
-			// Save top-level documentation for RoomModel
-			generateModelDoc(ctx, referencedModels).saveAs(file)
-			
-//			logger.logInfo("main path "+model.docGenerationTargetPath)
-//			referencedModels.forEach[logger.logInfo("ref path "+docGenerationTargetPath+" - "
-//				+RelativePathHelpers.getRelativePath(
-//					model.docGenerationTargetPath.removeLast, docGenerationTargetPath.removeLast, true)
-//			)]
-		}
-	}
-	
-	def private removeLast(String str) {
-		str.substring(0, str.length-1)
-	}
-	
-	def private appendIfNotEmpty(String txt, String suffix) {
-		if (txt.empty)
-			txt
-		else
-			txt+suffix
-	}
-	
-	def private generateModelDoc(DocGen.DocGenContext ctx, Set<RoomModel> referencedModels) {
-		var model = ctx.model
-		'''
-		\documentclass[titlepage]{article}
-		\usepackage{import}
-		\usepackage{graphicx}
-		\usepackage{xr}
-		\usepackage{hyperref}
-		\IfFileExists{../doc/userinputs.tex}{\subimport{../doc/}{userinputs.tex}}{} %hook for conditional user-specific inputs, includes, macros, ... 
-		\usepackage[a4paper,text={160mm,255mm},centering,headsep=5mm,footskip=10mm]{geometry}
-		\usepackage{nonfloat}
-		\parindent 0pt
-		\makeatletter
-		\newcommand\level[1]{%
-		   \ifcase#1\relax\expandafter\chapter\or
-		     \expandafter\section\or
-		     \expandafter\subsection\or
-		     \expandafter\subsubsection\else
-		     \def\next{\@level{#1}}\expandafter\next
-		   \fi}
-		
-		\newcommand{\@level}[1]{%
-		\@startsection{level#1}
-		     {#1}
-		     {\z@}%
-		     {-3.25ex\@plus -1ex \@minus -.2ex}%
-		     {1.5ex \@plus .2ex}%
-		     {\normalfont\normalsize\bfseries}}
-		
-		\newdimen\@leveldim
-		 \newdimen\@dotsdim
-		 {\normalfont\normalsize
-		  \sbox\z@{0}\global\@leveldim=\wd\z@
-		  \sbox\z@{.}\global\@dotsdim=\wd\z@
-		 }  
-		\newcounter{level4}[subsubsection]
-		 \@namedef{thelevel4}{\thesubsubsection.\arabic{level4}}
-		 \@namedef{level4mark}#1{}
-		 \def\l@section{\@dottedtocline{1}{0pt}{\dimexpr\@leveldim*4+\@dotsdim*1+6pt\relax}}
-		 \def\l@subsection{\@dottedtocline{2}{0pt}{\dimexpr\@leveldim*5+\@dotsdim*2+6pt\relax}}
-		 \def\l@subsubsection{\@dottedtocline{3}{0pt}{\dimexpr\@leveldim*6+\@dotsdim*3+6pt\relax}}
-		 \@namedef{l@level4}{\@dottedtocline{4}{0pt}{\dimexpr\@leveldim*7+\@dotsdim*4+6pt\relax}}
-		
-		\count@=4
-		 \def\@ncp#1{\number\numexpr\count@+#1\relax}
-		 \loop\ifnum\count@<100
-		   \begingroup\edef\x{\endgroup
-		     \noexpand\newcounter{level\@ncp{1}}[level\number\count@]
-		     \noexpand\@namedef{thelevel\@ncp{1}}{%
-		       \noexpand\@nameuse{thelevel\@ncp{0}}.\noexpand\arabic{level\@ncp{0}}}
-		     \noexpand\@namedef{level\@ncp{1}mark}####1{}%
-		     \noexpand\@namedef{l@level\@ncp{1}}%
-		       {\noexpand\@dottedtocline{\@ncp{1}}{0pt}{\the\dimexpr\@leveldim*\@ncp{5}+\@dotsdim*\@ncp{0}\relax}}}%
-		   \x
-		   \advance\count@\@ne
-		 \repeat
-		 \makeatother
-		 \setcounter{secnumdepth}{100}
-		 \setcounter{tocdepth}{100}
-
-
-		\title{«model.name.escapedString» Model Documentation}
-		\date{\today}
-		\author{generated by eTrice}
-		
-		\begin{document}
-		
-		\pagestyle{plain}
-		\maketitle
-		\tableofcontents
-
-		\newpage
-		\listoffigures
-		\newpage
-		\section{Model Description}
-		
-		«IF !referencedModels.empty»
-			\section{Referenced Models}
-			
-			\begin{itemize}
-			«FOR refModel : referencedModels.sortBy[name]»
-«««				«val relPath = RelativePathHelpers.getRelativePath(
-«««					model.generationTargetPath.removeLast, refModel.generationTargetPath.removeLast, true).appendIfNotEmpty("/")»
-«««				\item \href{«(relPath.replace("\\", "/")+refModel.name).escapedString».pdf}{«refModel.name.escapedString»}
-				\item «refModel.name.escapedString»
-			«ENDFOR»
-			\end{itemize}
-			\newpage
-		«ENDIF»
-		
-		«IF !model.systems.empty»
-			\section{Logical System Classes}
-			«FOR s : model.systems»
-				«s.generateImport(model.name)»
-			«ENDFOR»
-			\newpage
-		«ENDIF»
-		
-		«IF !model.subSystemClasses.empty»
-			\section{Subsystem Classes}
-			«FOR s : model.subSystemClasses»
-				«s.generateImport(model.name)»
-			«ENDFOR»
-			\newpage
-		«ENDIF»
-		
-		«IF !model.protocolClasses.empty»
-			\section{Protocol Classes}
-			«FOR c : model.protocolClasses»
-				«c.generateImport(model.name)»
-			«ENDFOR»
-			\newpage
-		«ENDIF»
-		
-		«IF !model.enumerationTypes.empty»
-			\section{Enumeration Types}
-			«FOR e : model.enumerationTypes»
-				«e.generateImport(model.name)»
-			«ENDFOR»
-			\newpage
-		«ENDIF»
-		
-		«IF !model.dataClasses.empty»
-			\section{Data Classes}
-			«FOR c : model.dataClasses»
-				«c.generateImport(model.name)»
-			«ENDFOR»
-			\newpage
-		«ENDIF»
-		
-		«IF !model.actorClasses.empty»
-			\section{Actor Classes}
-			«FOR c : model.actorClasses»
-				«c.generateImport(model.name)»
-			«ENDFOR»
-		«ENDIF»
-		\end{document}
-	'''
-	}
-	
-	def private dispatch generateDoc(LogicalSystem system, DocGen.DocGenContext ctx) {
-		val filename = system.name + "_instanceTree.jpg"
-		'''
-		\level{2}{«system.name.escapedString»}
-		«system.docu.generateDocText»
-		\level{3}{Instance Tree}
-		«IF ctx.model.fileExists(filename.imagePath).equals("true")»
-			«includeGraphics(filename.imagePath,IMGWIDTH_DEFAULT,system.name + " Instance Tree")»
-		«ENDIF»
-		'''
-	}
-	
-	def private dispatch generateDoc(SubSystemClass ssc, DocGen.DocGenContext ctx) {
-		val filename = ssc.name.escapedString + "_structure.jpg"
-		
-		'''
-		\level{2}{«ssc.name.escapedString»}
-		«ssc.docu.generateDocText»
-		\level{3}{Structure}
-		«IF ctx.model.fileExists(filename.imagePath).equals("true")»
-			«includeGraphics(filename.imagePath,IMGWIDTH_DEFAULT,ssc.name + " Structure")»
-		«ENDIF»
-		'''
-	}
-	
-	def private dispatch generateDoc(EnumerationType dc, DocGen.DocGenContext ctx) {
-	'''
-		\level{2} {«dc.name.escapedString»}
-		«dc.docu.generateDocText»
-		«IF dc.primitiveType!==null»
-			The literals of this enumeration are based on PrimitiveType «dc.primitiveType.name.escapedString».
-		«ELSE»
-			The literals of this enumeration are of type \texttt{int}.
-		«ENDIF»
-		\level{3}{Literals}
-		\begin{tabular}[ht]{|l|r|r|r|}
-		\hline
-		\textbf{Name} & \textbf{Value} & \textbf{Hex Value} & \textbf{Binary Value}\\
-		«FOR lit: dc.literals»
-			\hline
-			«lit.name.escapedString» & «lit.literalValue» & 0x«Long.toHexString(lit.literalValue)» & «Long.toBinaryString(lit.literalValue)»\\
-		«ENDFOR»
-		\hline
-		\end{tabular}
-	'''	
-	}
-	
-	def private dispatch generateDoc(DataClass dc, DocGen.DocGenContext ctx) {'''
-		\level{2} {«dc.name.escapedString»}
-		«dc.docu.generateDocText»
-		\level{3}{Attributes}
-		«dc.attributes.generateAttributesDoc»
-		
-		\level{3}{Operations}
-		«dc.operations.generateOperationsDoc»
-	'''	
-	}
-	
-	def private dispatch generateDoc(ProtocolClass pc, DocGen.DocGenContext ctx) {'''
-		\level{2} {«pc.name.escapedString»}
-		«pc.docu.generateDocText»
-		«IF !pc.allIncomingMessages.empty»
-			\level{3}{Incoming Messages}
-			
-			\begin{tabular}[ht]{|l|l|p{8cm}|}
-			\hline
-			Message & Type & Description\\
-			«FOR ims : pc.allIncomingMessages»
-				\hline
-				«ims.name.escapedString» & «IF ims.data !== null» «ims.data.refType.type.name.escapedString» «ENDIF» & «ims.docu.generateDocText»\\
-			«ENDFOR»
-			\hline
-			\end{tabular}
-		«ENDIF»
-		«IF !pc.allOutgoingMessages.empty»
-			\level{3}{Outgoing Messages}
-			\begin{tabular}[ht]{|l|l|p{8cm}|}
-			\hline
-			Message & Type & Description\\
-			«FOR oms : pc.allOutgoingMessages»
-				\hline
-				«oms.name.escapedString» & «IF oms.data !== null» «oms.data.refType.type.name.escapedString» «ENDIF» & «oms.docu.generateDocText»\\
-			«ENDFOR»
-			\hline
-			\end{tabular}
-		«ENDIF»
-	'''	
-	}
-	
-	def private dispatch generateDoc(CompoundProtocolClass pc, DocGen.DocGenContext ctx) {'''
-		\level{2} {«pc.name.escapedString»}
-		«pc.docu.generateDocText»
-		\level{3}{Sub Protocols}
-		
-		\begin{tabular}[ht]{|l|l|}
-		\hline
-		\textbf{Name} & \textbf{Protocol}\\
-		«FOR sub : pc.subProtocols»
-			\hline
-			«sub.name.escapedString» & «sub.protocol.name.escapedString»\\
-		«ENDFOR»
-		\hline
-		\end{tabular}
-	'''
-	}
-	
-	def dispatch private generateDoc(ActorClass ac, DocGen.DocGenContext ctx) {
-		val filename = ac.name + "_structure.jpg"
-		'''
-		\level{2}{«ac.name.escapedString»}
-		«ac.docu.generateDocText»
-		
-		«IF ctx.model.fileExists(filename.imagePath).equals("true") && (!ac.allInterfaceItems.empty || !ac.actorRefs.empty)»
-			\level{3}{Structure}
-			«ac.structureDocu.generateDocText»
-			«includeGraphics(filename.imagePath,IMGWIDTH_DEFAULT,ac.name + " Structure")»
-		«ELSEIF ac.structureDocu !== null»
-			\level{3}{Structure}
-			«ac.structureDocu.generateDocText»
-		«ENDIF»
-		
-		«IF !ac.allPorts.empty»
-			\level{3}{Ports}
-			«generatePortDoc(ac)»
-		«ENDIF»
-		
-		«IF ac.isBehaviorAnnotationPresent("BehaviorManual")»
-			\level{3}{Behavior}
-			«ac.behaviorDocu.generateDocText»
-			The behavior for ActorClass «ac.name» is implemented manually.
-		«ELSEIF ac.hasNonEmptyStateMachine»
-			\level{3}{Behavior}
-			«ac.behaviorDocu.generateDocText»
-			«generateFsmDoc(ctx.model, ac)»
-		«ELSEIF ac.behaviorDocu !== null»
-			\level{3}{Behavior}
-			«ac.behaviorDocu.generateDocText»
-		«ENDIF»
-		
-		«IF !ac.attributes.empty»
-			\level{3}{Attributes}
-			«ac.attributes.generateAttributesDoc»
-		«ENDIF»
-		
-		«IF !ac.operations.empty»
-			\level{3}{Operations}
-			«ac.operations.generateOperationsDoc»
-		«ENDIF»
-		'''
-	}
-
-	def private generateFsmDoc(RoomModel model, ActorClass ac){
-		val filename = ac.name + "_behavior.jpg"
-		'''
-		\level{4}{Top Level}
-		«IF model.fileExists(filename.imagePath).equals("true")»
-			«includeGraphics(filename.imagePath,IMGWIDTH_DEFAULT,ac.name + " Top State")»
-		«ENDIF»
-		
-		\begin{par}
-		«FOR s : ac.stateMachine.states»
-			«IF s.docu !== null»	
-				\textbf{State description} \textit{«s.genStatePathName.replaceAll("_","\\\\_")»}:
-				\newline
-				«generateDocText(s.docu)»
-				\newline\newline
-			«ENDIF»
-		«ENDFOR»
-
-		«FOR c : ac.stateMachine.chPoints»
-			«IF c.docu !== null»
-				\textbf{Choicepoint description} \textit{«c.name.escapedString»}:
-				\newline
-				«generateDocText(c.docu)»
-				\newline\newline
-			«ENDIF»
-		«ENDFOR»
-		\end{par}
-		
-		«FOR s : ac.stateMachine.states»	
-			«IF !s.isLeaf»
-				«generateStateDoc(model, ac, s)»
-			«ENDIF»
-		«ENDFOR»		
-		'''
-	}
-	
-	def private getType(Port p) {
-		if (p.conjugated) "conj." else "reg."
-	}
-	
-	def private getKind(Port p) {
-		if (p.internal)
-			"internal"
-		else if (p.external)
-			"external"
-		else if (p.relay)
-			"relay"
-		else
-			"?"
-	}
-	
-	def private String getMultAsText(Port p) {
-		if (p.multiplicity==-1)
-			"*"
-		else
-			p.multiplicity.toString
-	}
-	
-	def private String generatePortDoc(ActorClass ac) {
-		'''
-			\begin{tabular}[ht]{|l|l|l|l|l|p{5cm}|}
-			\hline
-			\textbf{Name} & \textbf{Protocol} & \textbf{Type} & \textbf{Kind} & \textbf{Multiplicity} & \textbf{Description}\\
-			«FOR at : ac.allPorts»
-				\hline
-				«at.name.escapedString» & «at.protocol.name.escapedString» & «at.type» & «at.kind» & «at.multAsText» & «generateDocText(at.docu)»\\
-			«ENDFOR»	
-			\hline
-			\end{tabular}
-		'''
-	}
-	
-	def private String generateStateDoc(RoomModel model, ActorClass ac, State state){
-		val filename = ac.name + "_" + state.genStatePathName + "_behavior.jpg"
-
-		logger.logInfo("Gen Filename: " + filename); 
-		'''
-		\level{4}{Subgraph «state.genStatePathName.replaceAll("_","\\\\_")»}
-		«IF model.fileExists(filename.imagePath).equals("true")»
-			«includeGraphics(filename.imagePath,IMGWIDTH_DEFAULT,ac.name + "_" + state.genStatePathName)»
-		«ENDIF»
-		
-		\begin{par}
-		«FOR s : state.subgraph.states»
-			«IF s.docu !== null»	
-				\textbf{State description} \textit{«s.genStatePathName.replaceAll("_","\\\\_")»}:
-				\newline
-				«generateDocText(s.docu)»
-				\newline\newline
-			«ENDIF»
-		«ENDFOR»
-
-		«FOR c : state.subgraph.chPoints»
-			«IF c.docu !== null»
-				\textbf{Choicepoint description} \textit{«c.name.escapedString»}:
-				\newline
-				«generateDocText(c.docu)»
-				\newline\newline
-			«ENDIF»
-		«ENDFOR»
-		\end{par}
-			
-		«FOR s : state.subgraph.states»	
-			«IF !s.isLeaf»
-				«generateStateDoc(model, ac, s)»
-			«ENDIF»
-		«ENDFOR»		
-		'''		
-	}
-
-	def private generateAttributesDoc(List<Attribute> attributes) {
-		'''
-		«IF !attributes.empty»
-			\begin{tabular}[ht]{|l|l|p{8cm}|}
-			\hline
-			\textbf{Name} & \textbf{Type} & \textbf{Description}\\
-			«FOR at : attributes»
-			\hline
-			«at.name.escapedString» & «at.type.type.name.escapedString» & «generateDocText(at.docu)»\\
-			«ENDFOR»	
-			\hline
-			\end{tabular}
-		«ENDIF»	
-		'''
-		}
-	
-	def private generateOperationsDoc(List<StandardOperation> operations) {
-		'''
-		«FOR op : operations»
-			\begin{tabular}[ht]{|l|l|}
-			\hline		
-				Name: & «op.name.escapedString»\\
-				\hline
-				ReturnType: &  «IF op.returnType !== null»«op.returnType.type.name.escapedString»«ELSE»void«ENDIF»\\
-				\hline
-				Arguments: & «FOR pa : op.arguments SEPARATOR ", "»«pa.name.escapedString»:«pa.refType.type.name.escapedString»«ENDFOR»\\
-				«IF op.docu !== null»
-					\hline
-					«IF op.docu.toString.length > 85»
-						\multicolumn{2} {|p{13cm}|} {«generateDocText(op.docu)»}\\
-					«ELSE»
-						\multicolumn{2} {|l|} {«generateDocText(op.docu)»}\\
-					«ENDIF»
-				«ENDIF»
-				\hline
-			\end{tabular}
-			\newline\newline\newline
-		«ENDFOR»
-		'''
-	}
-	
-	def private generateDocText(Documentation doc){
-		'''
-		«IF doc!==null»
-			% begin text from user Documentation
-			«FOR line: doc.lines»
-				«line.escapedString»
-			«ENDFOR»
-			% end text from user Documentation
-		«ENDIF»
-		'''
-	}
-	
-	def private fileExists(RoomModel model, String f){
-//		val absPath = model.generationTargetPath + f
-//		val file = new File(absPath);
-//		val exist = file.exists();
-//			if (exist == true) {
-//				// File or directory exists
-//				logger.logInfo("File found ! " + f); 
-//				return "true"
-//			} else {
-//				// File or directory does not exist
-//				logger.logInfo("File not found ! " + f);
-//				return "false"
-//		}
-
- 
-		return "false"
-	}
-	
-	def private includeGraphics(String filename, String width, String caption){
-		var latexCaption = caption.replaceAll("_","\\\\_");
-		'''
-			{
-			\centering{}
-			\includegraphics[width=«width»]{«filename»}
-			\figcaption{«latexCaption»}
-			}
-		'''
-	}
-	
-	def private escapedString(String text) {
-		text.replace("_","\\_")
-	}
-	
-	def private getImagePath(String filename) {
-		var filenamei = IMGDIR_DEFAULT + "/" + filename
-		filenamei = filenamei.replaceAll("\\\\","/")
-		return filenamei
-	}
-	
-	def private saveAs(CharSequence content, String filename) {
-		fileIO.generateFile(filename, content)
-	}
-	
-	def private docFragmentName(RoomClass rc) {
-		rc.name + ".tex"
-	}
-	
-	def private generateImport(RoomClass rc, String dir)
-		'''«rc.docFragmentName.generateImport(dir)»'''
-	
-	def private generateImport(String name, String dir)
-		'''\subimport*{«dir»/}{«name»}'''
-}
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/InstanceDiagramGen.xtend b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/InstanceDiagramGen.xtend
index 3011ae5..603c4e8 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/InstanceDiagramGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/InstanceDiagramGen.xtend
@@ -16,7 +16,6 @@
 
 import com.google.inject.Inject
 import com.google.inject.Singleton
-import java.io.File
 import org.eclipse.etrice.core.genmodel.etricegen.AbstractInstance
 import org.eclipse.etrice.core.genmodel.etricegen.ActorInstance
 import org.eclipse.etrice.core.genmodel.etricegen.ActorInterfaceInstance
@@ -25,57 +24,36 @@
 import org.eclipse.etrice.core.genmodel.etricegen.SystemInstance
 import org.eclipse.etrice.generator.generic.RoomExtensions
 
-import static java.lang.Runtime.*
 import org.eclipse.etrice.core.etmap.util.ETMapUtil
-import org.eclipse.etrice.generator.base.logging.ILogger
 import org.eclipse.etrice.generator.base.io.IGeneratorFileIO
 
 @Singleton
 class InstanceDiagramGen {
 
-	@Inject extension IGeneratorFileIO fileIO
 	@Inject extension RoomExtensions roomExt
-	@Inject ILogger logger
 	
-	def doGenerate(Root root) {
-		for (model: root.models) {
-			var path = "images/"
-			var batchFile = "dot2jpg.bat"
-			for (sys : root.systemInstances) {
-				var file = sys.name+"_instanceTree.dot"
-				fileIO.generateFile("generating instance tree diagram", path + file, root.generate(sys))
-			}
-			fileIO.generateFile(path + batchFile, root.generate2jpg())
-			runDot2Jpg(path, batchFile)
+	def doGenerate(Root root, IGeneratorFileIO fileIO) {
+		var path = "images/"
+		for (sys : root.systemInstances) {
+			var file = sys.name+"_instanceTree.dot"
+			fileIO.generateFile("generating instance tree diagram", path + file, root.generate(sys))
 		}
 	}
 	
-	// generate batch file to convert .dot to .jpg
-	// dot -Tjpg -oSS.jpg SS.dot	
-	def private generate2jpg(Root root){
-		'''
-			«FOR sys : root.systemInstances»
-				dot -Tjpg -o «sys.name»_instanceTree.jpg «sys.name»_instanceTree.dot
-			«ENDFOR»
-		'''
-	}
-	
-	def private generate(Root root, SystemInstance sys) {
-		'''
-			digraph «sys.name» {
-				rankdir=LR;
-				node [shape=box];
-				«sys.path.getPathName()» [label="«sys.name»\n(«sys.name»)" style=filled color=red];
-				«FOR ssi : sys.instances»
-					«ssi.path.getPathName()» [label="«ssi.name»\n(«ssi.subSystemClass.name»)" style=filled color=yellow];
-					«sys.path.getPathName()» -> «ssi.path.getPathName()»;  
-					«FOR ai : ssi.instances»
-						«instance(ai)»
-					«ENDFOR»
+	def private generate(Root root, SystemInstance sys) '''
+		digraph «sys.name» {
+			rankdir=LR;
+			node [shape=box];
+			«sys.path.getPathName()» [label="«sys.name»\n(«sys.name»)" style=filled color=red];
+			«FOR ssi : sys.instances»
+				«ssi.path.getPathName()» [label="«ssi.name»\n(«ssi.subSystemClass.name»)" style=filled color=yellow];
+				«sys.path.getPathName()» -> «ssi.path.getPathName()»;
+				«FOR ai : ssi.instances»
+					«instance(ai)»
 				«ENDFOR»
-			}
-		'''
-	}
+			«ENDFOR»
+		}
+	'''
 	
 	def private String instance(AbstractInstance ai) {
 		val parent = ai.eContainer as StructureInstance
@@ -97,17 +75,6 @@
 			«ENDIF» 
 		'''
 	}
-
- 	def private runDot2Jpg(String path, String bat){
- 		var wdir = new File(path)
- 		try {
-			val p = getRuntime.exec("cmd /C "+bat, null, wdir)
-			logger.logInfo(bat+" finished with "+p.waitFor)
-		}
-		catch (Exception e) {
-			e.printStackTrace();
-		}
-
-	}
+	
 }
 	
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/MainGen.xtend b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/MainGen.xtend
index 327be64..cfeff66 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/MainGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/gen/MainGen.xtend
@@ -16,28 +16,22 @@
 
 import com.google.inject.Inject
 import com.google.inject.Singleton
-import org.eclipse.emf.ecore.resource.Resource
 import org.eclipse.etrice.core.genmodel.etricegen.Root
-import org.eclipse.etrice.generator.generic.PrepareFileSystem
+import org.eclipse.etrice.generator.base.io.IGeneratorFileIO
+import org.eclipse.etrice.generator.base.args.Arguments
+
+import static org.eclipse.etrice.generator.doc.setup.DocGeneratorOptions.INCLUDE_IMAGES
 
 @Singleton
 class MainGen {
 	
 	@Inject InstanceDiagramGen instanceDiagramGen
-	@Inject PrepareFileSystem prepFS
-	@Inject DocGen docGen
+	@Inject AsciiDocGen docGen
 	
-	def void doGenerate(Resource resource) {
-		prepFS.prepare
-		for (e: resource.contents){
-			if (e instanceof Root) {
-				doGenerate(e as Root)
-			}
-		}
-	}
-	
-	def private void doGenerate(Root e) {
-		instanceDiagramGen.doGenerate(e);
-		docGen.doGenerate(e);
+	def void doGenerate(Root root, Arguments args, IGeneratorFileIO fileIO) {
+		val includeImages = args.get(INCLUDE_IMAGES)
+		
+		instanceDiagramGen.doGenerate(root, fileIO);
+		docGen.doGenerate(root, fileIO, includeImages);
 	}
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptions.java b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptions.java
index 33a565f..941e33e 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptions.java
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptions.java
@@ -25,17 +25,17 @@
 	
 	public static final String GROUP_ETRICE_DOC = "eTrice Documentation";
 	
-	public static final BooleanOption GEN_INST_DIAG = new BooleanOption(
+	public static final BooleanOption INCLUDE_IMAGES = new BooleanOption(
 			GROUP_ETRICE_DOC,
-			"genInstDiag",
-			"generateInstanceDiagram",
-			"if specified then an instance diagram is created for each subsystem",
+			"include_images",
+			"includeImages",
+			"If specified images are included in the generated documentation",
 			false);
 	
 	@Override
 	public void configure(List<Option<?>> options) {
 		super.configure(options);
 		
-		options.add(GEN_INST_DIAG);
+		options.add(INCLUDE_IMAGES);
 	}
 }
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptionsHelper.java b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptionsHelper.java
deleted file mode 100644
index 40c13c6..0000000
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/DocGeneratorOptionsHelper.java
+++ /dev/null
@@ -1,26 +0,0 @@
-/*******************************************************************************
-* Copyright (c) 2018 protos software gmbh (http://www.protos.de).
-* All rights reserved.
-*
-* 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:
-*           Jan Belle (initial contribution)
-*
- *******************************************************************************/
-
-package org.eclipse.etrice.generator.doc.setup;
-
-import org.eclipse.etrice.generator.base.AbstractGeneratorOptionsHelper;
-import org.eclipse.etrice.generator.base.args.Arguments;
-
-public class DocGeneratorOptionsHelper extends AbstractGeneratorOptionsHelper {
-	
-	public boolean isGenerateInstanceDiagram(Arguments args) {
-		return args.get(DocGeneratorOptions.GEN_INST_DIAG);
-	}
-}
diff --git a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
index c1d09a0..ae4e054 100644
--- a/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
+++ b/plugins/org.eclipse.etrice.generator.doc/src/org/eclipse/etrice/generator/doc/setup/GeneratorModule.java
@@ -17,17 +17,17 @@
 import org.eclipse.emf.ecore.EValidator;
 import org.eclipse.emf.ecore.resource.ResourceSet;
 import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
+import org.eclipse.etrice.core.genmodel.fsm.ICommonDataCalculator;
 import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician;
+import org.eclipse.etrice.core.room.util.CommonDataCalculator;
 import org.eclipse.etrice.generator.base.EMFSetup;
 import org.eclipse.etrice.generator.base.GenerationEMFDiagnostician;
 import org.eclipse.etrice.generator.base.IGenerator;
 import org.eclipse.etrice.generator.base.ITranslationProvider;
 import org.eclipse.etrice.generator.base.ModelLoader;
 import org.eclipse.etrice.generator.base.ModelValidator;
-import org.eclipse.etrice.generator.base.io.GeneratorFileIO;
 import org.eclipse.etrice.generator.base.io.IGeneratorEMFSetup;
 import org.eclipse.etrice.generator.base.io.IGeneratorResourceLoader;
-import org.eclipse.etrice.generator.base.logging.Logger;
 import org.eclipse.etrice.generator.base.setup.GeneratorName;
 import org.eclipse.etrice.generator.base.setup.GeneratorOptions;
 import org.eclipse.etrice.generator.base.validation.IGeneratorResourceValidator;
@@ -53,11 +53,10 @@
 		binder.bind(IGenerator.class).to(Main.class);
 		
 		binder.bind(ResourceSet.class).to(ResourceSetImpl.class);
-		binder.bind(Logger.class).in(Singleton.class);
-		binder.bind(GeneratorFileIO.class).in(Singleton.class);
 		binder.bind(IDiagnostician.class).to(Diagnostician.class);
 		binder.bind(Diagnostician.class).in(Singleton.class);
 		binder.bind(ITranslationProvider.class).to(DocTranslationProvider.class);
+		binder.bind(ICommonDataCalculator.class).to(CommonDataCalculator.class);
 		
 		binder.bind(EValidator.Registry.class).toInstance(EValidator.Registry.INSTANCE);
 		binder.bind(org.eclipse.emf.ecore.util.Diagnostician.class).to(GenerationEMFDiagnostician.class).asEagerSingleton();
diff --git a/plugins/org.eclipse.etrice.generator.fsm/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.fsm/META-INF/MANIFEST.MF
index b5c00bd..9dff0de 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.fsm/META-INF/MANIFEST.MF
@@ -14,3 +14,4 @@
  org.eclipse.xtend.lib;bundle-version="2.6.0",
  org.eclipse.etrice.generator.base;bundle-version="2.0.0"
 Import-Package: org.eclipse.core.runtime
+Automatic-Module-Name: org.eclipse.etrice.generator.fsm
diff --git a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/Diagnostician.java b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/Diagnostician.java
index 7064c89..c8b2d5f 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/Diagnostician.java
+++ b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/base/Diagnostician.java
@@ -65,6 +65,10 @@
 	public boolean isFailed() {
 		return validationFailed;
 	}
+	
+	public void setFailed(boolean failed) {
+		validationFailed = failed;
+	}
 
 	private String getMsgTxt(String msg, EObject source, EStructuralFeature feature, int idx) {
 		StringBuilder result = new StringBuilder(msg);
diff --git a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend
index 6174396..2c09bd1 100644
--- a/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend
+++ b/plugins/org.eclipse.etrice.generator.fsm/src/org/eclipse/etrice/generator/fsm/generic/AbstractStateMachineGenerator.xtend
@@ -62,7 +62,7 @@
 	 * @param gc the {@link GraphContainer}
 	 * @return the generated code
 	 */
-	def public String genTriggerConstants(GraphContainer gc) {
+	def String genTriggerConstants(GraphContainer gc) {
 		gc.genTriggerConstants(langExt.usesInheritance)
 	}
 
@@ -75,7 +75,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public String genTriggerConstants(GraphContainer gc, boolean omitBase) {
+	def String genTriggerConstants(GraphContainer gc, boolean omitBase) {
 		val triggers = if (omitBase)
 					gc.component.ownMessagesFromInterfaces
 					else gc.component.allMessagesFromInterfaces
@@ -102,7 +102,7 @@
 	 * @param gc the {@link GraphContainer}
 	 * @return the generated code
 	 */
-	def public genStateIdConstants(GraphContainer gc) {
+	def genStateIdConstants(GraphContainer gc) {
 		gc.genStateIdConstants(langExt.usesInheritance)
 	}
 
@@ -115,7 +115,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public genStateIdConstants(GraphContainer gc, boolean omitBase) {
+	def genStateIdConstants(GraphContainer gc, boolean omitBase) {
 		// with inheritance we exclude inherited states
 		val allStateNodes = gc.graph.allStateNodes.toList // TODO: without toList this didn't work - why?
 		
@@ -155,7 +155,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public genTransitionChainConstants(GraphContainer gc) {
+	def genTransitionChainConstants(GraphContainer gc) {
 		gc.genTransitionChainConstants(false/*langExt.usesInheritance*/)
 	}
 
@@ -170,7 +170,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public genTransitionChainConstants(GraphContainer gc, boolean omitBase) {
+	def genTransitionChainConstants(GraphContainer gc, boolean omitBase) {
 		val chains = (if (omitBase)
 			gc.graph.allLinks.filter[!inherited] else gc.graph.allLinks).map[transition].filter[isChainHead].filter(typeof(Transition)).toList
 		var offset = if (omitBase)
@@ -193,7 +193,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public String genEntryAndExitCodes(GraphContainer gc, boolean generateImplementation) {
+	def String genEntryAndExitCodes(GraphContainer gc, boolean generateImplementation) {
 		gc.genEntryAndExitCodes(generateImplementation, langExt.usesInheritance)
 	}
 
@@ -206,7 +206,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public String genEntryAndExitCodes(GraphContainer gc, boolean generateImplementation, boolean omitBase) {
+	def String genEntryAndExitCodes(GraphContainer gc, boolean generateImplementation, boolean omitBase) {
 		val states = gc.graph.allStateNodes.filter[!omitBase || !inherited].toList
 		'''
 		«FOR state : states»
@@ -223,7 +223,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public String genActionCodes(GraphContainer gc, boolean generateImplementation) {
+	def String genActionCodes(GraphContainer gc, boolean generateImplementation) {
 		gc.genActionCodes(generateImplementation, langExt.usesInheritance)
 	}
 
@@ -236,7 +236,7 @@
 	 *
 	 * @return the generated code
 	 */
-	def public String genActionCodes(GraphContainer gc, boolean generateImplementation, boolean omitBase) {
+	def String genActionCodes(GraphContainer gc, boolean generateImplementation, boolean omitBase) {
 		val transitions = gc.graph.allLinks.filter[!omitBase || !inherited].filter[transition.action.hasDetailCode].toList
 		'''
 		«FOR tr : transitions»
@@ -245,7 +245,7 @@
 		'''
 	}
 
-	def public String genStateSwitchMethods(GraphContainer gc, boolean generateImplementation) {
+	def String genStateSwitchMethods(GraphContainer gc, boolean generateImplementation) {
 		val mc = gc.component
 		val async = mc.commType==ComponentCommunicationType::ASYNCHRONOUS
 		val eventDriven = mc.commType==ComponentCommunicationType::EVENT_DRIVEN
@@ -470,7 +470,7 @@
 	 * @param state the {@link State}
 	 * @return the generated code
 	 */
-	def public String genDoCodes(State state) {'''
+	def String genDoCodes(State state) {'''
 		«IF state.hasDoCode(true)»
 			«state.doCodeOperationName»(«langExt.selfPointer(false)»);
 		«ENDIF»
@@ -488,7 +488,7 @@
 	 *	  at all then unused variables can be avoided by passing <code>true</code>
 	 * @return the generated code
 	 */
-	def public genStateSwitch(GraphContainer gc, boolean usesHdlr) {
+	def genStateSwitch(GraphContainer gc, boolean usesHdlr) {
 		var async = gc.component.commType==ComponentCommunicationType::ASYNCHRONOUS
 		var eventDriven = gc.component.commType==ComponentCommunicationType::EVENT_DRIVEN
 		var dataDriven = gc.component.commType==ComponentCommunicationType::DATA_DRIVEN
@@ -537,7 +537,7 @@
 	 *	  at all then unused variables can be avoided by passing <code>true</code>
 	 * @return the generated code
 	 */
-	def public genDataDrivenTriggers(GraphContainer gc, Node stateNode, boolean usesHdlr) {
+	def genDataDrivenTriggers(GraphContainer gc, Node stateNode, boolean usesHdlr) {
 		val chainIDScope = if (langExt.usesInheritance) gc.className+langExt.scopeSeparator else ""
 		val state = stateNode.stateGraphNode as State
 		'''
@@ -568,7 +568,7 @@
 	 *	  at all then unused variables can be avoided by passing <code>true</code>
 	 * @return the generated code
 	 */
-	def public genEventDrivenTriggers(GraphContainer gc, Node stateNode, boolean usesHdlr) {
+	def genEventDrivenTriggers(GraphContainer gc, Node stateNode, boolean usesHdlr) {
 		val caughtTriggers = new ArrayList(stateNode.caughtTriggers).sortBy[triggerCodeName]
 		val chainIDScope = if (langExt.usesInheritance) gc.className+langExt.scopeSeparator else ""
 		'''
@@ -595,11 +595,11 @@
 		'''
 	}
 
-	def public getClassName(GraphContainer gc) {
+	def getClassName(GraphContainer gc) {
 		gc.component.className
 	}
 
-	def public getClassName(ModelComponent mc) {
+	def getClassName(ModelComponent mc) {
 		mc.componentName
 	}
 
@@ -614,7 +614,7 @@
 	 * @param state the ID of the history state
 	 * @return the generated code
 	 */
-	def public getHistory(String state) {
+	def getHistory(String state) {
 		langExt.memberAccess+"history["+state+"]"
 	}
 
@@ -625,7 +625,7 @@
 	 * @param historyState the ID of the state that should be assigned
 	 * @return the generated code
 	 */
-	def public setHistory(String state, String historyState) {
+	def setHistory(String state, String historyState) {
 		langExt.memberAccess+"history["+state+"] = "+historyState
 	}
 
@@ -633,7 +633,7 @@
 	 * @return the type of (temporary) state variables (defaults to "int")
 	 * and has to be signed
 	 */
-	def public stateType() {
+	def stateType() {
 		"int"
 	}
 
@@ -642,7 +642,7 @@
 	 * The default is just a comment.
 	 * @return the generated code
 	 */
-	def public unreachableReturn() {
+	def unreachableReturn() {
 		"/* return NO_STATE; // required by CDT but detected as unreachable by JDT because of while (true) */"
 	}
 
@@ -650,21 +650,21 @@
 	 * type of (temporary) boolean variables (defaults to "boolean")
 	 * @return the generated code
 	 */
-	def public boolType() {
+	def boolType() {
 		return "boolean"
 	}
 
 	/**
 	 * empty, but may be overridden
 	 */
-	def public finalAction() {
+	def finalAction() {
 		''''''
 	}
 
 	/**
 	 * the type of the interface item passed into the receiveEvent() method
 	 */
-	def public interfaceItemType() {
+	def interfaceItemType() {
 		"InterfaceItemBase"
 	}
 
@@ -682,12 +682,12 @@
 	 * @param xpax the {@link GraphContainer}
 	 * @return <code>true</code> if the state machine uses handler transition points
 	 */
-	def public usesHandlerTrPoints(GraphContainer gc) {
+	def usesHandlerTrPoints(GraphContainer gc) {
 		!gc.graph.allTransitionPointNodes.filter(t|((t.stateGraphNode as TransitionPoint).handler)).empty
 	}
 
-	def public String genTriggeredTransitionGuard(Link link, String trigger, GraphContainer mc)
-	def public String genGuardedTransitionGuard(Link link, String trigger, GraphContainer mc)
-	def public String genActionCodeMethod(GraphContainer gc, Link link, boolean generateImplementation)
-	def public String genActionCodeMethods(GraphContainer gc, Node node, boolean generateImplementation)
+	def String genTriggeredTransitionGuard(Link link, String trigger, GraphContainer mc)
+	def String genGuardedTransitionGuard(Link link, String trigger, GraphContainer mc)
+	def String genActionCodeMethod(GraphContainer gc, Link link, boolean generateImplementation)
+	def String genActionCodeMethods(GraphContainer gc, Node node, boolean generateImplementation)
 }
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.fsmtest.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.fsmtest.ui/META-INF/MANIFEST.MF
index e0c5275..f838064 100644
--- a/plugins/org.eclipse.etrice.generator.fsmtest.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.fsmtest.ui/META-INF/MANIFEST.MF
@@ -22,3 +22,4 @@
  org.eclipse.etrice.generator.ui.contentassist.antlr,
  org.eclipse.etrice.generator.ui.internal
 Bundle-Activator: org.eclipse.etrice.generator.ui.internal.FSMtestActivator
+Automatic-Module-Name: org.eclipse.etrice.generator.fsmtest.ui
diff --git a/plugins/org.eclipse.etrice.generator.fsmtest/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.fsmtest/META-INF/MANIFEST.MF
index 29cf26a..6e5be66 100644
--- a/plugins/org.eclipse.etrice.generator.fsmtest/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.fsmtest/META-INF/MANIFEST.MF
@@ -32,4 +32,5 @@
  org.eclipse.etrice.generator.scoping,
  org.eclipse.etrice.generator.generator,
  org.eclipse.etrice.generator.formatting
+Automatic-Module-Name: org.eclipse.etrice.generator.fsmtest
 
diff --git a/plugins/org.eclipse.etrice.generator.fsmtest/plugin.xml b/plugins/org.eclipse.etrice.generator.fsmtest/plugin.xml
index 3fc7462..99c9c5d 100644
--- a/plugins/org.eclipse.etrice.generator.fsmtest/plugin.xml
+++ b/plugins/org.eclipse.etrice.generator.fsmtest/plugin.xml
@@ -4,10 +4,10 @@
 <plugin>
 
   <extension point="org.eclipse.emf.ecore.generated_package">
-    <package 
+    <package
        uri = "http://www.eclipse.org/etrice/generator/FSMtest" 
        class = "org.eclipse.etrice.generator.fsmtest.FsmtestPackage"
-       genModel = "org/eclipse/etrice/generator/FSMtest.genmodel" /> 
+       genModel = "src-gen/org/eclipse/etrice/generator/FSMtest.genmodel" /> 
 	
   </extension>
 
diff --git a/plugins/org.eclipse.etrice.generator.gnuplot/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.gnuplot/META-INF/MANIFEST.MF
index ce8b6b2..9ce7816 100644
--- a/plugins/org.eclipse.etrice.generator.gnuplot/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.gnuplot/META-INF/MANIFEST.MF
@@ -20,3 +20,4 @@
  org.eclipse.etrice.generator.base;bundle-version="2.0.0"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.generator.gnuplot
diff --git a/plugins/org.eclipse.etrice.generator.gnuplot/src/org/eclipse/etrice/generator/gnuplot/GnuplotScriptGenerator.xtend b/plugins/org.eclipse.etrice.generator.gnuplot/src/org/eclipse/etrice/generator/gnuplot/GnuplotScriptGenerator.xtend
index a69ccac..f878b1c 100644
--- a/plugins/org.eclipse.etrice.generator.gnuplot/src/org/eclipse/etrice/generator/gnuplot/GnuplotScriptGenerator.xtend
+++ b/plugins/org.eclipse.etrice.generator.gnuplot/src/org/eclipse/etrice/generator/gnuplot/GnuplotScriptGenerator.xtend
@@ -90,22 +90,22 @@
 	def protected generatePlotScript(SubSystemInstance ssi) {
 
 		// TODO: warn if more than one GnuPlot annotation
-		val plotAnnotation = ssi.subSystemClass.annotations.filter [ a |
-			a.type.name == "Gnuplot"
-		].head
-
-		val defaultFontsize = 10
+//		val plotAnnotation = ssi.subSystemClass.annotations.filter [ a |
+//			a.type.name == "Gnuplot"
+//		].head
+//
+//		val defaultFontsize = 10
 
 		// TODO: error checking
-		val format = plotAnnotation?.getAttribute("format")?.asString
-		val outputfile = plotAnnotation?.getAttribute("outputfile")?.asString
-		val width = plotAnnotation?.getAttribute("width")?.asInteger
-		val height = plotAnnotation?.getAttribute("height")?.asInteger
-		val fontsize = plotAnnotation?.getAttribute("fontsize")?.asInteger ?: defaultFontsize
-
-		val graphAnnotations = ssi.subSystemClass.annotations.filter [ a |
-			a.type.name == "GnuplotGraph"
-		].toList
+//		val format = plotAnnotation?.getAttribute("format")?.asString
+//		val outputfile = plotAnnotation?.getAttribute("outputfile")?.asString
+//		val width = plotAnnotation?.getAttribute("width")?.asInteger
+//		val height = plotAnnotation?.getAttribute("height")?.asInteger
+//		val fontsize = plotAnnotation?.getAttribute("fontsize")?.asInteger ?: defaultFontsize
+//
+//		val graphAnnotations = ssi.subSystemClass.annotations.filter [ a |
+//			a.type.name == "GnuplotGraph"
+//		].toList
 
 		'''
 			#!/gnuplot
@@ -120,18 +120,18 @@
 			
 			cd 'log'
 			set datafile separator comma
-			set terminal «format» size «width»,«height» font ",«fontsize»" background "white"
-			set output '«outputfile»'
+			set terminal �format� size �width�,�height� font ",�fontsize�" background "white"
+			set output '�outputfile�'
 			set size 1,1
-			set multiplot layout «graphAnnotations.size»,1
+			set multiplot layout �graphAnnotations.size�,1
 			set grid
 			show grid
 			set format y "% 5.3f"
-			«var i = 0»
-			«FOR a : graphAnnotations»
+			�var i = 0�
+			�FOR a : graphAnnotations�
 				
-				«ssi.generateGraph(a, i++, graphAnnotations.size)»
-			«ENDFOR»
+				�ssi.generateGraph(a, i++, graphAnnotations.size)�
+			�ENDFOR�
 			
 			unset multiplot
 			unset output
@@ -142,28 +142,28 @@
 	def protected generateGraph(SubSystemInstance ssi, Annotation graph, int index, int total) {
 
 		// TODO: handle multiple paths in the same graph
-		val paths = graph.getAttribute("paths")?.asString
+//		val paths = graph.getAttribute("paths")?.asString
 
 		// TODO: take interval from physical thread associated with actor instance instead of annotation attribute
-		val interval = graph.getAttribute("interval")?.asInteger ?: 20
-		val xtics = graph.getAttribute("xtics")?.asReal ?: 100
-		val mxtics = graph.getAttribute("mxtics")?.asInteger ?: 4
-		val ymin = graph.getAttribute("ymin")?.asReal
-		val ymax = graph.getAttribute("ymax")?.asReal
-
-		val vertOrigin = ((total - (index + 1)) as double) / total
-		val vertSize = 1.0F / total
+//		val interval = graph.getAttribute("interval")?.asInteger ?: 20
+//		val xtics = graph.getAttribute("xtics")?.asReal ?: 100
+//		val mxtics = graph.getAttribute("mxtics")?.asInteger ?: 4
+//		val ymin = graph.getAttribute("ymin")?.asReal
+//		val ymax = graph.getAttribute("ymax")?.asReal
+//
+//		val vertOrigin = ((total - (index + 1)) as double) / total
+//		val vertSize = 1.0F / total
 
 		'''
-			set yrange [«ymin ?: "*"» : «ymax ?: "*"»]
-			set xtics rotate «xtics»
-			set mxtics «mxtics»
+			set yrange [�ymin ?: "*"� : �ymax ?: "*"�]
+			set xtics rotate �xtics�
+			set mxtics �mxtics�
 			set ylabel
 			set xlabel "time (ms)"
-			timeInMs(x) = «interval» * x
-			set origin 0,«vertOrigin»
-			set size 1,«vertSize»
-			plot 'main.data.csv' using (timeInMs(column(1))):(column("«paths»")) with lines
+			timeInMs(x) = �interval� * x
+			set origin 0,�vertOrigin�
+			set size 1,�vertSize�
+			plot 'main.data.csv' using (timeInMs(column(1))):(column("�paths�")) with lines
 		'''
 	}
 }
diff --git a/plugins/org.eclipse.etrice.generator.java/.project b/plugins/org.eclipse.etrice.generator.java/.project
index b88e23b..606dd4f 100644
--- a/plugins/org.eclipse.etrice.generator.java/.project
+++ b/plugins/org.eclipse.etrice.generator.java/.project
@@ -46,6 +46,5 @@
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 	</natures>
 </projectDescription>
diff --git a/plugins/org.eclipse.etrice.generator.java/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.java/META-INF/MANIFEST.MF
index 1a3a725..ab79871 100644
--- a/plugins/org.eclipse.etrice.generator.java/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.java/META-INF/MANIFEST.MF
@@ -20,3 +20,4 @@
 Export-Package: org.eclipse.etrice.generator.java,
  org.eclipse.etrice.generator.java.gen,
  org.eclipse.etrice.generator.java.setup
+Automatic-Module-Name: org.eclipse.etrice.generator.java
diff --git a/plugins/org.eclipse.etrice.generator.java/build.gradle b/plugins/org.eclipse.etrice.generator.java/build.gradle
index d33e68f..3427182 100644
--- a/plugins/org.eclipse.etrice.generator.java/build.gradle
+++ b/plugins/org.eclipse.etrice.generator.java/build.gradle
@@ -1,5 +1,9 @@
 apply plugin: 'application'
 
+configurations {
+	archive
+}
+
 dependencies {
 	compile project(':plugins:org.eclipse.etrice.core.room')
 	compile project(':plugins:org.eclipse.etrice.core.etphys')
@@ -14,6 +18,10 @@
 	compile "org.eclipse.xtext:org.eclipse.xtext:$versions.xtext"
 }
 
+artifacts {
+	archive distZip
+}
+
 mainClassName = 'org.eclipse.etrice.generator.java.Main'
 
 distTar.enabled = false
\ No newline at end of file
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend
index 3c0dfbc..7f6b2fa 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/ConfigGenAddon.xtend
@@ -42,7 +42,7 @@
 	
 	// For SubSystemClassGen
 	
-	def public genActorInstanceConfig(ActorInstance ai, String aiVariableName){'''
+	def genActorInstanceConfig(ActorInstance ai, String aiVariableName){'''
 			«FOR a : ai.actorClass.allAttributes»
 				«applyInstanceConfig(ai, aiVariableName, new ArrayList<Attribute>().union(a))»
 			«ENDFOR»
@@ -73,7 +73,7 @@
 			}
 			DataClass:
 				'''
-					«FOR e : (aType as DataClass).allAttributes»
+					«FOR e : aType.allAttributes»
 						«applyInstanceConfig(instance, invokes+"."+a.name.invokeGetter(null), path.union(e))»
 					«ENDFOR»
 				'''	
@@ -82,7 +82,7 @@
 	
 	// For ActorClassGen
 	
-	def public genDynConfigGetterSetter(ActorClass ac){'''
+	def genDynConfigGetterSetter(ActorClass ac){'''
 		«FOR a : dataConfigExt.getDynConfigReadAttributes(ac)»
 			public «a.type.type.typeName»«IF a.size>0»[]«ENDIF» get«a.name.toFirstUpper»(){
 				if(lock_«a.name» == null)
@@ -112,7 +112,7 @@
 		«ENDFOR»
 	'''}
 	
-	def public genMinMaxConstants(ActorClass ac){
+	def genMinMaxConstants(ActorClass ac){
 		var result = '''
 			«FOR a : ac.allAttributes»
 				«genMinMaxConstantsRec(ac, a.name, new ArrayList<Attribute>().union(a))»
@@ -128,7 +128,7 @@
 		switch aType {
 			DataClass:
 				'''
-					«FOR e : (aType as DataClass).allAttributes»
+					«FOR e : aType.allAttributes»
 						«genMinMaxConstantsRec(ac, varNamePath+"_"+e.name, path.union(e))»
 					«ENDFOR»
 				'''
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend
index b58c0af..a3f9096 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/DataClassGen.xtend
@@ -22,8 +22,8 @@
 import org.eclipse.etrice.core.room.ComplexType
 import org.eclipse.etrice.core.room.DataClass
 import org.eclipse.etrice.core.room.util.RoomHelpers
-import org.eclipse.etrice.generator.fsm.base.FileSystemHelpers
 import org.eclipse.etrice.generator.base.io.IGeneratorFileIO
+import org.eclipse.etrice.generator.fsm.base.FileSystemHelpers
 import org.eclipse.etrice.generator.generic.ProcedureHelpers
 import org.eclipse.etrice.generator.generic.RoomExtensions
 
@@ -52,6 +52,7 @@
 
 		import static org.eclipse.etrice.runtime.java.etunit.EtUnit.*;
 		import java.io.Serializable;
+		import java.util.Objects;
 
 		«var models = root.getReferencedModels(dc)»
 		«FOR model : models»
@@ -103,6 +104,12 @@
 				«deepCopy(dc)»
 				return copy;
 			}
+			
+			// deep equals
+			«dc.deepEquals»
+			
+			// deep hashCode
+			«dc.deepHashCode»
 		};
 	'''
 	}
@@ -164,4 +171,26 @@
 		«ENDFOR»
 		'''
 	}
+	
+	def protected deepEquals(DataClass it) '''
+		@Override
+		public boolean equals(Object other) {
+			if (this == other) {
+				return true;
+			}
+			if(other == null || this.getClass() != other.getClass()) {
+				return false;
+			}
+
+			«name» casted = («name») other;
+			return «roomHelpers.getAllAttributes(it).map[ attr | '''Objects.deepEquals(this.«attr.name», casted.«attr.name»)'''].join(' && ')»;
+		}
+	'''
+	
+	def protected deepHashCode(DataClass it) '''
+		@Override
+		public int hashCode() {
+			return Objects.hash(«roomHelpers.getAllAttributes(it).map[ attr | '''this.«attr.name»'''].join(', ')»);
+		}
+	'''
 }
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend
index 539fe87..98abc87 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/Initialization.xtend
@@ -81,7 +81,7 @@
 		switch (aType) {
 			DataClass:
 				return '''
-					«FOR e : (aType as DataClass).allAttributes»
+					«FOR e : aType.allAttributes»
 						«attributeInitPrimitiveRec(path.union(e), roomClass)»
 					«ENDFOR»
 				'''
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend
index 5f2a5e6..6848cc1 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/JavaExtensions.xtend
@@ -37,9 +37,9 @@
 import org.eclipse.etrice.core.room.RoomClass
 import org.eclipse.etrice.generator.generic.ILanguageExtension
 import org.eclipse.etrice.generator.generic.TypeHelpers
-import org.eclipse.xtext.util.Pair
 import org.eclipse.etrice.generator.java.Main
 import org.eclipse.etrice.generator.java.setup.GeneratorOptionsHelper
+import org.eclipse.xtext.util.Pair
 
 @Singleton
 class JavaExtensions implements ILanguageExtension {
@@ -49,7 +49,7 @@
 
 	override String getTypedDataDefinition(EObject msg) {
 	    if (msg instanceof Message) {
-    		generateArglistAndTypedData((msg as Message).data).get(TypedDataKind.DECLARATION_AND_INITIALIZATION.ordinal)
+    		generateArglistAndTypedData(msg.data).get(TypedDataKind.DECLARATION_AND_INITIALIZATION.ordinal)
 	    }
 	    else {
 	        ""
@@ -215,9 +215,9 @@
 			EnumerationType:
 				dt.defaultValue
 			ExternalType:
-				"new "+(dt as ExternalType).targetName+"()"
+				"new "+ dt.targetName+"()"
 			default:
-				"new "+dt.name+"()"
+				"new "+ dt.name+"()"
 		}
 	}
 
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend
index f6c41ea..a8f7f03 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/MainGen.xtend
@@ -42,7 +42,7 @@
 		prepFS.prepare
 		for (e: resource.contents){
 			if (e instanceof Root) {
-				doGenerate(e as Root)
+				doGenerate(e)
 			}
 		}
 	}
diff --git a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend
index 7ac34c3..eefc984 100644
--- a/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend
+++ b/plugins/org.eclipse.etrice.generator.java/src/org/eclipse/etrice/generator/java/gen/NodeGen.xtend
@@ -90,7 +90,7 @@
 	 */
 	def private HashSet<ActorClass> getOptionalActorClasses(Root root, StructureInstance si) {
 		val aifs = Lists::newArrayList(si.eAllContents.filter(i|i instanceof ActorInterfaceInstance).map[aii|aii as ActorInterfaceInstance])
-		val result = Sets::newHashSet(aifs.map[aii|(aii as ActorInterfaceInstance).actorClass])
+		val result = Sets::newHashSet(aifs.map[aii|aii.actorClass])
 		for (ai : aifs) {
 			for (oi : ai.optionalInstances) {
 				result.addAll(root.getOptionalActorClasses(oi))
diff --git a/plugins/org.eclipse.etrice.generator.launch.c/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.launch.c/META-INF/MANIFEST.MF
index 27fb917..822ebd8 100644
--- a/plugins/org.eclipse.etrice.generator.launch.c/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.launch.c/META-INF/MANIFEST.MF
@@ -23,3 +23,4 @@
  org.eclipse.ui.dialogs
 Bundle-Vendor: Eclipse eTrice
 Export-Package: org.eclipse.etrice.generator.launch.c
+Automatic-Module-Name: org.eclipse.etrice.generator.launch.c
diff --git a/plugins/org.eclipse.etrice.generator.launch.cpp/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.launch.cpp/META-INF/MANIFEST.MF
index 6bd837f..83d4fc1 100644
--- a/plugins/org.eclipse.etrice.generator.launch.cpp/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.launch.cpp/META-INF/MANIFEST.MF
@@ -23,3 +23,4 @@
  org.eclipse.ui.dialogs
 Bundle-Vendor: Eclipse eTrice
 Export-Package: org.eclipse.etrice.generator.launch.cpp
+Automatic-Module-Name: org.eclipse.etrice.generator.launch.cpp
diff --git a/plugins/org.eclipse.etrice.generator.launch.java/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.launch.java/META-INF/MANIFEST.MF
index 56e5979..18ca421 100644
--- a/plugins/org.eclipse.etrice.generator.launch.java/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.launch.java/META-INF/MANIFEST.MF
@@ -23,3 +23,4 @@
  org.eclipse.ui.dialogs
 Bundle-Vendor: Eclipse eTrice
 Export-Package: org.eclipse.etrice.generator.launch.java
+Automatic-Module-Name: org.eclipse.etrice.generator.launch.java
diff --git a/plugins/org.eclipse.etrice.generator.launch/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.launch/META-INF/MANIFEST.MF
index 059c8ad..2daa273 100644
--- a/plugins/org.eclipse.etrice.generator.launch/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.launch/META-INF/MANIFEST.MF
@@ -25,3 +25,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-Vendor: Eclipse eTrice
 Export-Package: org.eclipse.etrice.generator.launch
+Automatic-Module-Name: org.eclipse.etrice.generator.launch
diff --git a/plugins/org.eclipse.etrice.generator.launch/src/org/eclipse/etrice/generator/launch/GeneratorLaunchConfigurationDelegate.java b/plugins/org.eclipse.etrice.generator.launch/src/org/eclipse/etrice/generator/launch/GeneratorLaunchConfigurationDelegate.java
index c5a5a99..0fe8edf 100644
--- a/plugins/org.eclipse.etrice.generator.launch/src/org/eclipse/etrice/generator/launch/GeneratorLaunchConfigurationDelegate.java
+++ b/plugins/org.eclipse.etrice.generator.launch/src/org/eclipse/etrice/generator/launch/GeneratorLaunchConfigurationDelegate.java
@@ -14,13 +14,16 @@
 
 package org.eclipse.etrice.generator.launch;
 
+import java.nio.file.Paths;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
 import java.util.Map;
 import java.util.Map.Entry;
 
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.ResourcesPlugin;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
@@ -187,7 +190,21 @@
 		}
 		if (configuration.getAttribute(GeneratorConfigTab.SAVE_GEN_MODEL, false)) {
 			argString.append(" -"+AbstractGeneratorOptions.SAVE_GEN_MODEL.getName());
-			argString.append(" "+configuration.getAttribute(GeneratorConfigTab.GEN_MODEL_PATH, "?"));
+			
+			// HOWTO: resolve path variables and convert to workspace relative path
+			String genModelPath = configuration.getAttribute(GeneratorConfigTab.GEN_MODEL_PATH, "?");
+			IStringVariableManager manager = VariablesPlugin.getDefault().getStringVariableManager();
+			String path = manager.performStringSubstitution(genModelPath);
+			java.nio.file.Path p = Paths.get(path);
+			IContainer[] containers = ResourcesPlugin.getWorkspace().getRoot().findContainersForLocationURI(p.toUri());
+			if (containers.length>0) {
+				String folder = containers[0].toString().substring(2); // cut off leading P/
+				argString.append(" "+folder);
+			}
+			else {
+				// fall back to verbatim value
+				argString.append(" "+genModelPath);
+			}
 		}
 		if (!configuration.getAttribute(GeneratorConfigTab.MAIN_METHOD_NAME, AbstractGeneratorOptions.MAIN_NAME.getDefaultValue()).equals(AbstractGeneratorOptions.MAIN_NAME.getDefaultValue())) {
 			argString.append(" -"+AbstractGeneratorOptions.MAIN_NAME.getName());
diff --git a/plugins/org.eclipse.etrice.generator.ui.cdt/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.ui.cdt/META-INF/MANIFEST.MF
index 0e5a383..7bf9f1a 100644
--- a/plugins/org.eclipse.etrice.generator.ui.cdt/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.ui.cdt/META-INF/MANIFEST.MF
@@ -20,3 +20,4 @@
  org.eclipse.core.runtime.jobs
 Bundle-Activator: org.eclipse.etrice.generator.ui.cdt.Activator
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.generator.ui.cdt
diff --git a/plugins/org.eclipse.etrice.generator.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator.ui/META-INF/MANIFEST.MF
index 7b4b956..f00b1a2 100644
--- a/plugins/org.eclipse.etrice.generator.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator.ui/META-INF/MANIFEST.MF
@@ -32,3 +32,4 @@
 Export-Package: org.eclipse.etrice.generator.ui.configurator,
  org.eclipse.etrice.generator.ui.preferences,
  org.eclipse.etrice.generator.ui.wizard
+Automatic-Module-Name: org.eclipse.etrice.generator.ui
diff --git a/plugins/org.eclipse.etrice.generator/.project b/plugins/org.eclipse.etrice.generator/.project
index b81cd7c..6d8182e 100644
--- a/plugins/org.eclipse.etrice.generator/.project
+++ b/plugins/org.eclipse.etrice.generator/.project
@@ -40,7 +40,6 @@
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 		<nature>org.eclipse.pde.PluginNature</nature>
-		<nature>org.eclipse.xtend.shared.ui.xtendXPandNature</nature>
 		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 	</natures>
 </projectDescription>
diff --git a/plugins/org.eclipse.etrice.generator/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.generator/META-INF/MANIFEST.MF
index 9ab994a..30060d7 100644
--- a/plugins/org.eclipse.etrice.generator/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.generator/META-INF/MANIFEST.MF
@@ -25,3 +25,4 @@
  org.eclipse.etrice.core.config
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.etrice.generator.generic
+Automatic-Module-Name: org.eclipse.etrice.generator
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGenerator.java b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGenerator.java
index 486c0f8..fcd73ea 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGenerator.java
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/base/AbstractGenerator.java
@@ -33,7 +33,6 @@
 import org.eclipse.etrice.core.genmodel.etricegen.ExpandedActorClass;
 import org.eclipse.etrice.core.genmodel.etricegen.Root;
 import org.eclipse.etrice.core.genmodel.fsm.FsmGenExtensions;
-import org.eclipse.etrice.core.genmodel.fsm.IDiagnostician;
 import org.eclipse.etrice.core.room.DataClass;
 import org.eclipse.etrice.core.room.ProtocolClass;
 import org.eclipse.etrice.core.room.RoomModel;
@@ -42,6 +41,7 @@
 import org.eclipse.etrice.generator.base.io.ILineOutput;
 import org.eclipse.etrice.generator.base.io.LineOutput;
 import org.eclipse.etrice.generator.base.logging.ILogger;
+import org.eclipse.etrice.generator.fsm.base.Diagnostician;
 import org.eclipse.etrice.generator.fsm.generic.IDetailCodeTranslator;
 import org.eclipse.etrice.generator.generic.TestInstanceCreator;
 
@@ -123,7 +123,7 @@
 	 * The injected diagnostician
 	 */
 	@Inject
-	protected IDiagnostician diagnostician;
+	protected Diagnostician diagnostician;
 	
 	/**
 	 * The injected translation provider
@@ -140,6 +140,7 @@
 	@Override
 	public void generate(List<Resource> resources, Arguments arguments, IGeneratorFileIO fileIO, ILogger logger) {
 		AbstractGenerator.settings = arguments;
+		diagnostician.setFailed(false);
 		
 		if(resources.isEmpty()) {
 			logger.logError("no input files");
@@ -236,7 +237,7 @@
 			
 			translateDetailCodes(gmRoot, doTranslate);
 			
-			URI genModelURI = !genModelPath.isEmpty() ? URI.createFileURI(genModelPath) : URI.createFileURI("tmp.rim");
+			URI genModelURI = !genModelPath.isEmpty() ? URI.createPlatformResourceURI(genModelPath, true) : URI.createFileURI("tmp.rim");
 			Resource genResource = getResourceSet().createResource(genModelURI);
 			genResource.getContents().add(gmRoot);
 			if (!genModelPath.isEmpty()) {
diff --git a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/GenericStateMachineGenerator.xtend b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/GenericStateMachineGenerator.xtend
index 9d5223f..40ae6f7 100644
--- a/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/GenericStateMachineGenerator.xtend
+++ b/plugins/org.eclipse.etrice.generator/src/org/eclipse/etrice/generator/generic/GenericStateMachineGenerator.xtend
@@ -213,5 +213,5 @@
      * @param generateImplementation or declaration only
      * @return the generated code
      */
-    def public genExtra(GraphContainer gc, boolean generateImplementation) {''''''}
+    def genExtra(GraphContainer gc, boolean generateImplementation) {''''''}
 }
diff --git a/plugins/org.eclipse.etrice.logging/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.logging/META-INF/MANIFEST.MF
index f85df07..efc993c 100644
--- a/plugins/org.eclipse.etrice.logging/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.logging/META-INF/MANIFEST.MF
@@ -6,3 +6,4 @@
 Bundle-Vendor: Eclipse eTrice
 Fragment-Host: org.apache.log4j;bundle-version="1.2.15"
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: org.eclipse.etrice.logging
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF
index 9d0d29e..789b6cd 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/META-INF/MANIFEST.MF
@@ -28,4 +28,5 @@
 Export-Package: org.eclipse.etrice.ui.behavior.actioneditor,
  org.eclipse.etrice.ui.behavior.actioneditor.sourceviewer
 Bundle-Vendor: eTrice
+Automatic-Module-Name: org.eclipse.etrice.ui.behavior.actioneditor
 
diff --git a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java
index 82b87a9..e2689e8 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.actioneditor/src/org/eclipse/etrice/ui/behavior/actioneditor/sourceviewer/SourceViewerActionCodeEditor.java
@@ -363,7 +363,7 @@
 	 * commands.
 	 */
 	protected void activateContext() {
-		IContextService contextService = (IContextService) PlatformUI
+		IContextService contextService = PlatformUI
 				.getWorkbench().getService(IContextService.class);
 		if (contextService != null)
 			fActivation = contextService
@@ -379,12 +379,12 @@
 	 * Deactivate editors context and command handlers.
 	 */
 	protected void deactivateContext() {
-		IContextService contextService = (IContextService) PlatformUI
+		IContextService contextService = PlatformUI
 				.getWorkbench().getService(IContextService.class);
 		if (contextService != null)
 			contextService.deactivateContext(fActivation);
 
-		IHandlerService handlerService = (IHandlerService) PlatformUI
+		IHandlerService handlerService = PlatformUI
 				.getWorkbench().getService(IHandlerService.class);
 		if (handlerService != null && activatedHandlers != null) {
 			handlerService.deactivateHandlers(activatedHandlers.values());
@@ -402,7 +402,7 @@
 	 *            the operation code for the required operation to be performed
 	 */
 	protected void activateHandler(String commandId, int operation) {
-		IHandlerService handlerService = (IHandlerService) PlatformUI
+		IHandlerService handlerService = PlatformUI
 				.getWorkbench().getService(IHandlerService.class);
 		if (handlerService != null) {
 			IHandlerActivation contentAssistHandlerActivation = handlerService
@@ -421,7 +421,7 @@
 	 *            the Id of the command.
 	 */
 	protected void deactivateHandler(String commandId) {
-		IHandlerService handlerService = (IHandlerService) PlatformUI
+		IHandlerService handlerService = PlatformUI
 				.getWorkbench().getService(IHandlerService.class);
 		if (handlerService != null && activatedHandlers != null) {
 			handlerService.deactivateHandler(activatedHandlers.get(commandId));
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
index 8c5c567..75ca697 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/META-INF/MANIFEST.MF
@@ -32,3 +32,4 @@
  org.eclipse.etrice.ui.behavior.fsm.provider,
  org.eclipse.etrice.ui.behavior.fsm.support,
  org.eclipse.etrice.ui.behavior.fsm.support.util
+Automatic-Module-Name: org.eclipse.etrice.ui.behavior.fsm
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java
index bfc1a81..4fcfe4f 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/ActionCodeEditorRegistry.java
@@ -210,7 +210,7 @@
 				found.add(entry);
 		}
 
-		return (ActionCodeEditorRegistryEntry[]) found
+		return found
 				.toArray(new ActionCodeEditorRegistryEntry[found.size()]);
 	}
 
@@ -241,7 +241,7 @@
 			}
 		}
 
-		cachedEditorEntries = (ActionCodeEditorRegistryEntry[]) found
+		cachedEditorEntries = found
 				.toArray(new ActionCodeEditorRegistryEntry[found.size()]);
 		return cachedEditorEntries;
 	}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/preferences/ActionEditorPreferencePage.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/preferences/ActionEditorPreferencePage.java
index d3854f7..4cda15d 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/preferences/ActionEditorPreferencePage.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/actioneditor/preferences/ActionEditorPreferencePage.java
@@ -83,7 +83,7 @@
 			editorChoices.add(choice);
 		}
 
-		return (String[][]) editorChoices.toArray(new String[editorChoices
+		return editorChoices.toArray(new String[editorChoices
 				.size()][]);
 	}
 
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java
index 735ad57..e1ed454 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/ChoicePointSupport.java
@@ -603,7 +603,7 @@
 					i++;
 				}
 				
-				return (IDecorator[]) decorators
+				return decorators
 						.toArray(new IDecorator[decorators.size()]);
 			}
 		}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java
index 5db32c4..b9c0868 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateGraphSupport.java
@@ -114,7 +114,7 @@
 			@Override
 			public PictogramElement add(IAddContext context) {
 				StateGraph sg = (StateGraph) context.getNewObject();
-				ContainerShape targetContainer = (ContainerShape) context.getTargetContainer();
+				ContainerShape targetContainer = context.getTargetContainer();
 	
 				// CONTAINER SHAPE WITH RECTANGLE
 				IPeCreateService peCreateService = Graphiti.getPeCreateService();
@@ -674,7 +674,7 @@
 					i++;
 				}
 				
-				return (IDecorator[]) decorators
+				return decorators
 						.toArray(new IDecorator[decorators.size()]);
 			}
 		}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateSupport.java
index 83a64b2..3134f88 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/StateSupport.java
@@ -685,7 +685,7 @@
 					GraphicsAlgorithm invisibleRect = containerShape.getGraphicsAlgorithm();
 					if (!invisibleRect.getGraphicsAlgorithmChildren().isEmpty()) {
 						GraphicsAlgorithm borderRect = invisibleRect.getGraphicsAlgorithmChildren().get(0);
-						updateHints(s, (RoundedRectangle) borderRect);
+						updateHints(s, borderRect);
 					}
 				}
 				
@@ -1108,7 +1108,7 @@
 					i++;
 				}
 
-				return (IDecorator[]) decorators
+				return decorators
 						.toArray(new IDecorator[decorators.size()]);
 			}
 		}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java
index 8917ec3..24fb6ea 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TrPointSupport.java
@@ -1030,7 +1030,7 @@
 					i++;
 				}
 				
-				return (IDecorator[]) decorators
+				return decorators
 						.toArray(new IDecorator[decorators.size()]);
 			}
 		}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
index f8a95ab..7bb3615 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/TransitionSupport.java
@@ -1052,7 +1052,7 @@
 						i++;
 					}
 					
-					return (IDecorator[]) decorators
+					return decorators
 							.toArray(new IDecorator[decorators.size()]);
 				}
 			}
diff --git a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/util/ModelEditingUtil.xtend b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/util/ModelEditingUtil.xtend
index 3bd5500..449ac78 100644
--- a/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/util/ModelEditingUtil.xtend
+++ b/plugins/org.eclipse.etrice.ui.behavior.fsm/src/org/eclipse/etrice/ui/behavior/fsm/support/util/ModelEditingUtil.xtend
@@ -28,11 +28,11 @@
  */
 class ModelEditingUtil {
 	
-	def static public RefinedState getOrCreateRefinedStateFor(State s, ModelComponent mc) {
+	def static RefinedState getOrCreateRefinedStateFor(State s, ModelComponent mc) {
 		val target2rs = new HashMap<State, RefinedState>();
 		for (State st : mc.getStateMachine().getStates()) {
 			if (st instanceof RefinedState)
-				target2rs.put((st as RefinedState).getTarget(), st as RefinedState);
+				target2rs.put(st.getTarget(), st);
 		}
 		
 		var RefinedState rs = null;
@@ -69,7 +69,7 @@
 	
 	
 	
-	def static public StateGraph getOrCreateSubGraphOfRefinedStateFor(State s, ModelComponent mc) {
+	def static StateGraph getOrCreateSubGraphOfRefinedStateFor(State s, ModelComponent mc) {
 		val rs = getOrCreateRefinedStateFor(s, mc);
 		
 		if (rs.getSubgraph()===null)
@@ -78,7 +78,7 @@
 		return rs.getSubgraph();
 	}
 	
-	def static public StateGraph insertRefinedState(StateGraph sg, ModelComponent mc, ContainerShape targetContainer, IFeatureProvider fp) {
+	def static StateGraph insertRefinedState(StateGraph sg, ModelComponent mc, ContainerShape targetContainer, IFeatureProvider fp) {
 		val sg2 = getOrCreateSubGraphOfRefinedStateFor(sg.eContainer() as State, mc);
 		fp.link(targetContainer, sg2);
 		return sg2;
diff --git a/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
index 8bf5158..f104a6f 100644
--- a/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.behavior/META-INF/MANIFEST.MF
@@ -29,3 +29,4 @@
 Export-Package: org.eclipse.etrice.ui.behavior,
  org.eclipse.etrice.ui.behavior.editor,
  org.eclipse.etrice.ui.behavior.support
+Automatic-Module-Name: org.eclipse.etrice.ui.behavior
diff --git a/plugins/org.eclipse.etrice.ui.commands/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.commands/META-INF/MANIFEST.MF
index e9fceb0..e0adbf3 100644
--- a/plugins/org.eclipse.etrice.ui.commands/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.commands/META-INF/MANIFEST.MF
@@ -21,3 +21,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.etrice.ui.commands
+Automatic-Module-Name: org.eclipse.etrice.ui.commands
diff --git a/plugins/org.eclipse.etrice.ui.common.base/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.common.base/META-INF/MANIFEST.MF
index fec558a..54d7451 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.common.base/META-INF/MANIFEST.MF
@@ -40,3 +40,4 @@
  org.eclipse.etrice.ui.common.base.refactoring,
  org.eclipse.etrice.ui.common.base.resource,
  org.eclipse.etrice.ui.common.base.support
+Automatic-Module-Name: org.eclipse.etrice.ui.common.base
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/AbstractPropertyDialog.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/AbstractPropertyDialog.java
index 8b5007b..f25be7e 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/AbstractPropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/AbstractPropertyDialog.java
@@ -74,6 +74,7 @@
 
 // note: the FormDialog of org.eclipse.ui.forms.source_3.7.0 requires JavaSE-1.8
 // therefore we need to set the BREE of this plug-in also to Java 8
+@SuppressWarnings({"rawtypes", "unchecked"})
 public abstract class AbstractPropertyDialog extends FormDialog {
 	
 	private class GlobalStatus extends ComputedValue {
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/MultiValidator2.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/MultiValidator2.java
index b6f938f..17f91d4 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/MultiValidator2.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/dialogs/MultiValidator2.java
@@ -36,6 +36,7 @@
  * But is aware of converters and pre-validators and treats a last valid state of any value as failure.
  *
  */
+@SuppressWarnings({"rawtypes", "unchecked"})
 public abstract class MultiValidator2 extends MultiValidator {
 
 	private int targetCount;
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/preferences/UIBasePreferenceConstants.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/preferences/UIBasePreferenceConstants.java
index e93ed36..afc8f7b 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/preferences/UIBasePreferenceConstants.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/preferences/UIBasePreferenceConstants.java
@@ -32,7 +32,7 @@
 	
 	public static final String MAX_LABEL_LINE_LENGTH = "MaxLabelLineLength";
 	public static final String MAX_LABEL_LINES = "MaxLabelLines";
-	public static final int MAX_LINE_LENGTH_DEFAULT = 20;
+	public static final int MAX_LINE_LENGTH_DEFAULT = 30;
 	public static final int MAX_LINES_DEFAULT = 1;
 	
 	// possible values for EXPORT_DIAGRAM_PATH_RELATIVE_TO
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend
index 5d78aab..e371b65 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/refactoring/DiagramReferenceUpdater.xtend
@@ -29,7 +29,6 @@
 import org.eclipse.xtext.resource.IReferenceDescription
 import org.eclipse.xtext.ui.refactoring.ElementRenameArguments
 import org.eclipse.xtext.ui.refactoring.IRefactoringUpdateAcceptor
-import org.eclipse.xtext.ui.refactoring.impl.EmfResourceChangeUtil
 import org.eclipse.xtext.ui.refactoring.impl.EmfResourceReferenceUpdater
 
 /**
@@ -38,7 +37,6 @@
 class DiagramReferenceUpdater extends EmfResourceReferenceUpdater {
 	
 	@Inject DiagramAccessBase diagramAccess
-	@Inject EmfResourceChangeUtil changeUtil
 
 	
 	override protected createReferenceUpdates(ElementRenameArguments elementRenameArguments, Multimap<URI, IReferenceDescription> resource2references, ResourceSet resourceSet, IRefactoringUpdateAcceptor updateAcceptor, IProgressMonitor monitor) {
diff --git a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/HelpFeature.java b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/HelpFeature.java
index 606e380..deef77c 100644
--- a/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/HelpFeature.java
+++ b/plugins/org.eclipse.etrice.ui.common.base/src/org/eclipse/etrice/ui/common/base/support/HelpFeature.java
@@ -41,10 +41,9 @@
 	}
 
 	public String getFeatureId(ICustomContext context) {
-		if (context instanceof ICustomContext) {
-			ICustomContext peContext = (ICustomContext) context;
-			if (peContext.getPictogramElements() != null && peContext.getPictogramElements().length == 1){
-				PictogramElement pe = peContext.getPictogramElements()[0];
+		if (context != null) {
+			if (context.getPictogramElements() != null && context.getPictogramElements().length == 1){
+				PictogramElement pe = context.getPictogramElements()[0];
 				// don't show help for diagram input
 				if(getBusinessObjectForPictogramElement(pe) == getBusinessObjectForPictogramElement(getDiagram()))
 					return null;
@@ -70,7 +69,7 @@
 
 			@Override
 			public IStatus runInUIThread(IProgressMonitor monitor) {
-				ContextHelpProvider.showHelp(getBoClassName(((ICustomContext) context).getPictogramElements()[0]));
+				ContextHelpProvider.showHelp(getBoClassName(context.getPictogramElements()[0]));
 				return Status.OK_STATUS;
 			}
 
diff --git a/plugins/org.eclipse.etrice.ui.common/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.common/META-INF/MANIFEST.MF
index f678dcc..681aa5a 100644
--- a/plugins/org.eclipse.etrice.ui.common/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.common/META-INF/MANIFEST.MF
@@ -29,3 +29,4 @@
 Bundle-Activator: org.eclipse.etrice.ui.common.Activator
 Bundle-ActivationPolicy: lazy
 Import-Package: org.apache.log4j
+Automatic-Module-Name: org.eclipse.etrice.ui.common
diff --git a/plugins/org.eclipse.etrice.ui.runtime/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.runtime/META-INF/MANIFEST.MF
index a8476a5..2fa41ee 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.runtime/META-INF/MANIFEST.MF
@@ -13,3 +13,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.etrice.ui.runtime
+Automatic-Module-Name: org.eclipse.etrice.ui.runtime
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.c.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.c.zip
index c92e987..130fa59 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.c.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.c.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.java.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.java.zip
index 5453baf..9e60947 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.java.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.examples.java.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.c.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.c.zip
index 2a8e43c..75e82ab 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.c.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.c.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.cpp.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.cpp.zip
index a26558e..143b51a 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.cpp.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.cpp.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.java.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.java.zip
index 43062a4..5f7e2b6 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.java.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.modellib.java.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.c.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.c.zip
index 24c9009..7f91657 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.c.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.c.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.cpp.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.cpp.zip
index fe13fef..7a89fee 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.cpp.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.cpp.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.java.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.java.zip
index 4fa2a03..b65e659 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.java.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.runtime.java.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.c.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.c.zip
index 47920b3..74011ea 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.c.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.c.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.cpp.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.cpp.zip
index 25431c5..73aa8f6 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.cpp.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.template.cpp.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.c.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.c.zip
index 448d9b1..8b4fbf8 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.c.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.c.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.cpp.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.cpp.zip
index db5f72e..d634b7a 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.cpp.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.cpp.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.java.zip b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.java.zip
index 06af784..d040fc4 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.java.zip
+++ b/plugins/org.eclipse.etrice.ui.runtime/contents/org.eclipse.etrice.tutorials.java.zip
Binary files differ
diff --git a/plugins/org.eclipse.etrice.ui.runtime/plugin.xml b/plugins/org.eclipse.etrice.ui.runtime/plugin.xml
index e745dfa..e3fe8fa 100644
--- a/plugins/org.eclipse.etrice.ui.runtime/plugin.xml
+++ b/plugins/org.eclipse.etrice.ui.runtime/plugin.xml
@@ -24,17 +24,17 @@
 		<category
 			id="org.eclipse.etrice.core.ui.libraryCCategory"
 			name="Libraries"
-			parentCategory="org.eclipse.etrice.core.ui.wizardCategory/org.eclipse.etrice.core.ui.wizardCCategory">
+			parentCategory="org.eclipse.etrice.core.ui.wizardCCategory">
 		</category>
 		<category
 			id="org.eclipse.etrice.core.ui.libraryCppCategory"
 			name="Libraries"
-			parentCategory="org.eclipse.etrice.core.ui.wizardCategory/org.eclipse.etrice.core.ui.wizardCppCategory">
+			parentCategory="org.eclipse.etrice.core.ui.wizardCppCategory">
 		</category>
 		<category
 			id="org.eclipse.etrice.core.ui.libraryJavaCategory"
 			name="Libraries"
-			parentCategory="org.eclipse.etrice.core.ui.wizardCategory/org.eclipse.etrice.core.ui.wizardJavaCategory">
+			parentCategory="org.eclipse.etrice.core.ui.wizardJavaCategory">
 		</category>
 	</extension>
 
diff --git a/plugins/org.eclipse.etrice.ui.structure/META-INF/MANIFEST.MF b/plugins/org.eclipse.etrice.ui.structure/META-INF/MANIFEST.MF
index c5f562e..629073a 100644
--- a/plugins/org.eclipse.etrice.ui.structure/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.etrice.ui.structure/META-INF/MANIFEST.MF
@@ -26,3 +26,4 @@
  org.eclipse.etrice.ui.structure.editor,
  org.eclipse.etrice.ui.structure.support
 Import-Package: org.eclipse.etrice.ui.commands
+Automatic-Module-Name: org.eclipse.etrice.ui.structure
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java
index 9ae72f8..0d892dd 100644
--- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java
+++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/ProviderDispatcher.java
@@ -476,6 +476,7 @@
 		return featureSwitch.getCreateConnectionFeatures();
 	}
 	
+	@SafeVarargs
 	private static <T> T[] concatAll(T[] first, T[]... rest) {
 		int totalLength = first.length;
 		for (T[] array : rest) {
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/ActorContainerRefPropertyDialog.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/ActorContainerRefPropertyDialog.java
index 87f1ecf..3193aa4 100644
--- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/ActorContainerRefPropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/ActorContainerRefPropertyDialog.java
@@ -51,6 +51,7 @@
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.scoping.IScope;
 
+@SuppressWarnings("rawtypes")
 public class ActorContainerRefPropertyDialog extends AbstractPropertyDialog {
 	
 	class NameValidator implements IValidator {
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/PortPropertyDialog.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/PortPropertyDialog.java
index 3704822..476d443 100644
--- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/PortPropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/PortPropertyDialog.java
@@ -58,6 +58,7 @@
 import org.eclipse.xtext.resource.IEObjectDescription;
 import org.eclipse.xtext.scoping.IScope;
 
+@SuppressWarnings({"rawtypes", "unchecked", "deprecation"})
 public class PortPropertyDialog extends AbstractPropertyDialog {
 
 	class NameValidator implements IValidator {
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/SPPPropertyDialog.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/SPPPropertyDialog.java
index e89d15b..fb31b87 100644
--- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/SPPPropertyDialog.java
+++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/dialogs/SPPPropertyDialog.java
@@ -43,6 +43,7 @@
 
 public class SPPPropertyDialog extends AbstractPropertyDialog {
 
+	@SuppressWarnings("rawtypes")
 	class NameValidator implements IValidator {
 
 		@Override
@@ -60,6 +61,7 @@
 		}
 	}
 	
+	@SuppressWarnings("rawtypes")
 	class ProtocolValidator implements IValidator {
 
 		@Override
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java
index 9975419..4cb906c 100644
--- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java
+++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/BindingSupport.java
@@ -359,7 +359,7 @@
 					
 					GeneralProtocolClass srcGPC = src.getProtocol();
 					GeneralProtocolClass dstGPC = dst.getProtocol();
-					if (srcGPC instanceof GeneralProtocolClass || dstGPC instanceof GeneralProtocolClass) {
+					if (srcGPC != null || dstGPC != null) {
 				        Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
 						SubProtocolSelectionDialog dlg = new SubProtocolSelectionDialog(shell, src, ar1, dst, ar2, bind, sc);
 						if (dlg.open()!=Window.OK)
diff --git a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/SuperDiagramPositionProvider.java b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/SuperDiagramPositionProvider.java
index 4558f9e..a2eef0e 100644
--- a/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/SuperDiagramPositionProvider.java
+++ b/plugins/org.eclipse.etrice.ui.structure/src/org/eclipse/etrice/ui/structure/support/provider/SuperDiagramPositionProvider.java
@@ -192,7 +192,7 @@
 		parent.inner = acInner;
 		
 		// refs & interface items
-		for (Shape shape : ((ContainerShape) acShape).getChildren()) {
+		for (Shape shape : acShape.getChildren()) {
 			EObject obj = linkService.getBusinessObjectForLinkedPictogramElement(shape);
 			
 			// positions
diff --git a/releng/org.eclipse.etrice.parent/pom.xml b/releng/org.eclipse.etrice.parent/pom.xml
index 105bd74..ebd4060 100644
--- a/releng/org.eclipse.etrice.parent/pom.xml
+++ b/releng/org.eclipse.etrice.parent/pom.xml
@@ -33,7 +33,6 @@
 		<cbi.url>https://repo.eclipse.org/content/repositories/cbi-releases</cbi.url>
 		<etrice.url>http://download.eclipse.org/etrice/updates/nightly</etrice.url>
 
-		<build.alias></build.alias>
 		<build.type>N</build.type>
 	</properties>
 
@@ -111,7 +110,7 @@
 					</dependency>
 				</dependencies>
 				<configuration>
-					<format>'${build.alias}${build.type}'yyyyMMddHHmm</format>
+					<format>'${build.type}'yyyyMMddHHmm</format>
 					<timestampProvider>jgit</timestampProvider>
 					<jgit.dirtyWorkingTree>warning</jgit.dirtyWorkingTree>
 				</configuration>
diff --git a/releng/org.eclipse.etrice.parent/pom_old.xml b/releng/org.eclipse.etrice.parent/pom_old.xml
deleted file mode 100644
index 1eb8253..0000000
--- a/releng/org.eclipse.etrice.parent/pom_old.xml
+++ /dev/null
@@ -1,344 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project
-	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
-	xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-	<modelVersion>4.0.0</modelVersion>
-
-	<groupId>org.eclipse.etrice</groupId>
-	<artifactId>java-generator</artifactId>
-	<version>1.1.1-SNAPSHOT</version>
-	<packaging>pom</packaging>
-
-	<name>eTrice Java generator</name>
-
-	<description>code generator from ROOM (Real-Time Object Oriented Modeling)
-  models to the Java target language</description>
-	<url>http://eclipse.org/etrice</url>
-	<inceptionYear>2010</inceptionYear>
-
-	<properties>
-		<project.build.sourceEncoding>Cp1252</project.build.sourceEncoding>
-
-		<etrice.version>${project.version}</etrice.version>
-
-		<tycho.version>0.19.0</tycho.version>
-		<tycho-extras.version>${tycho.version}</tycho-extras.version>
-
-		<!-- eclipse version etrice is built against -->
-		<eclipse-repo.url>http://download.eclipse.org/releases/luna</eclipse-repo.url>
-
-		<orbit-site>http://download.eclipse.org/tools/orbit/downloads/drops/R20130118183705/repository</orbit-site>
-	</properties>
-
-	<organization>
-		<name>Protos Software GmbH</name>
-		<url>http://www.protos.de</url>
-	</organization>
-
-	<licenses>
-		<license>
-			<name>Eclipse Public License - v 1.0</name>
-			<url>http://www.eclipse.org/legal/epl-v10.html</url>
-		</license>
-	</licenses>
-
-	<issueManagement>
-		<system>Bugzilla</system>
-		<url>https://bugs.eclipse.org/bugs/enter_bug.cgi?product=eTrice</url>
-	</issueManagement>
-	
-	<ciManagement>
-		<system>Hudson</system>
-		<url>https://hudson.eclipse.org/etrice/job/etrice-maven3/</url>
-	</ciManagement>
-
-	<scm>
-		<url>http://git.eclipse.org/c/etrice/org.eclipse.etrice.git/</url>
-		<connection>http://git.eclipse.org/gitroot/etrice/org.eclipse.etrice.git</connection>
-		<developerConnection>ssh://userid@git.eclipse.org/gitroot/etrice/org.eclipse.etrice.git</developerConnection>
-	</scm>
-
-	<developers>
-		<developer>
-			<name>Thomas Schuetz</name>
-		</developer>
-		<developer>
-			<name>Henrik Rentz-Reichert</name>
-		</developer>
-		<developer>
-			<name>Thomas Jung</name>
-		</developer>
-		<developer>
-			<name>Juergen Haug</name>
-		</developer>
-		<developer>
-			<name>Eyrak Paen</name>
-		</developer>
-		<developer>
-			<name>Peter Karlitschek</name>
-		</developer>
-	</developers>
-
-	<repositories>
-		<repository>
-			<id>eclipse</id>
-			<layout>p2</layout>
-			<url>${eclipse-repo.url}</url>
-		</repository>
-		<repository>
-			<id>orbit</id>
-			<layout>p2</layout>
-			<url>${orbit-site}</url>
-		</repository>
-		<repository>
-			<id>repository.jboss.org-public</id>
-			<name>JBoss.org Maven repository</name>
-			<url>https://repository.jboss.org/nexus/content/groups/public</url>
-		</repository>
-	</repositories>
-
-	<pluginRepositories>
-		<pluginRepository>
-			<id>repo.eclipse.org.cbi-releases</id>
-			<url>https://repo.eclipse.org/content/repositories/cbi-releases/</url>
-		</pluginRepository>
-	</pluginRepositories>
-
-	<modules>
-		<module>../../plugins/org.eclipse.etrice.core.common</module>
-		<module>../../plugins/org.eclipse.etrice.core.fsm</module>
-		<module>../../plugins/org.eclipse.etrice.core.room</module>
-		<module>../../plugins/org.eclipse.etrice.core.config</module>
-		<module>../../plugins/org.eclipse.etrice.core.etphys</module>
-		<module>../../plugins/org.eclipse.etrice.core.etmap</module>
-		<module>../../plugins/org.eclipse.etrice.core.genmodel.fsm</module>
-		<module>../../plugins/org.eclipse.etrice.core.genmodel</module>
-		<module>../../plugins/org.eclipse.etrice.generator.fsm</module>
-		<module>../../plugins/org.eclipse.etrice.generator</module>
-		<module>../../plugins/org.eclipse.etrice.generator.config</module>
-		<module>../../plugins/org.eclipse.etrice.generator.doc</module>
-		<module>../../plugins/org.eclipse.etrice.generator.java</module>
-		<module>../../plugins/org.eclipse.etrice.generator.java.mvn</module>
-		<module>../../runtime/org.eclipse.etrice.modellib.java</module>
-		<module>../../runtime/org.eclipse.etrice.runtime.java</module>
-	</modules>
-
-	<profiles>
-		<profile>
-			<id>fast</id>
-			<activation>
-				<activeByDefault>true</activeByDefault>
-			</activation>
-		</profile>
-		<profile>
-			<id>full</id>
-			<build>
-				<plugins>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-source-plugin</artifactId>
-						<version>2.2.1</version>
-						<executions>
-							<execution>
-								<id>attach-sources</id>
-								<goals>
-									<goal>jar</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-					<plugin>
-						<groupId>org.apache.maven.plugins</groupId>
-						<artifactId>maven-javadoc-plugin</artifactId>
-						<version>2.9.1</version>
-						<configuration>
-							<tags>
-								<tag>
-									<name>generated</name>
-									<placement>a</placement>
-									<head>Generated:</head>
-								</tag>
-								<tag>
-									<name>ordered</name>
-									<placement>X</placement>
-									<head>Ordered:</head>
-								</tag>
-								<tag>
-									<name>model</name>
-									<placement>X</placement>
-									<head>Model:</head>
-								</tag>
-								<tag>
-									<name>parameter</name>
-									<placement>X</placement>
-									<head>Parameter:</head>
-								</tag>
-							</tags>
-						</configuration>
-						<executions>
-							<execution>
-								<id>attach-javadocs</id>
-								<goals>
-									<goal>jar</goal>
-								</goals>
-							</execution>
-						</executions>
-					</plugin>
-				</plugins>
-			</build>
-		</profile>
-	</profiles>
-
-	<build>
-		<plugins>
-			<plugin>
-				<groupId>org.eclipse.tycho</groupId>
-				<artifactId>tycho-maven-plugin</artifactId>
-				<version>${tycho.version}</version>
-				<extensions>true</extensions>
-			</plugin>
-		</plugins>
-		<pluginManagement>
-			<plugins>
-				<plugin>
-					<artifactId>maven-compiler-plugin</artifactId>
-					<version>3.1</version>
-					<configuration>
-						<source>1.6</source>
-						<target>1.6</target>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.eclipse.tycho</groupId>
-					<artifactId>target-platform-configuration</artifactId>
-					<version>${tycho.version}</version>
-				</plugin>
-				<plugin>
-					<groupId>org.eclipse.tycho</groupId>
-					<artifactId>tycho-compiler-plugin</artifactId>
-					<version>${tycho.version}</version>
-					<configuration>
-						<excludeResources>
-							<!-- avoid error markers in the target folder by excluding ecore models -->
-							<excludeResource>**/*.ecore</excludeResource>
-						</excludeResources>
-						<compilerArguments>
-							<enableJavadoc />
-							<encoding>ISO-8859-1</encoding>
-						</compilerArguments>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.eclipse.tycho</groupId>
-					<artifactId>tycho-packaging-plugin</artifactId>
-					<version>${tycho.version}</version>
-					<dependencies>
-						<dependency>
-							<groupId>org.eclipse.tycho.extras</groupId>
-							<artifactId>tycho-buildtimestamp-jgit</artifactId>
-							<version>${tycho-extras.version}</version>
-						</dependency>
-					</dependencies>
-					<configuration>
-						<strictBinIncludes>false</strictBinIncludes>
-						<format>'v'yyyyMMdd-HHmm</format>
-						<timestampProvider>jgit</timestampProvider>
-						<jgit.ignore>
-						</jgit.ignore>
-					</configuration>
-				</plugin>
-				<plugin>
-					<groupId>org.eclipse.tycho</groupId>
-					<artifactId>tycho-p2-director-plugin</artifactId>
-					<version>${tycho.version}</version>
-				</plugin>
-				<plugin>
-					<groupId>org.eclipse.tycho</groupId>
-					<artifactId>tycho-p2-repository-plugin</artifactId>
-					<version>${tycho.version}</version>
-				</plugin>
-				<plugin>
-					<groupId>org.eclipse.tycho</groupId>
-					<artifactId>tycho-p2-plugin</artifactId>
-					<version>${tycho.version}</version>
-					<configuration>
-						<baselineMode>warn</baselineMode>
-						<baselineReplace>none</baselineReplace>
-						<baselineRepositories>
-							<repository>
-								<url>http://download.eclipse.org/eclipse/updates/4.2</url>
-							</repository>
-						</baselineRepositories>
-					</configuration>
-				</plugin>
-				<!--This plugin's configuration is used to store Eclipse m2e settings 
-					only. It has no influence on the Maven build itself. -->
-				<plugin>
-					<groupId>org.eclipse.m2e</groupId>
-					<artifactId>lifecycle-mapping</artifactId>
-					<version>1.0.0</version>
-					<configuration>
-						<lifecycleMappingMetadata>
-							<pluginExecutions>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.eclipse.tycho
-										</groupId>
-										<artifactId>
-											tycho-packaging-plugin
-										</artifactId>
-										<versionRange>
-											[0.19.0,)
-										</versionRange>
-										<goals>
-											<goal>validate-id</goal>
-											<goal>validate-version</goal>
-											<goal>build-qualifier</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore></ignore>
-									</action>
-								</pluginExecution>
-								<pluginExecution>
-									<pluginExecutionFilter>
-										<groupId>
-											org.eclipse.tycho
-										</groupId>
-										<artifactId>
-											tycho-compiler-plugin
-										</artifactId>
-										<versionRange>
-											[0.19.0,)
-										</versionRange>
-										<goals>
-											<goal>compile</goal>
-										</goals>
-									</pluginExecutionFilter>
-									<action>
-										<ignore></ignore>
-									</action>
-								</pluginExecution>
-							</pluginExecutions>
-						</lifecycleMappingMetadata>
-					</configuration>
-				</plugin>
-			</plugins>
-		</pluginManagement>
-	</build>
-
-	<distributionManagement>
-		<repository>
-			<id>repo.eclipse.org</id>
-			<name>eTrice Repository - Releases</name>
-			<url>https://repo.eclipse.org/content/repositories/etrice-releases/</url>
-		</repository>
-		<snapshotRepository>
-			<id>repo.eclipse.org</id>
-			<name>eTrice Repository - Snapshots</name>
-			<url>https://repo.eclipse.org/content/repositories/etrice-snapshots/</url>
-			<uniqueVersion>true</uniqueVersion>
-		</snapshotRepository>
-	</distributionManagement>
-</project>
diff --git a/releng/org.eclipse.etrice.releng/ETriceC.setup b/releng/org.eclipse.etrice.releng/ETriceC.setup
new file mode 100644
index 0000000..6c14ace
--- /dev/null
+++ b/releng/org.eclipse.etrice.releng/ETriceC.setup
@@ -0,0 +1,636 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<setup:Product
+    xmi:version="2.0"
+    xmlns:xmi="http://www.omg.org/XMI"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:setup="http://www.eclipse.org/oomph/setup/1.0"
+    xmlns:setup.p2="http://www.eclipse.org/oomph/setup/p2/1.0"
+    name="etrice.c.product"
+    label="eTrice C/C++ package">
+  <annotation
+      source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+    <detail
+        key="imageURI">
+      <value>https://www.eclipse.org/etrice/images/eTRICE-logo.png</value>
+    </detail>
+  </annotation>
+  <version name="latest"
+      label="Latest (2018-12)"
+      requiredJavaVersion="1.8">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+      <detail
+          key="siteURI">
+        <value>https://www.eclipse.org/downloads/packages/release/2018-12/m1/eclipse-ide-cc-developers</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup.p2:P2Task"
+        label="Eclipse IDE for C/C++ Developers (2018-12)">
+      <requirement
+          name="epp.package.cpp"
+          versionRange="[4.10.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.platform.feature.group"
+          versionRange="[4.10.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.rcp.feature.group"
+          versionRange="[4.10.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.cdt.arduino.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.autotools.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.build.crossgcc.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.cmake.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.gdbjtag.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.standalone.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.ui.memory.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.docker.launcher.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.remote.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.serial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.meson.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.mylyn.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.qt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.testsrunner.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.egit.feature.group"/>
+      <requirement
+          name="org.eclipse.epp.mpc.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.devhelp.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.changelog.c.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gcov.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gprof.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.rpm.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.valgrind.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.context_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.ide_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.team_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.connector.cdtserial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.gdbtrace.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.control.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.kernel.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.ust.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.cdt_integration.feature.feature.group"/>
+      <repository
+          url="http://download.eclipse.org/technology/epp/packages/2018-12"/>
+      <repository
+          url="http://download.eclipse.org/releases/2018-12"/>
+      <repository
+          url="http://download.eclipse.org/etrice/updates/releases/2.0.0-RC6"/>
+    </setupTask>
+  </version>
+  <version name="latest.released"
+      label="Latest Release (2018-09)"
+      requiredJavaVersion="1.8">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+      <detail
+          key="siteURI">
+        <value>https://www.eclipse.org/downloads/packages/release/2018-09/r/eclipse-ide-cc-developers</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup.p2:P2Task"
+        label="Eclipse IDE for C/C++ Developers (2018-09)">
+      <requirement
+          name="epp.package.cpp"
+          versionRange="[4.9.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.platform.feature.group"
+          versionRange="[4.9.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.rcp.feature.group"
+          versionRange="[4.9.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.cdt.arduino.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.autotools.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.build.crossgcc.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.cmake.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.gdbjtag.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.standalone.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.ui.memory.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.docker.launcher.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.remote.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.serial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.meson.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.mylyn.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.qt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.testsrunner.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.egit.feature.group"/>
+      <requirement
+          name="org.eclipse.epp.mpc.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.devhelp.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.changelog.c.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gcov.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gprof.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.rpm.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.valgrind.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.context_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.ide_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.team_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.connector.cdtserial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.gdbtrace.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.control.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.kernel.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.ust.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.cdt_integration.feature.feature.group"/>
+      <repository
+          url="http://download.eclipse.org/technology/epp/packages/2018-09"/>
+      <repository
+          url="http://download.eclipse.org/releases/2018-09/201809191002"/>
+      <repository
+          url="http://download.eclipse.org/etrice/updates/releases/2.0.0-RC6"/>
+    </setupTask>
+  </version>
+  <version name="2018-12"
+      label="2018-12"
+      requiredJavaVersion="1.8">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+      <detail
+          key="siteURI">
+        <value>https://www.eclipse.org/downloads/packages/release/2018-12/m1/eclipse-ide-cc-developers</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup.p2:P2Task"
+        label="Eclipse IDE for C/C++ Developers (2018-12)">
+      <requirement
+          name="epp.package.cpp"
+          versionRange="[4.10.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.platform.feature.group"
+          versionRange="[4.10.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.rcp.feature.group"
+          versionRange="[4.10.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.cdt.arduino.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.autotools.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.build.crossgcc.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.cmake.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.gdbjtag.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.standalone.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.ui.memory.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.docker.launcher.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.remote.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.serial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.meson.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.mylyn.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.qt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.testsrunner.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.egit.feature.group"/>
+      <requirement
+          name="org.eclipse.epp.mpc.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.devhelp.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.changelog.c.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gcov.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gprof.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.rpm.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.valgrind.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.context_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.ide_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.team_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.connector.cdtserial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.gdbtrace.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.control.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.kernel.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.ust.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.cdt_integration.feature.feature.group"/>
+      <repository
+          url="http://download.eclipse.org/technology/epp/packages/2018-12"/>
+      <repository
+          url="http://download.eclipse.org/releases/2018-12"/>
+      <repository
+          url="http://download.eclipse.org/etrice/updates/releases/2.0.0-RC6"/>
+    </setupTask>
+  </version>
+  <version name="2018-09"
+      label="2018-09"
+      requiredJavaVersion="1.8">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+      <detail
+          key="siteURI">
+        <value>https://www.eclipse.org/downloads/packages/release/2018-09/r/eclipse-ide-cc-developers</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup.p2:P2Task"
+        label="Eclipse IDE for eTrice C/C++ Developers (2018-09)">
+      <requirement
+          name="epp.package.cpp"
+          versionRange="[4.9.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.platform.feature.group"
+          versionRange="[4.9.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.rcp.feature.group"
+          versionRange="[4.9.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.cdt.arduino.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.autotools.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.build.crossgcc.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.cmake.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.gdbjtag.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.standalone.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.ui.memory.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.docker.launcher.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.remote.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.serial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.meson.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.mylyn.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.qt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.testsrunner.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.egit.feature.group"/>
+      <requirement
+          name="org.eclipse.epp.mpc.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.devhelp.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.changelog.c.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gcov.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gprof.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.rpm.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.valgrind.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.context_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.ide_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.team_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.connector.cdtserial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.gdbtrace.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.control.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.kernel.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.ust.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.cdt_integration.feature.feature.group"/>
+      <repository
+          url="http://download.eclipse.org/technology/epp/packages/2018-09"/>
+      <repository
+          url="http://download.eclipse.org/releases/2018-09/201809191002"/>
+      <repository
+          url="http://download.eclipse.org/etrice/updates/releases/2.0.0-RC6"/>
+    </setupTask>
+  </version>
+  <version name="photon"
+      label="Photon"
+      requiredJavaVersion="1.8">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+      <detail
+          key="siteURI">
+        <value>https://www.eclipse.org/downloads/packages/release/photon/r/eclipse-ide-cc-developers</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup.p2:P2Task"
+        label="Eclipse IDE for C/C++ Developers (Photon)">
+      <requirement
+          name="epp.package.cpp"
+          versionRange="[4.8.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.platform.feature.group"
+          versionRange="[4.8.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.rcp.feature.group"
+          versionRange="[4.8.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.cdt.arduino.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.autotools.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.build.crossgcc.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.cmake.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.gdbjtag.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.standalone.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.ui.memory.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.docker.launcher.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.remote.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.serial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.meson.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.mylyn.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.qt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.testsrunner.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.egit.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.devhelp.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.changelog.c.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gcov.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gprof.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.rpm.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.valgrind.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.context_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.ide_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.team_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.connector.cdtserial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.gdbtrace.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.control.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.kernel.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.ust.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.cdt_integration.feature.feature.group"/>
+      <repository
+          url="http://download.eclipse.org/technology/epp/packages/photon"/>
+      <repository
+          url="http://download.eclipse.org/releases/photon/201806271001"/>
+      <repository
+          url="http://download.eclipse.org/etrice/updates/releases/2.0.0-RC6"/>
+    </setupTask>
+  </version>
+  <version name="oxygen"
+      label="Oxygen"
+      requiredJavaVersion="1.8">
+    <annotation
+        source="http://www.eclipse.org/oomph/setup/BrandingInfo">
+      <detail
+          key="siteURI">
+        <value>https://www.eclipse.org/downloads/packages/release/oxygen/3a/eclipse-ide-cc-developers</value>
+      </detail>
+    </annotation>
+    <setupTask
+        xsi:type="setup.p2:P2Task"
+        label="Eclipse IDE for C/C++ Developers (Oxygen)">
+      <requirement
+          name="epp.package.cpp"
+          versionRange="[4.7.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.platform.feature.group"
+          versionRange="[4.7.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.rcp.feature.group"
+          versionRange="[4.7.0,5.0.0)"/>
+      <requirement
+          name="org.eclipse.cdt.autotools.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.build.crossgcc.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.standalone.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.debug.ui.memory.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.launch.remote.feature.group"/>
+      <requirement
+          name="org.eclipse.cdt.mylyn.feature.group"/>
+      <requirement
+          name="org.eclipse.egit.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.devhelp.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.cdt.libhover.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.changelog.c.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gcov.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.gprof.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.rpm.feature.group"/>
+      <requirement
+          name="org.eclipse.linuxtools.valgrind.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.bugzilla_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.context_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.ide_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.team_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn.wikitext_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.mylyn_feature.feature.group"/>
+      <requirement
+          name="org.eclipse.rse.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.connector.cdtserial.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tm.terminal.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.gdbtrace.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.control.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.kernel.feature.group"/>
+      <requirement
+          name="org.eclipse.tracecompass.lttng2.ust.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.feature.feature.group"/>
+      <requirement
+          name="org.eclipse.etrice.cdt_integration.feature.feature.group"/>
+      <repository
+          url="http://download.eclipse.org/technology/epp/packages/oxygen"/>
+      <repository
+          url="http://download.eclipse.org/releases/oxygen/201804111000"/>
+      <repository
+          url="http://download.eclipse.org/etrice/updates/releases/2.0.0-RC6"/>
+    </setupTask>
+  </version>
+  <description>An IDE for C/C++ developers with the eTrice modeling tool.</description>
+</setup:Product>
diff --git a/releng/org.eclipse.etrice.releng/build.gradle b/releng/org.eclipse.etrice.releng/build.gradle
new file mode 100644
index 0000000..3e75a36
--- /dev/null
+++ b/releng/org.eclipse.etrice.releng/build.gradle
@@ -0,0 +1,32 @@
+configurations {
+	archives
+	updates
+}
+
+dependencies {
+	archives project(path: ':plugins:org.eclipse.etrice.generator.c', configuration: 'archive')
+	archives project(path: ':plugins:org.eclipse.etrice.generator.cpp', configuration: 'archive')
+	archives project(path: ':plugins:org.eclipse.etrice.generator.java', configuration: 'archive')
+	archives project(path: ':plugins:org.eclipse.etrice.generator.doc', configuration: 'archive')
+	
+	updates project(path: ':releng:org.eclipse.etrice.site', configuration: 'archive')
+}
+
+
+def downloadDir = '/home/data/httpd/download.eclipse.org/etrice'
+// downloadDir = "$buildDir/download"
+def versionDir = version
+if(version.endsWith('SNAPSHOT')) {
+	versionDir = 'nightly'
+}
+def promoteDir = "$downloadDir/$versionDir"
+
+task promote(type: Sync) {
+	from([configurations.archives, configurations.updates]) {
+		into 'archives'
+	}
+	from(zipTree(configurations.updates.singleFile)) {
+		into 'updates'
+	}
+	into promoteDir
+}
\ No newline at end of file
diff --git a/releng/org.eclipse.etrice.site/build.gradle b/releng/org.eclipse.etrice.site/build.gradle
new file mode 100644
index 0000000..cbec1e2
--- /dev/null
+++ b/releng/org.eclipse.etrice.site/build.gradle
@@ -0,0 +1,8 @@
+configurations {
+	archive
+}
+
+artifacts {
+	archive fileTree(dir: 'target', include: 'org.eclipse.etrice.site-*.zip').singleFile
+}
+
diff --git a/releng/org.eclipse.etrice.site/category.xml b/releng/org.eclipse.etrice.site/category.xml
index 7958f4e..8819870 100644
--- a/releng/org.eclipse.etrice.site/category.xml
+++ b/releng/org.eclipse.etrice.site/category.xml
@@ -3,7 +3,7 @@
    <feature id="org.eclipse.etrice.feature" version="2.0.0.qualifier">
       <category name="org.eclipse.etrice"/>
    </feature>
-   <feature id="org.eclipse.etrice.cdt-integration.feature" version="2.0.0.qualifier">
+   <feature id="org.eclipse.etrice.cdt_integration.feature" version="2.0.0.qualifier">
       <category name="org.eclipse.etrice"/>
    </feature>
    <category-def name="org.eclipse.etrice" label="eTrice">
diff --git a/runtime/org.eclipse.etrice.modellib.java/.classpath b/runtime/org.eclipse.etrice.modellib.java/.classpath
index 13453a6..0e7dd07 100644
--- a/runtime/org.eclipse.etrice.modellib.java/.classpath
+++ b/runtime/org.eclipse.etrice.modellib.java/.classpath
@@ -9,7 +9,7 @@
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.etrice.runtime.java"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
diff --git a/runtime/org.eclipse.etrice.modellib.java/.settings/org.eclipse.jdt.core.prefs b/runtime/org.eclipse.etrice.modellib.java/.settings/org.eclipse.jdt.core.prefs
index 3c082d5..5d6e034 100644
--- a/runtime/org.eclipse.etrice.modellib.java/.settings/org.eclipse.jdt.core.prefs
+++ b/runtime/org.eclipse.etrice.modellib.java/.settings/org.eclipse.jdt.core.prefs
@@ -1,8 +1,7 @@
-#Mon Sep 19 09:34:05 CEST 2011
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.annotationSuperInterface=warning
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.autoboxing=ignore
@@ -74,4 +73,4 @@
 org.eclipse.jdt.core.compiler.problem.unusedPrivateMember=warning
 org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
 org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/runtime/org.eclipse.etrice.modellib.java/META-INF/MANIFEST.MF b/runtime/org.eclipse.etrice.modellib.java/META-INF/MANIFEST.MF
index 8b772fd..325a9e5 100644
--- a/runtime/org.eclipse.etrice.modellib.java/META-INF/MANIFEST.MF
+++ b/runtime/org.eclipse.etrice.modellib.java/META-INF/MANIFEST.MF
@@ -4,4 +4,5 @@
 Bundle-SymbolicName: org.eclipse.etrice.modellib.java
 Bundle-Version: 2.0.0.qualifier
 Bundle-Vendor: Eclipse eTrice
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: org.eclipse.etrice.modellib.java
diff --git a/runtime/org.eclipse.etrice.runtime.java.aspects/META-INF/MANIFEST.MF b/runtime/org.eclipse.etrice.runtime.java.aspects/META-INF/MANIFEST.MF
index 54c38e5..5c8c997 100644
--- a/runtime/org.eclipse.etrice.runtime.java.aspects/META-INF/MANIFEST.MF
+++ b/runtime/org.eclipse.etrice.runtime.java.aspects/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 2.0.0.qualifier
 Export-Package: org.eclipse.etrice.runtime.java.aspects
 Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Automatic-Module-Name: org.eclipse.etrice.runtime.java.aspects
diff --git a/runtime/org.eclipse.etrice.runtime.java/.classpath b/runtime/org.eclipse.etrice.runtime.java/.classpath
index 695d89b..94f9810 100644
--- a/runtime/org.eclipse.etrice.runtime.java/.classpath
+++ b/runtime/org.eclipse.etrice.runtime.java/.classpath
@@ -11,7 +11,7 @@
 			<attribute name="ignore_optional_problems" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
 		<attributes>
 			<attribute name="maven.pomderived" value="true"/>
 		</attributes>
diff --git a/runtime/org.eclipse.etrice.runtime.java/.settings/org.eclipse.jdt.core.prefs b/runtime/org.eclipse.etrice.runtime.java/.settings/org.eclipse.jdt.core.prefs
index 107056a..91ca62e 100644
--- a/runtime/org.eclipse.etrice.runtime.java/.settings/org.eclipse.jdt.core.prefs
+++ b/runtime/org.eclipse.etrice.runtime.java/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,14 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
 org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
-org.eclipse.jdt.core.compiler.source=1.6
+org.eclipse.jdt.core.compiler.release=disabled
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/runtime/org.eclipse.etrice.runtime.java/META-INF/MANIFEST.MF b/runtime/org.eclipse.etrice.runtime.java/META-INF/MANIFEST.MF
index 64aa804..3127632 100644
--- a/runtime/org.eclipse.etrice.runtime.java/META-INF/MANIFEST.MF
+++ b/runtime/org.eclipse.etrice.runtime.java/META-INF/MANIFEST.MF
@@ -9,4 +9,5 @@
  org.eclipse.etrice.runtime.java.messaging,
  org.eclipse.etrice.runtime.java.modelbase
 Bundle-Vendor: Eclipse eTrice
-Bundle-RequiredExecutionEnvironment: JavaSE-1.6
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Automatic-Module-Name: org.eclipse.etrice.runtime.java
diff --git a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/config/AbstractVariableService.java b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/config/AbstractVariableService.java
index 040f2fd..c9006f5 100644
--- a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/config/AbstractVariableService.java
+++ b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/config/AbstractVariableService.java
@@ -560,7 +560,7 @@
 					+ ((id != null) ? "   (" + id + ")" : ""));
 	}
 
-	@SuppressWarnings({ "unchecked", "rawtypes" })
+	@SuppressWarnings({ "rawtypes" })
 	private static final Set<Class> PRIMITIVE_TYPES = new HashSet<Class>(
 			Arrays.asList(Boolean.class, Character.class, String.class,
 					Byte.class, Short.class, Integer.class, Long.class,
diff --git a/settings.gradle b/settings.gradle
index 91bd36c..ea23dae 100644
--- a/settings.gradle
+++ b/settings.gradle
@@ -32,4 +32,7 @@
 	'tests:org.eclipse.etrice.generator.common.tests',
 	'tests:org.eclipse.etrice.generator.c.tests',
 	'tests:org.eclipse.etrice.generator.cpp.tests',
-	'tests:org.eclipse.etrice.generator.java.tests'
\ No newline at end of file
+	'tests:org.eclipse.etrice.generator.java.tests',
+	
+	'releng:org.eclipse.etrice.releng',
+	'releng:org.eclipse.etrice.site'
\ No newline at end of file
diff --git a/team/ETrice.setup b/team/ETrice.setup
index be1e63a..7506513 100644
--- a/team/ETrice.setup
+++ b/team/ETrice.setup
@@ -306,7 +306,7 @@
           name="remote &quot;gerrit ssh&quot;">
         <properties
             key="pushurl"
-            value="ssh://${git.user.id}@git.eclipse.org:29418/www.eclipse.org/etrice.git "/>
+            value="ssh://${git.user.id}@git.eclipse.org:29418/www.eclipse.org/etrice.git"/>
         <properties
             key="push"
             value="HEAD:refs/heads/master"/>
@@ -315,7 +315,7 @@
           name="remote &quot;gerrit bypass ssh&quot;">
         <properties
             key="pushurl"
-            value="ssh://${git.user.id}@git.eclipse.org:29418/www.eclipse.org/etrice.git "/>
+            value="ssh://${git.user.id}@git.eclipse.org:29418/www.eclipse.org/etrice.git"/>
         <properties
             key="push"
             value="HEAD:refs/heads/master"/>
diff --git a/tests/org.eclipse.etrice.abstractexec.behavior.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.abstractexec.behavior.tests/META-INF/MANIFEST.MF
index 41a3584..052ce01 100644
--- a/tests/org.eclipse.etrice.abstractexec.behavior.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.abstractexec.behavior.tests/META-INF/MANIFEST.MF
@@ -16,3 +16,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.etrice.abstractexec.behavior
+Automatic-Module-Name: org.eclipse.etrice.abstractexec.behavior.tests
diff --git a/tests/org.eclipse.etrice.core.common.tests/.classpath b/tests/org.eclipse.etrice.core.common.tests/.classpath
index 1cf555d..d4fb90f 100644
--- a/tests/org.eclipse.etrice.core.common.tests/.classpath
+++ b/tests/org.eclipse.etrice.core.common.tests/.classpath
@@ -2,7 +2,11 @@
 <classpath>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="src" path="models"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="xtend-gen"/>
diff --git a/tests/org.eclipse.etrice.core.common.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.common.tests/META-INF/MANIFEST.MF
index 6c21fd1..32790e7 100644
--- a/tests/org.eclipse.etrice.core.common.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.common.tests/META-INF/MANIFEST.MF
@@ -7,10 +7,11 @@
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.etrice.core.common,
  org.eclipse.core.runtime,
- org.eclipse.xtext.junit4;bundle-version="2.6.0",
  org.eclipse.xtext.xbase.lib,
  org.eclipse.etrice.core.common.ui,
- org.eclipse.ui.workbench;resolution:=optional
+ org.eclipse.ui.workbench;resolution:=optional,
+ org.eclipse.xtext.testing;bundle-version="2.12.0",
+ org.eclipse.xtext.junit4;bundle-version="2.12.0"
 Import-Package: org.apache.log4j,
  org.junit;version="4.5.0",
  org.junit.runner;version="4.5.0",
@@ -22,3 +23,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.core.common.tests,
  org.eclipse.etrice.core.common
+Automatic-Module-Name: org.eclipse.etrice.core.common.tests
diff --git a/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestInjectorProvider.java b/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestInjectorProvider.java
index ffea490..64862ce 100644
--- a/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestInjectorProvider.java
+++ b/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestInjectorProvider.java
@@ -5,10 +5,10 @@
 
 import com.google.inject.Guice;
 import com.google.inject.Injector;
-import org.eclipse.xtext.junit4.GlobalRegistries;
-import org.eclipse.xtext.junit4.GlobalRegistries.GlobalStateMemento;
-import org.eclipse.xtext.junit4.IInjectorProvider;
-import org.eclipse.xtext.junit4.IRegistryConfigurator;
+import org.eclipse.xtext.testing.GlobalRegistries;
+import org.eclipse.xtext.testing.GlobalRegistries.GlobalStateMemento;
+import org.eclipse.xtext.testing.IInjectorProvider;
+import org.eclipse.xtext.testing.IRegistryConfigurator;
 
 public class BaseTestInjectorProvider implements IInjectorProvider, IRegistryConfigurator {
 
diff --git a/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestUiInjectorProvider.java b/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestUiInjectorProvider.java
index b22656d..799fce1 100644
--- a/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestUiInjectorProvider.java
+++ b/tests/org.eclipse.etrice.core.common.tests/src-gen/org/eclipse/etrice/core/common/BaseTestUiInjectorProvider.java
@@ -3,7 +3,7 @@
  */
 package org.eclipse.etrice.core.common;
 
-import org.eclipse.xtext.junit4.IInjectorProvider;
+import org.eclipse.xtext.testing.IInjectorProvider;
 
 import com.google.inject.Injector;
 
diff --git a/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/CCStringTest.xtend b/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/CCStringTest.xtend
index a625172..a050a4d 100644
--- a/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/CCStringTest.xtend
+++ b/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/CCStringTest.xtend
@@ -18,8 +18,10 @@
 import org.eclipse.etrice.core.common.BaseTestInjectorProvider
 import org.eclipse.etrice.core.common.converter.BaseConverterService
 import org.eclipse.etrice.core.common.converter.CCStringIndentation
-import org.eclipse.xtext.junit4.InjectWith
-import org.eclipse.xtext.junit4.XtextRunner
+import org.eclipse.xtext.testing.InjectWith
+import org.eclipse.xtext.testing.XtextRunner
+//import org.eclipse.xtext.junit4.InjectWith
+//import org.eclipse.xtext.junit4.XtextRunner
 import org.eclipse.xtext.util.Strings
 import org.junit.Test
 import org.junit.runner.RunWith
@@ -220,7 +222,7 @@
 			assertEquals('''
 			   
 			
-		 
+					 
 			text
 			'''.toString, toValue(text))
 			assertFalse(new CCStringIndentation(text).hasConsistentIndentation)
diff --git a/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/RelativeFileURITest.xtend b/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/RelativeFileURITest.xtend
index 61c46a4..5a8553f 100644
--- a/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/RelativeFileURITest.xtend
+++ b/tests/org.eclipse.etrice.core.common.tests/src/org/eclipse/etrice/core/common/tests/RelativeFileURITest.xtend
@@ -62,7 +62,7 @@
 	]
 
 	// require ResourcePlugin and actual files to test
-	val static ENCODED_PLATFORM_PATH_URIS = #[
+	package val static ENCODED_PLATFORM_PATH_URIS = #[
 		"platform:/resource/project/myfile.txt",
 		"platform:/resource/My%20Project%20%231/My%20File.txt",
 		"platform:/resource/are%20you%20there%3F",
diff --git a/tests/org.eclipse.etrice.core.config.tests/.classpath b/tests/org.eclipse.etrice.core.config.tests/.classpath
index d2fd5c8..1c48e50 100644
--- a/tests/org.eclipse.etrice.core.config.tests/.classpath
+++ b/tests/org.eclipse.etrice.core.config.tests/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tests/org.eclipse.etrice.core.config.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.config.tests/META-INF/MANIFEST.MF
index 2071d39..5c0588b 100644
--- a/tests/org.eclipse.etrice.core.config.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.config.tests/META-INF/MANIFEST.MF
@@ -23,3 +23,4 @@
  org.hamcrest.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.core
+Automatic-Module-Name: org.eclipse.etrice.core.config.tests
diff --git a/tests/org.eclipse.etrice.core.etmap.tests/.classpath b/tests/org.eclipse.etrice.core.etmap.tests/.classpath
index fe30bcb..a3a110f 100644
--- a/tests/org.eclipse.etrice.core.etmap.tests/.classpath
+++ b/tests/org.eclipse.etrice.core.etmap.tests/.classpath
@@ -3,6 +3,10 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tests/org.eclipse.etrice.core.etmap.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.etmap.tests/META-INF/MANIFEST.MF
index 50c8a75..f11c38e 100644
--- a/tests/org.eclipse.etrice.core.etmap.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.etmap.tests/META-INF/MANIFEST.MF
@@ -21,3 +21,4 @@
  org.hamcrest.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.core.etmap
+Automatic-Module-Name: org.eclipse.etrice.core.etmap.tests
diff --git a/tests/org.eclipse.etrice.core.etphys.tests/.classpath b/tests/org.eclipse.etrice.core.etphys.tests/.classpath
index fe30bcb..a3a110f 100644
--- a/tests/org.eclipse.etrice.core.etphys.tests/.classpath
+++ b/tests/org.eclipse.etrice.core.etphys.tests/.classpath
@@ -3,6 +3,10 @@
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tests/org.eclipse.etrice.core.etphys.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.etphys.tests/META-INF/MANIFEST.MF
index ad0ea5d..fb4f870 100644
--- a/tests/org.eclipse.etrice.core.etphys.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.etphys.tests/META-INF/MANIFEST.MF
@@ -21,3 +21,4 @@
  org.hamcrest.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.core.etphys
+Automatic-Module-Name: org.eclipse.etrice.core.etphys.tests
diff --git a/tests/org.eclipse.etrice.core.fsm.tests/.classpath b/tests/org.eclipse.etrice.core.fsm.tests/.classpath
index 8e001f7..a5d9f4e 100644
--- a/tests/org.eclipse.etrice.core.fsm.tests/.classpath
+++ b/tests/org.eclipse.etrice.core.fsm.tests/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tests/org.eclipse.etrice.core.fsm.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.fsm.tests/META-INF/MANIFEST.MF
index 40bae65..7ad3102 100644
--- a/tests/org.eclipse.etrice.core.fsm.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.fsm.tests/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.core.runtime,
  org.eclipse.xtext.junit4;bundle-version="2.6.0",
  org.eclipse.ui.workbench;resolution:=optional,
- org.objectweb.asm;bundle-version="[5.0.1,6.0.0)";resolution:=optional,
+ org.objectweb.asm;bundle-version="[5.0.1,7.0.0)";resolution:=optional,
  org.eclipse.xtext.xbase.lib
 Import-Package: org.apache.log4j,
  org.junit;version="4.5.0",
@@ -23,3 +23,4 @@
  org.hamcrest.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.core.fsm
+Automatic-Module-Name: org.eclipse.etrice.core.fsm.tests
diff --git a/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.classpath b/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.classpath
index 325150d..ef58158 100644
--- a/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.classpath
+++ b/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.classpath
@@ -1,8 +1,16 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="src" path="src">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" path="xtend-gen">
+		<attributes>
+			<attribute name="test" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.settings/org.eclipse.jdt.core.prefs b/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.settings/org.eclipse.jdt.core.prefs
index f42de36..0c68a61 100644
--- a/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/tests/org.eclipse.etrice.core.genmodel.fsm.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,7 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
-org.eclipse.jdt.core.compiler.compliance=1.7
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.7
+org.eclipse.jdt.core.compiler.source=1.8
diff --git a/tests/org.eclipse.etrice.core.genmodel.fsm.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.genmodel.fsm.tests/META-INF/MANIFEST.MF
index 1222539..e50e943 100644
--- a/tests/org.eclipse.etrice.core.genmodel.fsm.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.genmodel.fsm.tests/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-SymbolicName: org.eclipse.etrice.core.genmodel.fsm.tests
 Bundle-Version: 2.0.0.qualifier
 Bundle-Vendor: Eclipse eTrice
-Bundle-RequiredExecutionEnvironment: JavaSE-1.7
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Require-Bundle: org.junit;bundle-version="4.12.0",
  org.eclipse.osgi;bundle-version="3.11.2",
  org.eclipse.core.runtime;bundle-version="3.12.0",
@@ -14,3 +14,4 @@
  org.eclipse.etrice.generator.base;bundle-version="2.0.0"
 Bundle-Activator: org.eclipse.etrice.core.genmodel.fsm.tests.FSMGenModelTestsActivator
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.core.genmodel.fsm.tests
diff --git a/tests/org.eclipse.etrice.core.genmodel.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.genmodel.tests/META-INF/MANIFEST.MF
index ddfe2f9..2d3c9c7 100644
--- a/tests/org.eclipse.etrice.core.genmodel.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.genmodel.tests/META-INF/MANIFEST.MF
@@ -13,3 +13,4 @@
  org.eclipse.etrice.generator.base;bundle-version="2.0.0"
 Bundle-Activator: org.eclipse.etrice.core.genmodel.GenmodelTestsActivator
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.core.genmodel.tests
diff --git a/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestLayers.java b/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestLayers.java
index 27d3aa1..fc17cba 100644
--- a/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestLayers.java
+++ b/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestLayers.java
@@ -57,7 +57,7 @@
 		
 		SAPInstance sap = (SAPInstance) getInstance(saps, "/CMain/app/subsysA/userX/sap");
 		assertNotNull("sap expected", sap);
-		InterfaceItemInstance peer = ((SAPInstance)sap).getPeers().get(0);
+		InterfaceItemInstance peer = sap.getPeers().get(0);
 		assertTrue("peer is a service", (peer instanceof ServiceImplInstance));
 		ServiceImplInstance svc = (ServiceImplInstance) peer;
 		assertEquals("number of serviceA peers", 3, svc.getPeers().size());
diff --git a/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestOptionalActors.java b/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestOptionalActors.java
index 30b5c85..803c926 100644
--- a/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestOptionalActors.java
+++ b/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestOptionalActors.java
@@ -64,7 +64,7 @@
 		SAPInstance sap = (SAPInstance) getInstance(saps, "/OptionalForSvcOK/ref0/sap1");
 		assertNotNull("sap expected", sap);
 		assertEquals("SAP has one peer", 1, sap.getPeers().size());
-		InterfaceItemInstance peer = ((SAPInstance)sap).getPeers().get(0);
+		InterfaceItemInstance peer = sap.getPeers().get(0);
 		assertTrue("peer is a service", (peer instanceof ServiceImplInstance));
 		ServiceImplInstance svc = (ServiceImplInstance) peer;
 		assertEquals("number of service peers", 1, svc.getPeers().size());
diff --git a/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestStructureInheritance.java b/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestStructureInheritance.java
index 23cfcd4..c3a11bb 100644
--- a/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestStructureInheritance.java
+++ b/tests/org.eclipse.etrice.core.genmodel.tests/src/org/eclipse/etrice/core/genmodel/TestStructureInheritance.java
@@ -85,7 +85,7 @@
 		
 		SAPInstance sap = (SAPInstance) getInstance(saps, "/CMain/application/fcta/sub2/timeout");
 		assertNotNull("sap expected", sap);
-		InterfaceItemInstance peer = ((SAPInstance)sap).getPeers().get(0);
+		InterfaceItemInstance peer = sap.getPeers().get(0);
 		assertTrue("peer is a service", (peer instanceof ServiceImplInstance));
 		ServiceImplInstance svc = (ServiceImplInstance) peer;
 		assertEquals("number of serviceA peers", 8, svc.getPeers().size());
diff --git a/tests/org.eclipse.etrice.core.room.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.core.room.tests/META-INF/MANIFEST.MF
index 1aa9aa9..7272165 100644
--- a/tests/org.eclipse.etrice.core.room.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.core.room.tests/META-INF/MANIFEST.MF
@@ -19,3 +19,4 @@
 Bundle-Activator: org.eclipse.etrice.core.CoreTestsActivator
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.etrice.core
+Automatic-Module-Name: org.eclipse.etrice.core.room.tests
diff --git a/tests/org.eclipse.etrice.etunit.converter.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.etunit.converter.tests/META-INF/MANIFEST.MF
index 8b85497..2d87b0b 100644
--- a/tests/org.eclipse.etrice.etunit.converter.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.etunit.converter.tests/META-INF/MANIFEST.MF
@@ -12,3 +12,4 @@
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
 Import-Package: com.google.common.io
+Automatic-Module-Name: org.eclipse.etrice.etunit.converter.tests
diff --git a/tests/org.eclipse.etrice.generator.fsmtest.tests/.classpath b/tests/org.eclipse.etrice.generator.fsmtest.tests/.classpath
index d2fd5c8..1c48e50 100644
--- a/tests/org.eclipse.etrice.generator.fsmtest.tests/.classpath
+++ b/tests/org.eclipse.etrice.generator.fsmtest.tests/.classpath
@@ -1,6 +1,10 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="src-gen">
+		<attributes>
+			<attribute name="ignore_optional_problems" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tests/org.eclipse.etrice.generator.fsmtest.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.generator.fsmtest.tests/META-INF/MANIFEST.MF
index af4c807..68fa8e9 100644
--- a/tests/org.eclipse.etrice.generator.fsmtest.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.generator.fsmtest.tests/META-INF/MANIFEST.MF
@@ -20,3 +20,4 @@
  org.hamcrest.core
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.generator
+Automatic-Module-Name: org.eclipse.etrice.generator.fsmtest.tests
diff --git a/tests/org.eclipse.etrice.generator.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.generator.tests/META-INF/MANIFEST.MF
index be6f444..2e098df 100644
--- a/tests/org.eclipse.etrice.generator.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.generator.tests/META-INF/MANIFEST.MF
@@ -16,3 +16,4 @@
  org.eclipse.core.runtime;bundle-version="3.6.0"
 Bundle-Activator: org.eclipse.etrice.generator.InstanceTestsActivator
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.generator.tests
diff --git a/tests/org.eclipse.etrice.runtime.java.tests/.classpath b/tests/org.eclipse.etrice.runtime.java.tests/.classpath
index 707c20f..4283641 100644
--- a/tests/org.eclipse.etrice.runtime.java.tests/.classpath
+++ b/tests/org.eclipse.etrice.runtime.java.tests/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
 	<classpathentry combineaccessrules="false" kind="src" path="/org.eclipse.etrice.runtime.java"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tests/org.eclipse.etrice.ui.base.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.ui.base.tests/META-INF/MANIFEST.MF
index 8476b89..02a5bb8 100644
--- a/tests/org.eclipse.etrice.ui.base.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.ui.base.tests/META-INF/MANIFEST.MF
@@ -17,4 +17,5 @@
 Bundle-Vendor: Eclipse eTrice
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Export-Package: org.eclipse.etrice.tests.base
+Automatic-Module-Name: org.eclipse.etrice.ui.base.tests
 
diff --git a/tests/org.eclipse.etrice.ui.behavior.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.ui.behavior.tests/META-INF/MANIFEST.MF
index 00cd137..02c3759 100644
--- a/tests/org.eclipse.etrice.ui.behavior.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.ui.behavior.tests/META-INF/MANIFEST.MF
@@ -24,3 +24,4 @@
 Import-Package: org.eclipse.xtext.xbase.lib
 Bundle-RequiredExecutionEnvironment: JavaSE-1.8
 Bundle-ActivationPolicy: lazy
+Automatic-Module-Name: org.eclipse.etrice.ui.behavior.tests
diff --git a/tests/org.eclipse.etrice.ui.structure.tests/META-INF/MANIFEST.MF b/tests/org.eclipse.etrice.ui.structure.tests/META-INF/MANIFEST.MF
index fc10f1a..484601a 100644
--- a/tests/org.eclipse.etrice.ui.structure.tests/META-INF/MANIFEST.MF
+++ b/tests/org.eclipse.etrice.ui.structure.tests/META-INF/MANIFEST.MF
@@ -18,3 +18,4 @@
 Bundle-Vendor: Eclipse eTrice
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.etrice.ui.structure.StructureTestActivator
+Automatic-Module-Name: org.eclipse.etrice.ui.structure.tests
diff --git a/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithBindings.java b/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithBindings.java
index b4f93da..2df1f85 100644
--- a/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithBindings.java
+++ b/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithBindings.java
@@ -112,7 +112,7 @@
 
 			// the second ref is represented once in the diagram
 			assertNotNull("second ref", b.getEndpoint2().getActorRef());
-			pes = Graphiti.getLinkService().getPictogramElements(diagram, ((ActorRef)b.getEndpoint2().getActorRef()));
+			pes = Graphiti.getLinkService().getPictogramElements(diagram, b.getEndpoint2().getActorRef());
 			assertEquals("instances of second ref", 1, pes.size());
 		}
 	}
diff --git a/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithInheritance.java b/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithInheritance.java
index 2bff6a7..2e80ae3 100644
--- a/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithInheritance.java
+++ b/tests/org.eclipse.etrice.ui.structure.tests/src/org/eclipse/etrice/ui/structure/commands/TestActorClassWithInheritance.java
@@ -171,7 +171,7 @@
 
 			// the second ref is represented once in the diagram
 			assertNotNull("second ref", b.getEndpoint2().getActorRef());
-			pes = Graphiti.getLinkService().getPictogramElements(diagram, ((ActorRef)b.getEndpoint2().getActorRef()));
+			pes = Graphiti.getLinkService().getPictogramElements(diagram, b.getEndpoint2().getActorRef());
 			assertEquals("instances of second ref", 1, pes.size());
 		}
 	}